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