SpringBoot+MyBatisPlus整合读写分离

大家后,今天在用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的快捷方法也可以成功调用了。

猜你喜欢

转载自blog.csdn.net/ChenLong_0317/article/details/103161499