Mybatis

Mybatis

MyBatis本是apache的一个开源项目iBatis,2010年这个项目有Apache software foundation 迁移到了Google code,并改名MyBatis.2013年11月迁移到Github。iBatis是半ORM映射框架,它需要在数据库里手动建表,CURD操作时要自己写SQL语句,而Hibernate是全ORM映射框架,它只需要配置好文件,表会自动生成,CURD的SQL语句也是自动生成的,这是他们的主要区别。

MyBatis小巧,简单易学

MyBatis入门案例(综合)

1.1附加架包

Mybatis

1.2编写MyBatis配置文件 mybatis-comfig.xml(由于本人oracle数据库安装的问题端口号及数据库有所不同)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--  别名的配置      Dept-->
    <typeAliases>
        <typeAlias type="cn.mybatis.entity.Dept" alias="Dept"/>
    </typeAliases>
     
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="oracle.jdbc.OracleDriver" />
                <property name="url" value="jdbc:oracle:thin:@localhost:1522:orc" />
                <property name="username" value="bxq" />
                <property name="password" value="bxq" />
            </dataSource>
        </environment>
    </environments>
    <!--关联小配置-->
    <mappers>
        <mapper resource="cn/mybatis/entity/Dept.xml" />
        <mapper resource="cn/mybatis/entity/Dept2.xml" />
    </mappers>
     
 
</configuration>

1.3编写Dept实体类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package cn.mybatis.entity;
 
public class Dept {
    private Integer deptNo;//部门编号
    private String deptName;//部门名称
    private String deptCity;//部门所在地址
    public String getDeptCity() {
        return deptCity;
    }
    public void setDeptCity(String deptCity) {
        this.deptCity = deptCity;
    }
    public Integer getDeptNo() {
        return deptNo;
    }
    public void setDeptNo(Integer deptNo) {
        this.deptNo = deptNo;
    }
    public String getDeptName() {
        return deptName;
    }
    public void setDeptName(String deptName) {
        this.deptName = deptName;
    }
    @Override
    public String toString(){
        return "Dept [deptNo= " + deptNo +", deptName=" + deptName+",deptCity"+deptCity+"]";
    }
}

1.4编写Dept.xml小配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<?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="cn.mybatis.entity.Dept">
 
<resultMap type="Dept" id="resultMapper">
    <result property="deptName" column="deptName"/>
    <result property="deptNo" column="deptNo"/>
    <result property="deptCity" column="deptCity"/>
</resultMap>
     <!--代替"*"的方法-->
    <sql id="columns"><br>          <!--植入所需要的列名-->
        deptNo,deptName,deptCity
    </sql>
  <!--++++++++++++++++++++++++++resultMap 实现结果映射++++++++++++++++++++-->
        <!-- 查询部门信息   resultMap 实现结果映射 -->
        <select id="selectAllDeptMapper" resultMap="resultMapper">
            select * from dept
        </select>
        <!-- 代替"*"  连接sql标签的id="columns"-->
        <select id="selectAllDeptUseAlias" resultType="Dept">
            select <include refid="columns"/> from dept
        </select>
 
    <!-- +++++++++++++++++++++++++++++++分割线+++++++++++++++++++++++++++ -->
 
     
    <!-- 1.1查询部门所有信息 -->
        <select id="selectAllDept" resultType="Dept">
        <!--查询所有部门信息  -->
        <!-- SQL不区分大小写 -->
            select * from dept
        </select>
         
    <!-- 增加部门信息 -->
        <insert id="insertDept" parameterType="Dept">
            insert into dept values(#{deptNo},#{deptName},#{deptCity})
        </insert>
         
    <!-- 删除信息 -->
        <delete id="deleteDept" parameterType="Dept">
         
            delete from dept where deptNo=#{deptNo}
        </delete>
         
    <!-- 修改信息 -->
        <update id="updateDept" parameterType="Dept">
         
            update dept set deptName=#{deptName} where deptNo=#{deptNo}
        </update>
         
    <!-- 模糊查询 -->
        <select id="likeDept" parameterType="Dept" resultType="Dept">
         
            select * from dept where deptName like '%${deptName}%'
        </select>
    </mapper>

1.5书写MyTest测试类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
package cn.mybatis.Test;
 
import java.io.IOException;
import java.io.Reader;
import java.util.List;
 
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
 
import cn.mybatis.entity.Dept;
 
public class MyTest {
     
    SqlSession session;
    @Before
    public void initData() throws IOException{
           Reader  reader=Resources.getResourceAsReader("mybatis-config.xml");        
          SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);       
          session= factory.openSession();
    }  
     @Test
       public void testselectAllDept() throws IOException{
          //在xml配置中的一个锁定唯一SQL的id
          List<Dept> selectList = session.selectList("selectAllDept");
          for (Dept dept : selectList) {
              System.out.println(dept);
          }
       }   
     //模糊查詢
    @Test
    public void likeTest(){
        Dept dept = new Dept();
        dept.setDeptName("市场");
        List<Dept> list = session.selectList("cn.mybatis.entity.Dept.likeDept",dept);
        for (Dept item : list) {
            System.out.println(item);
        }
        session.close();
    }
    //修改
    @Test
    public void updateTest(){
        Dept dept = new Dept();
        dept.setDeptNo(5);
        dept.setDeptName("开发部");
        int count = session.update("cn.mybatis.entity.Dept.updateDept",dept);
        session.commit();
        System.out.println(count+"update ok!!!");
        session.close();
    }
    //删除
     @Test
       public void testdeleteDept() throws IOException{
         Dept dept = new Dept();
          dept.setDeptNo(8);
          int count = session.delete("cn.mybatis.entity.Dept.deleteDept",dept);
          session.commit();
          System.out.println(count+"del ok!");
       }
     //增加
     @Test
       public void testinsertDept() throws IOException{
         Dept dept = new Dept();
         dept.setDeptNo(8);
         dept.setDeptName("财务部1");
         dept.setDeptCity("上海");
          int count = session.insert("cn.mybatis.entity.Dept.insertDept",dept);
          session.commit();
          System.out.println(count+"insert ok!!!");
       }
      
      
     /*
      * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      *  resultMap的使用
      */
      
      
    @Test
    public void testresultMap() throws IOException{
        List<Dept> list = session.selectList("cn.mybatis.entity.Dept.selectAllDeptMapper");
        for (Dept dept : list) {
            System.out.println(dept);
        }
        session.close();
    }
    @Test
    public void selectAllDeptUseAlias() throws IOException{
        List<Dept> list = session.selectList("cn.mybatis.entity.Dept.selectAllDeptUseAlias");
        for (Dept dept : list) {
            System.out.println(dept);
        }
        session.close();
    }
      
    /*
     * 动态查询+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     */
    @Test
     public void TestdynamicSelect() throws IOException{
         Dept dept = new Dept();
         dept.setDeptName("市场部");
         dept.setDeptNo(4);
         dept.setDeptCity("北京");
         List<Dept> list = session.selectList("cn.mybatis.dao.IDeptDao.dynamicSelect",dept);
         for (Dept dept2 : list) {
            System.out.println(dept2);
        }
     }
    //动态修改
    @Test
     public void Testdynamicupdate() throws IOException{
         Dept dept = new Dept();
         dept.setDeptName("市场部1");
         dept.setDeptNo(4);
         dept.setDeptCity("北京");
        int count = session.update("cn.mybatis.dao.IDeptDao.dynamicUpdate",dept);
            System.out.println(count);
            session.close();
        }   
}

由于测试方法过多我们简单的运行出来一二个看一下结果

查询:

Mybatis

删除:

Mybatis

2. 动态查询

2.1编写Dept2.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?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="cn.mybatis.dao.IDeptDao">
    <!-- 1.1查询部门所有信息 -->
        <select id="selectDeptByNo" parameterType="int" resultType="Dept">
        <!--查询所有部门信息  -->
        <!-- SQL不区分大小写 -->
            select * from dept where deptNo=#{deptNo}
        </select>
         
        <select id="getMapper" resultType="Dept">
            select * from dept
        </select>
         
        <!-- 动态查询 -->
        <select id="dynamicSelect" parameterType="Dept" resultType="Dept">
            select * from dept
            <where>
                <if test="deptNo!=null">
                    and deptNo=#{deptNo}
                </if>
                <if test="deptName!=null">
                    and deptName=#{deptName}
                </if>
                <if test="deptCity!=null">
                    and deptCity=#{deptCity}
                </if>
            </where>
        </select>
         
         
        <!-- 动态修改 -->
        <select id="dynamicUpdate" parameterType="int" resultType="Dept">
            update dept
            <set>
                <if test="deptNo!=null">
                     deptNo=#{deptNo},
                </if>
                <if test="deptName!=null">
                     deptName=#{deptName},
                </if>
                <if test="deptCity!=null">
                     deptCity=#{deptCity},
                </if>
            </set>
                where deptNo=#{deptNo}
        </select>
         
         
    </mapper>

2.3在1.5 书写MyTest测试类中可找到我们需要的测试类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/*
     * 动态查询+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     */
    @Test
     public void TestdynamicSelect() throws IOException{
         Dept dept = new Dept();
         dept.setDeptName("市场部");
         dept.setDeptNo(4);
         dept.setDeptCity("北京");
         List<Dept> list = session.selectList("cn.mybatis.dao.IDeptDao.dynamicSelect",dept);
         for (Dept dept2 : list) {
            System.out.println(dept2);
        }
     }
    //动态修改
    @Test
     public void Testdynamicupdate() throws IOException{
         Dept dept = new Dept();
         dept.setDeptName("市场部1");
         dept.setDeptNo(4);
         dept.setDeptCity("北京");
        int count = session.update("cn.mybatis.dao.IDeptDao.dynamicUpdate",dept);
            System.out.println(count);
            session.close();
        }  

2.4运行结果

动态查询

Mybatis

动态修改

Mybatis

 3.resultMap实现结果映射

3.1 先前在 1.4编写Dept.xml小配置文件中已经配置好了需要用到的条件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*
     * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     *  resultMap的使用
     */
     
     
   @Test
   public void testresultMap() throws IOException{
       List<Dept> list = session.selectList("cn.mybatis.entity.Dept.selectAllDeptMapper");
       for (Dept dept : list) {
           System.out.println(dept);
       }
       session.close();
   }
   @Test
   public void selectAllDeptUseAlias() throws IOException{
       List<Dept> list = session.selectList("cn.mybatis.entity.Dept.selectAllDeptUseAlias");
       for (Dept dept : list) {
           System.out.println(dept);
       }
       session.close();
   }

3.2测试类 与1.5书写MyTest测试类中可见  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*
     * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     *  resultMap的使用
     */
     
     
   @Test
   public void testresultMap() throws IOException{
       List<Dept> list = session.selectList("cn.mybatis.entity.Dept.selectAllDeptMapper");
       for (Dept dept : list) {
           System.out.println(dept);
       }
       session.close();
   }
   @Test
   public void selectAllDeptUseAlias() throws IOException{
       List<Dept> list = session.selectList("cn.mybatis.entity.Dept.selectAllDeptUseAlias");
       for (Dept dept : list) {
           System.out.println(dept);
       }
       session.close();
   }

3.3测试结果

1
testresultMap();

Mybatis

1
selectAllDeptUseAlias();

Mybatis

4.session.getMapper()方法

4.1

创建IDeptDao接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package cn.mybatis.dao;
 
import java.util.List;
 
import cn.mybatis.entity.Dept;
/**
 * 接口
 * @author xiaobai
 *
 */
public interface IDeptDao {
    public Dept selectDeptByNo(Integer deptNo);
 
    public List<Dept> getMapper();
}

 4.2编写MyTest2测试类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package cn.mybatis.Test;
 
import java.io.IOException;
import java.io.Reader;
import java.util.List;
 
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
 
import cn.mybatis.dao.IDeptDao;
import cn.mybatis.entity.Dept;
 
public class MyTest2 {
    SqlSession session;
    @Before
    public void initData() throws IOException{
           Reader  reader=Resources.getResourceAsReader("mybatis-config.xml");        
          SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);       
          session= factory.openSession();
    }  
    //实现getMapper接口<br>     //按条件查询
    @Test
    public void TestgetMapper(){
        IDeptDao mapper = session.getMapper(IDeptDao.class);
        Dept dept = mapper.selectDeptByNo(5);
        System.out.println(dept.getDeptName());
        session.close();
    }
    //查询全部信息
    @Test
    public void TestgetMapper1() throws Exception{
        IDeptDao mapper = session.getMapper(IDeptDao.class);
        List<Dept> list=mapper.getMapper();
        for (Dept dept : list) {
            System.out.println(dept.getDeptName());
        }
    }
     
     
     
}
1
 
1
4.3测试结果:<br>查询全部信息

Mybatis

上一篇:代码自动生成工具MyGeneration之一(程序员必备工具)


下一篇:一、Spring Cloud介绍