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附加架包

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();
         }   
}

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

查询:

删除:

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运行结果

动态查询

动态修改

  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();

 

1
selectAllDeptUseAlias();

 

 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>查询全部信息

转载于:https://www.cnblogs.com/yangronglin/p/5890198.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值