前言:

本文内容:RowBounds分页、使用注解开发、Mybatis执行流程剖析

推荐免费MyBatis基础教程视频:【狂神说Java】Mybatis最新完整教程IDEA版通俗易懂_哔哩哔哩_bilibili

RowBounds分页

这种方法不建议使用,仅作了解

不适用SQL实现分页的方法

测试

UserMapper.java

1
2
// RowBounds分页
List<User> getUserRowBounds();

UserMapper.xml

1
2
3
4
<!--    RowBounds分页查询-->
<select id="getUserRowBounds" resultMap="userMap">
select * from user
</select>

MapperTest.java

1
2
3
4
5
6
7
8
9
10
11
12
13
// RowBounds分页
@Test
public void getUserByRowBounds(){
SqlSession sqlSession = MyBatisUtil.getSqlSession();
// RowBounds实现分页
RowBounds rowBounds = new RowBounds(0,2);
List<User> userList = sqlSession.selectList("com.jokerdig.mapper.UserMapper.getUserRowBounds",null,rowBounds);

for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}

运行结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
......
Opening JDBC Connection
Created connection 23211803.
Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@1622f1b]
==> Preparing: select * from user
==> Parameters:
<== Columns: id, name, pwd
<== Row: 1, admin, 123
<== Row: 2, abc, 123
User{id=1, username='admin', password='123'}
User{id=2, username='abc', password='123'}
Resetting autocommit to true on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@1622f1b]
Closing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@1622f1b]
Returned connection 23211803 to pool.

Process finished with exit code 0

分页插件

MyBatis 分页插件 PageHelper

使用注解开发

面向接口编程

​ 根本原因:解耦,可拓展,提高复用,分层开发中,上层不用管具体的实现,大家都遵守共同的标准,是的开发更容易,规范性更好

使用注解

使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句,Java 注解不仅力不从心,还会让你本就复杂的 SQL 语句更加混乱不堪。 因此,如果你需要做一些很复杂的操作,最好用 XML 来映射语句。

注解本质:使用反射

注解底层:动态代理

UserMapper.java

1
2
3
// 使用注解实现查询用户
@Select("select * from user")
List<User> getUserList();

mybatis-config.xml

1
2
3
4
5
6
.......
<!-- 绑定接口-->
<mappers>
<mapper class="com.jokerdig.mapper.UserMapper"/>
</mappers>
.......

MapperTest.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Test
public void test(){
// 获得sqlSession对象
SqlSession sqlSession = MyBatisUtil.getSqlSession();
// 执行sql
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// mapper调用查询方法
List<User> userList = mapper.getUserList();
// 输出查询结果
for (User user : userList) {
System.out.println(user);
}
// 关闭sqlSession
sqlSession.close();
}

Mybatis执行流程剖析

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
Resources获取加载全局配置文件
|
|/
实例化SqlSessionFactoryBuilder
|
|/
解析配置文件流XMLConfigBuilder
|
|/
Configuration所有的配置信息
|
|/
sqlSessionFactory实例化
|
|/
transactional事务管理
|
|/
创建executor执行器
|
|/
创建sqlSession
|
|/
实现CRUD
|
|/
查看是否执行成功(失败则回滚到transactional事务管理)
|
|/
提交事务
|
|/
关闭sqlSession