大家后,今天在用MybatisPlus(一下简称MP)的时候报了一个错误,一直是找不到mapper层中的快捷方法,比如insert,delete等。
找了好几个小时都没找到,各个配置文件都没问题,但是就是找不到mapper层的封装方法,最后才知道是因为配置了读写分离,用的sql工厂部署mybatisplus的。
然后就想要记录一下这个错误,顺便和大家分享一下。
首先看一下配置文件:yml
文件目录都对着。
然后就是读写分离那一块。
package com.huayi.dataConfig;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.annotation.Resource;
import javax.sql.DataSource;
@EnableTransactionManagement
@Configuration
@MapperScan(basePackages = {"com.huayi.mapper"})
public class MyBatisConfig {
@Resource(name = "myRoutingDataSource")
private DataSource myRoutingDataSource;
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(myRoutingDataSource);
sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mybatis/mapper/*.xml"));
return sqlSessionFactoryBean.getObject();
}
@Bean
public PlatformTransactionManager platformTransactionManager() {
return new DataSourceTransactionManager(myRoutingDataSource);
}
}
然后启动项目调用MP的快捷方法会报错,找不到该方法。
因为以前的项目都没有配置读写分离,这个项目我的MP的配置绝对没有错误,就联想到是因为读写分离配置sql工厂那一块的问题,然后百度了一下,果然,嘿嘿嘿,被我找到了。
用MybatisSqlSessionFactoryBean()解决扫包的时候无法扫描mybatis-plus的mapper的问题。
如果要用MP的话sql链接工厂也要用Mybatis提供的,baomidou很强大,这些都用,哈哈哈,然后改了一下配置。
package com.huayi.dataConfig;
import com.baomidou.mybatisplus.MybatisConfiguration;
import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.annotation.Resource;
import javax.sql.DataSource;
@EnableTransactionManagement
@Configuration
@MapperScan(basePackages = {"com.huayi.mapper"})
public class MyBatisConfig {
@Resource(name = "myRoutingDataSource")
private DataSource myRoutingDataSource;
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
MybatisConfiguration mybatisConfiguration = new MybatisConfiguration();
mybatisConfiguration.addInterceptor(new PaginationInterceptor());
bean.setConfiguration(mybatisConfiguration);
bean.setDataSource(myRoutingDataSource);
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mybatis/mapper/*Mapper.xml"));
return bean.getObject();
}
@Bean
public PlatformTransactionManager platformTransactionManager() {
return new DataSourceTransactionManager(myRoutingDataSource);
}
}
当我以为改好并且准备启动项目时候,直接报错了。找不到sql工厂。
后来发现是因为MP版本的问题。
mybatisPlus和spring整合的包和MP的版本好像不太契合,后来换来一个版本。
下面是MAVNE和gradle的jar。
MAVEN
<!-- boot mybatisplus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatisplus-spring-boot-starter</artifactId>
<version>1.0.5</version>
</dependency>
<!--MP-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>2.0.7</version>
</dependency>
Gradle
我也是这几天刚开始学习用Gradle,还没有应用到公司的项目中,今天在帮同事找问题的时候(他用的maven),很明显感觉出来Gradle的简洁,jar清晰明了。
Maven的pom当jar比较多的时候代码会比较多。没有Gradle阅读性能强。
// mybatis plus
compile "com.baomidou:mybatisplus-spring-boot-starter:1.0.5"
// https://mvnrepository.com/artifact/com.baomidou/mybatis-plus
compile group: 'com.baomidou', name: 'mybatis-plus', version: '2.0.7'
更换完Jar以后,项目成功启动,MP的快捷方法也可以成功调用了。