mybatis实现分页的三种方法
1. SQL分页select *from user limit 0, 5size的含义:需要展示的页面信息数目。index的含义:从哪个位置起,SQL中的下标是从0开始的,如果写的是0 , 5那么只有最前面的【0、1、2、3、4】五条信息。index的可选性:这个参数是一个可有可无的,如果不写index实际是index = 0,即limit 6默认被转化为 limit 0 ,6。size的bug:
1. SQL分页
select *from user limit 0, 5
-
size的含义:需要展示的页面信息数目。
-
index的含义:从哪个位置起,SQL中的下标是从0开始的,如果写的是0 , 5那么只有最前面的【0、1、2、3、4】五条信息。
-
index的可选性:这个参数是一个可有可无的,如果不写index实际是index = 0,即limit 6 默认被转化为 limit 0 ,6。
-
size的bug:如果想加载所有的数据可以将size 置为 -1(这种用法被认为是MySQL的bug已经被修复),现在MySQL给的解决方案是写一个超大的正数即可全部加载。
2. 最原生的limit语句
与传统的JDBC分页实现一样,在编写的SQL语句执行的时候动态传入两个变量,一个是起始位置,另外一个是数目。resultType = "map"在程序中定义个hashmap加入这两个参数让xml配置文件对这两个数据进行加载即可。
接口UserMapper.java
import java.util.List;
import java.util.Map;
public interface UserMapper {
List<User> getUserListByLimit(Map<String, Integer> map);
}
UserMapper.xml映射文件
<select id="getUserListByLimit" parameterType="map" resultType="user">
select *from user limit #{startIndex}, #{countSize}
</select>
测试方法
@Test
public void LimitPage(){
SqlSession session = mybatisUtil.getSqlsession();
HashMap<String,Integer> map = new HashMap<>();
map.put("startIndex", 0); //起始下标
map.put("countSize",5); //加载数目
UserMapper mapper = session.getMapper(UserMapper.class);
List<User> list = mapper.getUserListByLimit(map);
for(User user : list){
System.out.println(user.toString());
}
session.close();
}
2. 使用RowBounds对象
相对于原生SQL语句来说,无非就是传两个参数一个起始位置index,一个是数目size。现在直接使用RowBounds封装这两个参数传给xml配置文件。
-
mybatis官方提供的SQL执行分为很多种,现在官分推荐使用的是getMapper反射加载一个类,然后执行这个方法。
-
mybatis官分为CRUD都分别设置了单独的方法,在使用RowBounds时必须使用这些量身定制化的CRUD方法。
接口UserMapper.java
import java.util.List;
import java.util.Map;
public interface UserMapper {
List<User> getUserListByRowBounds();
}
UserMapper.xml映射文件
<select id="getUserListByRowBounds" resultType="user">
select *from user
</select>
测试方法
@Test
public void RowBoundsPage(){
SqlSession session = mybatisUtil.getSqlsession();
RowBounds bounds = new RowBounds(2,3);
/*
使用mybatis对crud分别量身定制化的方法。
1. 第一个参数是绑定的接口中的方法名
2. 第二个是方法所需的参数(这里没有参数传入)
3. 第三个参数就是RowBounds对象
*/
List<User> list = session.selectList("com.ljq.dao.UserMapper.getUserListByRowBounds", null, bounds);
for(User user : list){
System.out.println(user.toString());
}
session.close();
}
4. 使用PageHelper插件
无论最后mybatis给项目开发带来了多大的便利,最后它的底层实现一定还是Java语言 + 最原始的SQL语句。语言才是程序员的家,合理使用框架。
更多推荐
所有评论(0)