SpringBoot配置数据源及MyBatis分页的要点
背景SpringBoot 整合 MyBatisPlus 分页时 , 如果分页插件配置不正确 , 容易出现分页无效的问题 , 这种情况常见于自定义数据源的情况 。
MyBatis 的分页有两种 , 一种是用 MyBatisPlus 的分页 , 另一种是使用 PageHelper 分页插件 。 无论哪一种 , 都需要为数据源设置分页插件配置 。
如果使用 SpringBoot 自带的数据源 , 则不需要手动设置分页插件 , 只需要提供分页插件配置类即可;如果是自定义的数据源 , 则必须为其配置分页插件 。
分页插件配置首先 , 为项目添加一项分页插件配置类 MyBatisPlusConfig , 代码很简单:
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;import org.mybatis.spring.annotation.MapperScan;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class MybatisPlusConfig {@Beanpublic PaginationInterceptor paginationInterceptor(){return new PaginationInterceptor();}}
使用 SpringBoot 默认的数据源这种方式 , 直接在 application.yml 中添加 spring.dataSource 配置即可:
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/db?allowMultiQueries=true --tt-darkmode-color: #999999;">注意 , 数据库连接地址的 key 为 url, MyBatisPlus 的分页插件能自动生效 。
使用自定义数据源自定义数据源时 , 需要编写数据源类, 通过 @ConfigurationProperties 注解指定数据源配置信息 , 此时需要单独为数据源设置 MyBatisPlus 分页插件 , 否则分页查询将会无效 。
@Configurationpublic class MysqlDataSourceConfig {@Autowiredprivate PaginationInterceptor paginationInterceptor; @Primary @Bean(name = "mysqlDataSource")@ConfigurationProperties(prefix = "spring.datasource")public DataSource dataSource() {return DataSourceBuilder.create().build();}@Primary@Bean(name = "mysqlSqlSessionFactory")public SqlSessionFactory sqlSessionFactory(@Qualifier("mysqlDataSource") DataSource dataSource) throws Exception {final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();sessionFactory.setDataSource(dataSource);//mybatis plus 配置MybatisConfiguration configuration = new MybatisConfiguration();configuration.setJdbcTypeForNull(JdbcType.NULL);configuration.setMapUnderscoreToCamelCase(true);configuration.setCacheEnabled(false);sessionFactory.setConfiguration(configuration);// 设置 MyBatis 分页插件 , 否则分页查询将不会生效sessionFactory.setPlugins(paginationInterceptor);return sessionFactory.getObject();}}
需要注意的是:数据源的配置信息 , 不能与默认的 datasource 一致 , 否则会报异常:
ERROR [com.zaxxer.hikari.HikariConfig] - HikariPool-1 - jdbcUrl is required with driverClassName.
异常说明数据库连接地址信息缺少 jdbc-url, 将 url 改为 jdbc-url, 正确启动 。
要点是数据源的分页插件和 key:
启示录疑问:理论上使用 SpringBoot 默认数据源和自定义数据源 , 配置信息应该一样才对 , 也都到一些文章的 demo 中二者的配置信息是一样的 。
那么 , 是什么原因导致两种配置的 key 有差异的呢?猜测可能是 SpringBoot 版本问题 。
最终找到了答案:DataSourceBuilder 创建数据源时 , SpringBoot2.0 中用的是key 是 jdbc-url, 而 1.5 版本用的是 url。 所以稳妥的办法是 , 同时配置这两种信息:
推荐阅读
- 目前配置全性价比高的手机,我只推荐五款,闭着眼买都不会错
- Git服务器配置错误导致日产汽车源码在网上泄露
- 荣耀V40正式得到确认!参数配置也基本确定!售价或将是惊喜
- 三星竟为Galaxy S21系列提供900多种颜色配置
- 红米k40pro和荣耀30区别哪个好 不同点对比参数配置谁好
- 2021年换手机哪个配置最重要,CPU只能排第三位
- 玩转光追大作最低需要什么配置?快来看小狮子的推荐
- 小米11和红米k30pro哪个好性价比高 参数配置对比区别
- 华为nova8与小米10对比哪个好 参数配置区别性能评测
- 三星Galaxy M02s将于1月7日发布!硬件配置很平常