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