MyBatis-Plus【踩坑记录01】
不要使用Mybatis原生的SqlSessionFactory,而应使用MybatisSqlSessionFactory。
原因
依赖关系如下

因此会在使用Mybaits-Plus时默认的时Mybatis原生的SqlSessionFactory因为
MybatisPlus中自定义了MybatisSqlSessionFactoryBean这个类,而这个类是实现了FactoryBean<SqlSessionFactory>,InitializingBean,ApplicationListener<ApplicationEvent>这些接口,而在Mybatis中有一个SqlSessionFactoryBean类也实现了这些接口,所以在MybatisPlus的配置文件中配置SqlSessionFactoryBean时需要换成MybatisPlus中自定义的这个类MyBatisSqlSessionFactoryBean,否则使用原生的SqlSessionFactoryBean会产生很多问题,这也是官方文档出现-invalid-bound-statement-not-found-异常中的最后第4点特别说明并推荐的
解决方案
相应的配置类如下
package zeyfra.com.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import zeyfra.com.aspect.mybatis_plus.MyMetaObjectHandler;
import javax.sql.DataSource;
/**
* MyBatis-Plus配置类
* @author ZeyFra
* @date 2021/2/16 13:27
*/
@Configuration
@EnableTransactionManagement
@MapperScan("zeyfra.com.modules.**.mapper")
public class MybatisPlusConfig {
@Bean("sqlSessionFactory")
@Primary
public SqlSessionFactory sqlSessionFactory(@Autowired @Qualifier("dataSource") DataSource dataSource) throws Exception {
// 未使用MyBatis-Plus的分页插件的小伙伴可忽略此部分
// MybatisPlus内部拦截器
// 为自动分页插件设置DB类型
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
// 可添加自定义拦截器,没有自定义拦截器的小伙伴可忽略此部分
// MybatisConfiguration
MybatisConfiguration mybatisConfiguration = new MybatisConfiguration();
mybatisConfiguration.addInterceptor(mybatisPlusInterceptor);
// 开启缓存,可自行选择
mybatisConfiguration.setCacheEnabled(true);
// 使用MybatisSqlSessionFactoryBean
MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
// 设置数据源
sqlSessionFactoryBean.setDataSource(dataSource);
// 添加MybatisConfiguration
sqlSessionFactoryBean.setConfiguration(mybatisConfiguration);
// 设置mapper相应的xml路径
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources("classpath:zeyfra/com/modules/**/*.xml"));
// 返回MybatisSqlSessionFactoryBean从而替代原生的sqlSessionFactory
return sqlSessionFactoryBean.getObject();
}
}
注意:
1、使用MybatisSqlSessionFactory之后配置应重新在此注入相应的拦截器
2、在3.4.0过后已弃用PaginationInterceptor,应使用MybatisPlusInterceptor添加自动分页插件PaginationInnerInterceptor
3、应在自动分页插件设置DB类型,否则容易出现分页查询后total为0的问题
4、pageHelper依赖会与自动分页插件产生冲突,也会出现分页查询后total为0的问题
MyBatis-Plus【踩坑记录01】的更多相关文章
- CentOS7.4安装MySQL踩坑记录
CentOS7.4安装MySQL踩坑记录 time: 2018.3.19 CentOS7.4安装MySQL时网上的文档虽然多但是不靠谱的也多, 可能因为版本与时间的问题, 所以记录下自己踩坑的过程, ...
- SUCTF 2019 Upload labs 2 踩坑记录
SUCTF 2019 Upload labs 2 踩坑记录 题目地址 : https://github.com/team-su/SUCTF-2019/tree/master/Web/Upload La ...
- unionId突然不能获取的踩坑记录
昨天(2016-2-2日),突然发现系统的一个微信接口使用不了了.后来经查发现,是在网页授权获取用户基本信息的时候,unionid获取失败导致的. 在网页授权获取用户基本信息的介绍中(http://m ...
- ubuntu 下安装docker 踩坑记录
ubuntu 下安装docker 踩坑记录 # Setp : 移除旧版本Docker sudo apt-get remove docker docker-engine docker.io # Step ...
- SpringBoot + Shiro + shiro.ini 的踩坑记录
0.写在前面的话 好久没写博客了,诶,好多时候偷懒直接就抓网上的资料丢笔记里了,也就没有自己提炼,偷懒偷懒.然后最近参加了一个网络课程,要交作业的那种,为了能方便看下其他同学的作业,就写了个爬虫把作业 ...
- 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密
你真的了解字典(Dictionary)吗? 从一道亲身经历的面试题说起 半年前,我参加我现在所在公司的面试,面试官给了一道题,说有一个Y形的链表,知道起始节点,找出交叉节点.为了便于描述,我把上面 ...
- google nmt 实验踩坑记录
最近因为要做一个title压缩的任务,所以调研了一些text summary的方法. text summary 一般分为抽取式和生成式两种.前者一般是从原始的文本中抽取出重要的word o ...
- ABP框架踩坑记录
ABP框架踩坑记录 ASP.NET Boilerplate是一个专用于现代Web应用程序的通用应用程序框架. 它使用了你已经熟悉的工具,并根据它们实现最佳实践. 文章目录 使用MySQL 配置User ...
- SpringBoot+SpringSecurity+Thymeleaf认证失败返回错误信息踩坑记录
Spring boot +Spring Security + Thymeleaf认证失败返回错误信息踩坑记录 步入8102年,现在企业开发追求快速,Springboot以多种优秀特性引领潮流,在众多使 ...
随机推荐
- 最新 Steam 免费游戏
最新 Steam 免费游戏 免费 免费游戏 免费开玩 免费游戏玩的游戏是有内购的. 免费开玩游戏开玩是一部分免费,玩到某个地方要购买才能继续玩. 免费就是永久免费并且无内购. refs https:/ ...
- Beacon API All In One
Beacon API All In One Beacon API https://developer.mozilla.org/en-US/docs/Web/API/Beacon_API https:/ ...
- code to markdown auto converter
code to markdown auto converter code => markdown how to import a js file to a markdown file? // a ...
- Flutter 在同一页面显示List和Grid
import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends State ...
- NGK DeFi Baccarat或将推动BGV成为下一个千倍币!
目前,已经接近2020年年末,但是DeFi的热潮还在持续.近日,DeFi市场传出一道重磅利好消息,便是NGK DeFi去中心化交易系统Baccarat即将上线.届时,将会引起整个区块链市场的又一次震动 ...
- 「NGK每日快讯」12.11日NGK公链第38期官方快讯!
- 谈谈 JS 垃圾回收机制
谈谈 JS 垃圾回收机制 JS内存泄漏与垃圾回收机制 https://javascript.info/garbage-collection
- MFC多文档程序启动无子窗口的实现
刚学MFC的我们,肯定会从一个基本MFC程序开始. 而VC++6.0的MFC基础类提供了三种创建方式:单文档.多文档.对话框. 当我们创建多文档应用程序的时候,会自动启动一个子窗口. 在我们平时使用软 ...
- 死磕Spring之IoC篇 - BeanDefinition 的解析过程(面向注解)
该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ...
- python爬虫模拟登录验证码解决方案
[前言]几天研究验证码解决方案有三种吧.第一.手工输入,即保存图片后然后我们手工输入:第二.使用cookie,必须输入密码一次,获取cookie:第三.图像处理+深度学习方案,研究生也做相关课题,就用 ...