zoukankan      html  css  js  c++  java
  • mybatis 环境搭建和基本说明

    mybatis介绍就不多提了,直接步入正题。

    先准备好eclipse和MySQL,然后先看一下目录结构

    文件和类很少,所以mybatis的搭建是非常简单的,如搭建中遇到问题可以先参考文档最后一部分的综合说明。

    1.下载mybatis-3.2.6.jar和mysql-connector-java-5.1.8.jar两个jar包,可以到各自官网下载,里面包含了之后需要的很多jar包。

    2.创建Dynamic Web project项目名MyBatis(我的项目名:mybatis),把jar包复制到WEB-INF/lib文件夹下。

    3.在建立好的项目中,再创建两个Source Folder,分别为me.gacl.domain和me.gacl.mapping。

    user.java

    package me.gacl.domain;
    
    public class User {
    
    	private int id;
    	private String name;
    	private String dept;
    	private String phone;
    	private String website;
    	
    	public String getWebsite() {
    		return website;
    	}
    	public void setWebsite(String website) {
    		this.website = website;
    	}
    	public int getId() {
    		return id;
    	}
    	public void setId(int id) {
    		this.id = id;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getDept() {
    		return dept;
    	}
    	public void setDept(String dept) {
    		this.dept = dept;
    	}
    	public String getPhone() {
    		return phone;
    	}
    	public void setPhone(String phone) {
    		this.phone = phone;
    	}
    	@Override
    	public String toString() {
    		return "User [id=" + id + ", name=" + name + ", dept=" + dept + ", phone=" + phone + ", website=" + website
    				+ "]";
    	}
    	
    	
    	
    }
    

      

    userMapping.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <!-- 为这个mapper指定一个唯一的namespace,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
    例如namespace="me.gacl.mapping.userMapper"就是me.gacl.mapping(包名)+userMapper(userMapper.xml文件去除后缀)
     -->
    <mapper namespace="me.gacl.mapping.userMapper">
        <!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复
        使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型
        resultType="me.gacl.domain.User"就表示将查询结果封装成一个User类的对象返回
        User类就是users表所对应的实体类
        -->
        <!-- 
            根据id查询得到一个user对象
         -->
        <select id="getUser" parameterType="int"  resultType="me.gacl.domain.User">
            select * from user where id=#{id}
        </select>
    </mapper>
    

      

    在src文件夹下建立conf.xml配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC" />
                <!-- 配置数据库连接信息 -->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver" />
                    <property name="url" value="jdbc:mysql://localhost:3306/yiibai" />
                    <property name="username" value="root" />
                    <property name="password" value="" />
                </dataSource>
            </environment>
        </environments>
        
        <mappers>
            <!-- 注册userMapper.xml文件, 
            userMapper.xml位于me.gacl.mapping这个包下,所以resource写成me/gacl/mapping/userMapper.xml-->
            <mapper resource="me/gacl/mapping/userMapper.xml"/>
        </mappers>
        
    </configuration>
    

      

    mysql,数据表:user

    DROP TABLE IF EXISTS `user`;
    CREATE TABLE `user` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `name` varchar(64) NOT NULL DEFAULT '',
      `dept` varchar(254) NOT NULL DEFAULT '',
      `website` varchar(254) DEFAULT '',
      `phone` varchar(16) NOT NULL DEFAULT '',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of user
    -- ----------------------------
    INSERT INTO `user` VALUES ('1', 'aaa', 'Tech', 'http://www.aaa.com', '13800009988');
    

      

    建立测试文件:

    包名:me.gacl.test

    package me.gacl.test;
    
    import java.io.IOException;
    import java.io.InputStream;
    
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    import me.gacl.domain.User;
    import me.gacl.domain.User2;
    
    public class Test1 {
    
    	
    	
    	 public static void main(String[] args) throws IOException {
    	        //mybatis的配置文件
    	        String resource = "conf.xml";
    	        //使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
    	        InputStream is = Test1.class.getClassLoader().getResourceAsStream(resource);
    	        //构建sqlSession的工厂
    	        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
    	        //使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件)
    	        //Reader reader = Resources.getResourceAsReader(resource); 
    	        //构建sqlSession的工厂
    	        //SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
    	        //创建能执行映射文件中sql的sqlSession
    	        SqlSession session = sessionFactory.openSession();
    	        /**
    	         * 映射sql的标识字符串,
    	         * me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,
    	         * getUser是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
    	         */
    	        String statement = "me.gacl.mapping.userMapper.getUser";//映射sql的标识字符串
    	        //执行查询返回一个唯一user对象的sql
    	        User user = session.selectOne(statement, 1);
    	        System.out.println(user);
    	    }
    	 
    }
    

      

    然后运行它。

    综合说明:

    到目前为止共有两个xml配置文件。mybatis-config.xml文件时mybatis的核心配置文件,里面配置了实体类别名<typeAliases>、数据库连接环境<environments>、实体类映射的xml配置文件的加载<mappers>等。User.xml配置文件是我们写sql语句的文件,与实体类一一对应,映射对应的数据库表。下图是对两个配置文件和测试代码关系的展示:

    对应图中编号

    1. 实体类别名。在User.xml配置文件中的resultType返回值类型是实体的时候写此别名,不配置的话,需要写bdt.model.User会很麻烦,这样一配置一劳永逸。resultType还有map等返回值类型,之后再说。

    2. mappers标签配置的是需要加载哪些配置文件,不配置系统就不知道你有此User.xml配置文件。

    3. 映射的命名空间,目前这个可以是随意字符串,但是在以后用接口的方式的时候就不能随便写了,目前可以随便写。

    4. 要执行哪个语句,必须是唯一值,开发中会有很多增删改查语句,这个必须唯一的指定要执行哪条语句。

    5. 传入语句的条件,会有很多类型,这里是int类型,#{id}方式可以获得传进来的条件参数。

    6. bdt.model.User,对应实体类。

    7. 另外还需要注意图中三个绿色方框内容,<typeAliases>、<environments>、<mappers>这三个的顺序是不能颠倒的,如果颠倒会报如下错误:

    The content of element type "configuration" must match 

    "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,plugins?,environments?,databaseIdProvider?,mappers?)".

    显而易见,配置文件中的标签是有顺序的,正确的顺序错误提示中已经列出来了,之后我们还要添加<properties>配置文件,自然而然必须放到<typeAliases>之前。

    好的,我的mybatis已经搭建完成并测试成功了,并对基本的配置有一点了解,但是还不够,接下来会更深入的学习。

  • 相关阅读:
    Sqli-labs less 25a
    Sqli-labs less 26
    Sqli-labs less 26a
    Sqli-labs less 27
    Sqli-labs less 27a
    Sqli-labs less 28
    Sqli-labs less 28a
    Python3之sys模块
    Python3之os模块
    Python3之XML模块
  • 原文地址:https://www.cnblogs.com/achengmu/p/9160571.html
Copyright © 2011-2022 走看看