摘要:Mybatis笔记_06-2021-06-16
1.limit
limit:用于限定查询结果返回的数量,常用于分页查询,按照我们给定的数,返回定量的值。
- SQL语句:select * from table_name limit m,n;
- table_name:表的名称
- m:索引值,即从哪条数据开始查询
- n:分量值,即这一页显示多少条数据
实现例子:
UserMapper.java
//查询所有用户,并进行分页显示
List<User> getUserListByLimit(Map<String,Integer> map);
UserMapper.xml
<!--查询所有用户,并进行分页显示-->
<select id="getUserListByLimit" parameterType="map" resultMap="t_user">
select *
from t_user
limit ${m},${n};
</select>
UserMapperTest
//查询所有用户,并进行分页显示
@Test
public void getUserListByLimitTest() {
//1.获取SQLSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
//2.获取SqlSession绑定的接口类,然后通过接口实现方法
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//3.定义一个map对象,用于传参
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("m",0);
map.put("n",3);
//4.测试方法
List<User> userList = mapper.getUserListByLimit(map);
for (User user : userList) {
System.out.println(user);
}
//5.关闭资源
sqlSession.close();
}
结果:
2.RowBounds
RowBounds :了解即可,不推荐使用
- 原理: 截取sql 查询结果的基础数据
- 不适用数据量大的sql查询中
- 适合在返回数据结果较少的查询
UserMapper.java
//查询所用用户,通过RowBounds进行分页显示
List<User> getUserListByRowBounds();
UserMapper.xml
<!--查询所用用户,通过RowBounds进行分页显示-->
<select id="getUserListByRowBounds" resultMap="t_user">
select *
from t_user;
</select>
UserMapperTest.java
//查询所用用户,通过RowBounds进行分页显示
@Test
public void getUserListByRowBoundsTest() {
//1.获取SQLSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
//2.通过RowBounds实现分页
RowBounds rowBounds = new RowBounds(0,3);
//3.通过java代码层面实现分页,面向对象
List<User> userList = sqlSession.selectList("com.riove.dao.UserMapper.getUserListByRowBounds",null,rowBounds);
for (User user : userList) {
System.out.println(user);
}
//4.关闭资源
sqlSession.close();
}
结果:
RowBounds源码:
3.PageHelper
PageHelper中文文档:https://pagehelper.github.io/docs/howtouse/
使用方法
1.在 pom.xml 中添加依赖
2.
helperDialect
:分页插件会自动检测当前的数据库链接,自动选择合适的分页方式。 你可以配置helperDialect
属性来指定分页插件使用哪种方言。
offsetAsPageNum
:默认值为 false
,该参数对使用 RowBounds
作为分页参数时有效。 当该参数设置为 true
时,会将 RowBounds
中的 offset
参数当成 pageNum
使用,可以用页码和页面大小两个参数进行分页。
rowBoundsWithCount
:默认值为false
,该参数对使用 RowBounds
作为分页参数时有效。 当该参数设置为true
时,使用 RowBounds
分页会进行 count 查询。
pageSizeZero
:默认值为 false
,当该参数设置为 true
时,如果 pageSize=0
或者 RowBounds.limit = 0
就会查询出全部的结果(相当于没有执行分页查询,但是返回结果仍然是 Page
类型)。
reasonable
:分页合理化参数,默认值为false
。当该参数设置为 true
时,pageNum<=0
时会查询第一页, pageNum>pages
(超过总数时),会查询最后一页。默认false
时,直接根据参数进行查询。
更多详细参数信息:PageHelper中文文档:https://pagehelper.github.io/docs/howtouse/
5.调用方式
//第一种,RowBounds方式的调用
List<Country> list = sqlSession.selectList("x.y.selectIf", null, new RowBounds(0, 10));
//第二种,Mapper接口方式的调用,推荐这种使用方式。
PageHelper.startPage(1, 10);
List<Country> list = countryMapper.selectIf(1);
//第三种,Mapper接口方式的调用,推荐这种使用方式。
PageHelper.offsetPage(1, 10);
List<Country> list = countryMapper.selectIf(1);