Mybatis Plus 自动分页
pom.xml
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>
1、首先要清楚你项目里使用的是MP版本是多少?3.40版本以前,还是3.40版本?
2、本文的项目采用的框架是Spring-boot + Mybatis Plus + MariaDB
3、MybatisPlusConfig.java配置代码
package com.xinsijie.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.autoconfigure.ConfigurationCustomizer;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.type.EnumOrdinalTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;
import java.util.TimeZone;
/**
* config
*
* @author xiaochun_tang
* @date 2020-10-02
*/
@Configuration
@EnableTransactionManagement
public class MybatisPlusConfig {
/**
* 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false
* 避免缓存出现问题(该属性会在旧插件移除后一同移除)
*/
//3.40 如果不注入SqlSessionFactory时,加入这两个bean
// @Bean
// public MybatisPlusInterceptor mybatisPlusInterceptor() {
// MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// PaginationInnerInterceptor innerInterceptor = new PaginationInnerInterceptor();
// innerInterceptor.setDbType(DbType.MARIADB);
// innerInterceptor.setOverflow(true);
// innerInterceptor.setMaxLimit(100000L);
// interceptor.addInnerInterceptor(innerInterceptor);
// return interceptor;
// }
//
// @Bean
// public ConfigurationCustomizer configurationCustomizer() {
// return configuration -> configuration.setUseDeprecatedExecutor(false);
// }
//====================end
//3.40使用SqlSessionFactory时
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
sqlSessionFactory.setDataSource(dataSource);
MybatisConfiguration configuration = new MybatisConfiguration();
configuration.setJdbcTypeForNull(JdbcType.NULL);
configuration.setMapUnderscoreToCamelCase(true);
configuration.setDefaultExecutorType(ExecutorType.REUSE);
configuration.setDefaultEnumTypeHandler(EnumOrdinalTypeHandler.class);
//3.40 分页必须设置以下这一行
configuration.setUseDeprecatedExecutor(false);
sqlSessionFactory.setConfiguration(configuration);
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
//不加可能会报非法绑定错误
sqlSessionFactory.setMapperLocations(resolver.getResources("classpath*:xml/factory/*Mapper.xml"));
//3.40 自动分页加入这一个插件
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
PaginationInnerInterceptor innerInterceptor = new PaginationInnerInterceptor();
innerInterceptor.setDbType(DbType.MARIADB);
innerInterceptor.setOverflow(true);
innerInterceptor.setMaxLimit(100000L);
interceptor.addInnerInterceptor(innerInterceptor);
sqlSessionFactory.setPlugins(interceptor);
return sqlSessionFactory.getObject();
}
/**
* 解决Date字段生成Json数据时,日期时区错误问题。
* @return
*/
@Bean
public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization() {
return jacksonObjectMapperBuilder ->
jacksonObjectMapperBuilder.timeZone(TimeZone.getTimeZone("GMT+8"));
}
// 3.40以下版本用这个
// @Bean
// public PaginationInterceptor paginationInterceptor() {
// PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
// paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
// return paginationInterceptor;
// }
}
4、以上代码重点:使用SqlSessionFactory时必须要将配置写入,否则不生效!!!!