再使用分页时,我们常常需要编写大量的代码进行封装,但使用mybatis-plus的分页功能是十分简单的,下面博主将为大家来介绍一下mybatis-plus的分页功能,十分简单。

首先为大家介绍spring篇,根据mybatis-plus的官网也可以知道如何使用

在使用分页功能时,首先要配置分页插件

Spring篇

<?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">

    <!--包的扫描-->
    <context:component-scan base-package="com.blb.wuliu"></context:component-scan>

    <!--配置数据源-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/jdbc01?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8"></property>
        <property name="username" value="root"></property>
        <property name="password" value="123456"></property>
    </bean>

    <!--配置会话工厂-->
<!--    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">-->
<!--        <!–设置数据源–>-->
<!--        <property name="dataSource" ref="dataSource"></property>-->
<!--        <!–配置类型别名包 映射文件中的类名可以省略包名–>-->
<!--        <property name="typeAliasesPackage" value="com.blb.mybatis.entity"></property>-->
<!--        <!–mybatis全局配置文件的位置–>-->
<!--        <property name="configLocation" value="classpath:mybatis-config.xml"></property>-->
<!--        <!–映射文件的位置–>-->
<!--        <property name="mapperLocations" value="classpath:mapper/*.xml"></property>-->
<!--    </bean>-->
    <bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <property name="typeAliasesPackage" value="com.blb.wuliu.entity"></property>
        <property name="configLocation" value="classpath:mybatis-config.xml"></property>
        <property name="mapperLocations" value="classpath:mapper/*.xml"></property>
        <property name="plugins">
            <array>
                <ref bean="mybatisPlusInterceptor"/>
            </array>
        </property>
        <property name="globalConfig" ref="globalConfig"></property>
    </bean>

    <bean id="mybatisPlusInterceptor" class="com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor">
        <property name="interceptors">
            <list>
                <ref bean="paginationInnerInterceptor"/>
            </list>
        </property>
    </bean>

    <bean id="paginationInnerInterceptor" class="com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor">
        <!-- 对于单一数据库类型来说,都建议配置该值,避免每次分页都去抓取数据库类型 -->
        <constructor-arg name="dbType" value="MYSQL"/>
    </bean>

    <bean id="globalConfig" class="com.baomidou.mybatisplus.core.config.GlobalConfig">
        <property name="dbConfig" ref="dbConfig"/> <!--  非必须  -->
    </bean>

    <bean id="dbConfig" class="com.baomidou.mybatisplus.core.config.GlobalConfig.DbConfig">
        <property name="logicDeleteField" value="flag"></property>
        <property name="logicDeleteValue" value="1"></property>
        <property name="logicNotDeleteValue" value="0"></property>
    </bean>
    <!--配置映射接口的扫描器-->
<!--    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--映射接口所在的包-->
        <property name="basePackage" value="com.blb.wuliu.mapper"></property>
        <!--会话工厂名字配置-->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
    </bean>
</beans>

这里直接给大家展示我的spring-mybatis的配置文件,方便大家使用,其中有些包名地方要改,分页插件的配置是paginationInnerInterceptor。

其原理其实是在使用sql语句的时候进行拦截,并在sql语句后面添加limit字段进行分页,不配置的话就没有用

@Mapper
public interface LogisticsMapper extends BaseMapper<Logistics> {
    List<Logistics> selectAll();
    IPage<Logistics> selectPage(IPage<?> page);
}

这里是mapper层 分页的功能要返回的是 IPage,其中有一个getRecords的方法是返回结果集

再来看看测试类

@Test
    public void testPageLog(){
        IPage<Logistics> iPage = logisticsMapper.selectPage(new Page<>(1, 2));
        System.out.println("总记录数 = " + iPage.getTotal());
        System.out.println("总页数 = " + iPage.getPages());
        System.out.println("当前页码 = " + iPage.getCurrent());
        List<Logistics> records = iPage.getRecords();
        records.forEach(System.out::println);
    }

可以看到这里运行的日志后面的sql语句被添加了limit字段

==> Preparing: select l.*,g.*,s.*, e.address_id e_address_id,e.address_city e_address_city,e.address_province e_address_province,e.address_region e_address_region from logistics l join goods g on l.good_id = g.good_id join address s on l.delivery_id = s.address_id join address e on l.arrival_id= e.address_id LIMIT ?




springboot整合mybatisplus分页后端封装条件对象_Powered by 金山文档


这样就算完成了一个简单的分页功能

SpringBoot篇

同样的,首先要进行分页的配置,与spring有些不同,springboot少了很多配置文件,直接用java代码来配置即可

@Configuration
@MapperScan(basePackages = "com.blb.marry.mapper")
public class MybatisPlusConfig {

    /**
     * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

这样就可以生效了

相应的,mapper层为:

@Mapper
public interface HotelMapper extends BaseMapper<Hotel> {
    IPage<Hotel> selectAll(IPage<Hotel> page);

可以看下测试类

@SpringBootTest
class MarryApplicationTests {
    @Autowired
    private HotelService hotelService;
    @Test
    void contextLoads() {
        Page<Hotel> page=new Page<>(1,2);
        IPage<Hotel> hotelIPage = hotelService.selectAll(page);
        long pages = hotelIPage.getPages();
        System.out.println(pages);
        List<Hotel> records = hotelIPage.getRecords();
        System.out.println(records);
    }


springboot整合mybatisplus分页后端封装条件对象_java_02


至此,mybatis-plus的分页篇就到此结束了,基于spring和springboot的实战项目最能让你体会到mybatis-plus的强大!