官方文档地址:https://mybatis.plus/guide/page.html
分页查询使用selectPage()方法即可,但整合使用需要一些配置。
SpringBoot整合MybatisPlus实现分页查询
注意,springboot导入的mybatis-plus版本
<!--mybatis-plus的springboot支持-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
接着创建一个配置类,里面配置着分页拦截器
@Configuration
@MapperScan("com.demo.mapper")
public class CustomMyBatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(paginationInnerInterceptor());
return interceptor;
}
@Bean
public PaginationInnerInterceptor paginationInnerInterceptor() {
PaginationInnerInterceptor page = new PaginationInnerInterceptor();
page.setDbType(DbType.MYSQL);
return page;
}
}
创建一个Mapper接口继承BaseMapper<T>
public interface UserMapper extends BaseMapper<User> {
// 不需要写什么方法
}
写一个测试,执行就可以使用了
分页查询就是使用selectPage()方法,有两个参数:第一个参数指定分页信息,第二个参数指定查询条件。
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestMybatisPlus {
// 注入UserMapper
@Autowired
private UserMapper userMapper;
@Test
public void testFindAll() {
Page<User> page = new Page<>(1, 2);
IPage<User> userIPage = userMapper.selectPage(page, null);
System.out.println(userIPage);
for (User user : userIPage.getRecords()) {
System.out.println(user);
}
}
}
打印结果如下:
Spring整合MybatisPlus实现分页查询
注意导入的包坐标:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.4.1</version>
</dependency>
创建Mapper接口继承BaseMapper<T>
public interface UserMapper extends BaseMapper<User> {
// 不用写方法
}
接着在spring的核心配置文件applicationContext.xml中进行配置如下内容:
<!--这里使用MybatisSqlSessionFactory,完成Spring与Mybatis-Plus的整合-->
<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- spring xml 方式 -->
<property name="plugins">
<array>
<bean class="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor">
<!-- COUNT SQL 解析.可以没有 -->
<property name="countSqlParser" ref="countSqlParser"/>
</bean>
</array>
</property>
</bean>
<bean id="countSqlParser" class="com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize">
<!-- 设置为 true 可以优化部分 left join 的sql -->
<property name="optimizeJoin" value="true"/>
</bean>
本例中完整的applicationContext.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<!--引入properties配置文件-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!--定义数据源-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!--这里使用MybatisSqlSessionFactory,完成Spring与Mybatis-Plus的整合-->
<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- spring xml 方式 -->
<property name="plugins">
<array>
<bean class="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor">
<!-- COUNT SQL 解析.可以没有 -->
<property name="countSqlParser" ref="countSqlParser"/>
</bean>
</array>
</property>
</bean>
<bean id="countSqlParser" class="com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize">
<!-- 设置为 true 可以优化部分 left join 的sql -->
<property name="optimizeJoin" value="true"/>
</bean>
<!--扫描Mapper接口类,使用的是Mybatis原生的扫描器-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.demo.mapper"/>
</bean>
</beans>
接着是进行测试
@Test
public void testSelectPage() {
ApplicationContext app = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
UserMapper userMapper = (UserMapper) app.getBean("userMapper");
// 设定分页参数,第一个参数是页码(从1开始),第二个参数是页显示条数
Page<User> page = new Page<User>(1L, 2L);
// 设定筛选条件
QueryWrapper<User> wrapper = new QueryWrapper<User>();
wrapper.gt("age", 15);// 查询年龄大于15岁的人
// 根据条件查询记录
IPage<User> userPage = userMapper.selectPage(page, null);
System.out.println("数据总条数:" + userPage.getTotal());
System.out.println("总页数:" + userPage.getPages());
// 打印分页记录
List<User> userList = userPage.getRecords();// 获取分页记录数
for (User user : userList) {
System.out.println(user);
}
}
打印结果如下:
本节源码地址:GitHub的Demo