Spring和SpringBoot整合MybatisPlus配置分页查询

Posted 二木成林

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring和SpringBoot整合MybatisPlus配置分页查询相关的知识,希望对你有一定的参考价值。

官方文档地址: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

以上是关于Spring和SpringBoot整合MybatisPlus配置分页查询的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis与Spring整合

spring-springmvc-mybatis整合

Spring和SpringBoot整合RabbitMQ

Spring和SpringBoot整合RabbitMQ

spring boot整合activeMQ

Spring Boot系列SpringBoot配置全局事务处理