1. SQL分页

select *from user limit 0, 5
  1. size的含义:需要展示的页面信息数目。

  2. index的含义:从哪个位置起,SQL中的下标是从0开始的,如果写的是0 , 5那么只有最前面的【0、1、2、3、4】五条信息。

  3. index的可选性:这个参数是一个可有可无的,如果不写index实际是index = 0,即limit 6 默认被转化为 limit 0 ,6。

  4. 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配置文件。

  1. mybatis官方提供的SQL执行分为很多种,现在官分推荐使用的是getMapper反射加载一个类,然后执行这个方法。

  2. 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语句。语言才是程序员的家,合理使用框架。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐