您的位置:

MyBatis分页原理

一、MyBatisPlus分页原理

MyBatisPlus是MyBatis的扩展工具包,它提供了丰富的功能和特性,其中包括分页功能。MyBatisPlus的分页原理是基于拦截器实现的。当我们在Mapper接口的方法上使用分页注解时,MyBatisPlus会根据注解中的参数生成分页拦截器,该拦截器会在执行SQL前进行拦截,将SQL改写成相应的分页SQL,最后执行并返回分页结果。 下面是一个使用MyBatisPlus分页的示例:
// Mapper接口
public interface UserMapper extends BaseMapper {
    // 分页查询用户列表
    @Select("select * from user")
    IPage
    selectUserPage(Page
     page);
}

// 业务层使用
Page
      page = new Page<>(1, 10);
IPage
       userPage = userMapper.selectUserPage(page);
List
       
        userList = userPage.getRecords();
       
      
     
    
   
  
可以看到,使用MyBatisPlus分页非常方便,只需要在Mapper方法上添加注解即可。

二、MyBatis分页条件查询

在使用MyBatis进行分页查询时,我们还可以根据条件进行筛选。这里我们以根据用户名模糊查询并分页为例。首先在Mapper接口方法上添加参数注解@Param,指定查询条件的参数名称和分页对象参数名称。
// Mapper接口
public interface UserMapper {
    // 根据用户名模糊查询用户列表
    List selectUserPage(@Param("username") String username, @Param("page") Page
    page);
}

   
  
然后在SQL语句中使用LIMIT分页语句,并在WHERE语句中加入条件。

最后,在业务层中调用Mapper接口方法即可。
Page page = new Page<>(1, 10);
List
    userList = userMapper.selectUserPage("admin", page);

   
  

三、MyBatis Page分页原理

MyBatis原生提供的分页功能是PageHelper,其分页原理是基于拦截器链实现的。当我们在Mapper接口方法上使用分页注解时,PageHelper会生成相应的拦截器,该拦截器会在执行SQL前进行拦截,将SQL改写成相应的分页SQL,最后执行并返回分页结果。 下面是一个使用PageHelper进行分页查询的示例:
// Mapper接口
public interface UserMapper {
    // 分页查询用户列表
    @Select("select * from user")
    List selectUserPage();
}

// 业务层使用
PageHelper.startPage(1, 10);
List
    userList = userMapper.selectUserPage();

   
  

四、MyBatis自动分页实现原理

MyBatis可以通过配置自动进行分页,其原理是基于反射和拦截器链实现的。当我们在Mapper接口方法上使用分页注解时,MyBatis会生成相应的拦截器,该拦截器会在执行SQL前进行拦截,将SQL改写成相应的分页SQL,最后执行并返回分页结果。 下面是一个使用MyBatis自动分页的示例:
// Mapper接口
public interface UserMapper {
    // 分页查询用户列表
    @Select("select * from user")
    List selectUserPage(RowBounds rowBounds);
}

// 业务层使用
RowBounds rowBounds = new RowBounds(0, 10);
List
    userList = userMapper.selectUserPage(rowBounds);

   
  

五、MyBatis分页查询

在使用MyBatis进行分页查询时,我们可以通过RowBounds、Limit、Page三种方式实现分页。其中,RowBounds方式是MyBatis默认的分页方式,Limit方式需要手动设置分页参数,Page方式是MyBatisPlus提供的分页方式。 1、RowBounds方式分页示例:
// Mapper接口
public interface UserMapper {
    // 分页查询用户列表
    @Select("select * from user")
    List selectUserPage(RowBounds rowBounds);
}

// 业务层使用
RowBounds rowBounds = new RowBounds(0, 10);
List
    userList = userMapper.selectUserPage(rowBounds);

   
  
2、Limit方式分页示例:
// Mapper接口
public interface UserMapper {
    // 分页查询用户列表
    @Select("select * from user limit #{offset}, #{size}")
    List selectUserPage(@Param("offset") int offset, @Param("size") int size);
}

// 业务层使用
int offset = 0;
int size = 10;
List
    userList = userMapper.selectUserPage(offset, size);

   
  
3、Page方式分页示例:
// Mapper接口
public interface UserMapper extends BaseMapper {
}

// 业务层使用
Page
    page = new Page<>(1, 10);
IPage
     userPage = userMapper.selectPage(page, null);
List
      userList = userPage.getRecords();

     
    
   
  

六、MyBatisPlus分页查询原理

MyBatisPlus提供了丰富的分页功能,其分页原理是基于拦截器实现的。当我们在Mapper接口的方法上使用分页注解时,MyBatisPlus会根据注解中的参数生成分页拦截器,该拦截器会在执行SQL前进行拦截,将SQL改写成相应的分页SQL,最后执行并返回分页结果。 下面是一个使用MyBatisPlus分页查询的示例:
// Mapper接口
public interface UserMapper extends BaseMapper {
}

// 业务层使用
Page
    page = new Page<>(1, 10);
IPage
     userPage = userMapper.selectPage(page, null);
List
      userList = userPage.getRecords();

     
    
   
  

七、MyBatis分页方式原理

MyBatis提供了三种分页方式,分别是RowBounds、Limit、Page。其中,RowBounds方式是MyBatis默认的分页方式,Limit方式需要手动设置分页参数,Page方式是MyBatisPlus提供的分页方式。不同分页方式的实现原理也不同。 1、RowBounds方式分页原理: RowBounds方式分页是MyBatis最基本的分页方式。在执行分页查询时,MyBatis会将RowBounds对象传递给Executor对象,Executor对象在查询时会将RowBounds对象作为参数传递给StatementHandler对象,最终将分页参数设置到PreparedStatement对象中。 2、Limit方式分页原理: Limit方式分页是通过手动设置分页参数实现的。在查询时,我们需要手动设置offset和limit两个参数,MyBatis会将这两个参数通过参数映射传递给Executor对象,Executor对象在查询时会将offset和limit参数作为参数传递给StatementHandler对象,最终将分页参数设置到PreparedStatement对象中。 3、Page方式分页原理: Page方式分页是MyBatisPlus提供的分页方式。当我们在Mapper接口的方法上使用分页注解时,MyBatisPlus会根据注解中的参数生成分页拦截器,在执行分页查询时会自动将分页参数设置到PreparedStatement对象中。