再使用分页时,我们常常需要编写大量的代码进行封装,但使用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篇
同样的,首先要进行分页的配置,与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);
}
至此,mybatis-plus的分页篇就到此结束了,基于spring和springboot的实战项目最能让你体会到mybatis-plus的强大!