欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Springboot3同时集成mybatis和mybatis-plus?,由于某些缘故,必须在

来源: javaer 分享于  点击 48692 次 点评:72

Springboot3同时集成mybatis和mybatis-plus?,由于某些缘故,必须在


言归正传,这是是个伪命题,请看后文。

 

由于某些缘故,必须在原来只使用mybatis中的项目中,加入mybatis-plus,虽然我个人非常讨厌mybatis-plus。

好消息是,mybatis-plus大概可以看作是mybatis的超集,所以整合的时候,主要解决配置问题即可。

特别说明:本示例中,不存在真正的共存,其实主要用myatis-plus。 换句话,如果移除调mybatis也是可用的(当然需要费一番心思)

后人有遇到这个情况,建议直接移除mybatis即可,因为Mybatis-plus是超集,不用再模仿此处操作,除非有不得已的苦衷

 

以下内容主要参考:https://www.jb51.net/program/331926jhc.htm

和参考内容不同的是,我的项目中需要使用flowable等功能。

flowable自己倒是用的mybatis(据我所知,比较知名的开源较少用上mybatis-plus这种怪胎)。

以下是我的步骤(折腾一番后正确的)

springboot版本3.4.4

一、调整pom配置

修改两个pom文件,一个是所有模块共同依赖的,一个是单独使用flowable的。

公共pom

这个基本同参考的修改:

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <!--原Mybatis中需排除下面2个依赖-->
    <exclusions>
        <exclusion>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
        </exclusion>
    </exclusions>
</dependency>
        
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
    <version>${mybatis-plus.version}</version>
</dependency>
<!-- pagehelper 分页插件 -->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </exclusion>
    </exclusions>
</dependency>

修改后,和mybatis有关的配置大体如下图:

这意味着,没有特殊配置,mybatis的自动配置和mybatis-plus的自动配置都会生效。

 

使用flowable的

其它关键做了一点点的调整,在引入flowable的模块中,移除相关mybatis,转而用指定的mybatis

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>${mybatis.version}</version>			
</dependency>
<dependency>
    <groupId>org.flowable</groupId>
    <artifactId>flowable-spring-boot-starter-process</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
        </exclusion>
    </exclusions>
</dependency>

 

需要注意的是,为了表面mybaits冲突,引入的mybatis,mybatis-plus必须匹配。

上面之所以要移除关联的mybatis就是因为版本冲突导致的。

 

二、移除原来的mybatis配置文件

原来有一个mybatis的配置,主要是配置SqlSessionFactory。现在整个配置类注释(删除也可以)。

只保留mybatis自己的自动配置即可。

 

三、修改yml文件

mybatis-plus:
  #搜索指定包别名,第一个是原来mybatis,第二个是mybatis-plus的
  type-aliases-package: com.redot.hdp.**.mapper,com.redotxxx.flowable.**.plusmapper
  mapperLocations: classpath*:mapper/**/*Mapper.xml  
  configuration:
     map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下
     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

 

四、添加mybatis-plus配置

@AutoConfiguration(before = MybatisPlusAutoConfiguration.class) 
@MapperScan(value = {"com.redotxxx.flowable"}, annotationClass = Mapper.class) 
public class MybatisPlusAutoConfig {
    //此处略
}

plus只扫描plus模块下的。

 

而应用启动的地方不修改,依然只扫描标准mybatis的

@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class})
@MapperScan(value = {"com.redotxxx.**.mapper"})
@ComponentScan(value = {"com.redotxxx"} )
public class HdpApplication

注意:这是datasource是手动配置的,所以自动配置的时候移除了DataSourceAutoConfiguration。

 

五、测试

通过。

 

六、小结

我对于mybatis-plus并没有什么好感,所以一直没有怎么学习,现在也不想,因为只要是我主导的,不可能使用mybatis-plus。

如果plus有什么称道的,就是可以用于快速开发一些简单的,要求不高的项目,也并非一无是处,但是我的项目很少这么单纯的。

考虑的性能,有的时候,我都不用mybatis,而是直接用原生jdbc,或者spring-jdbc。

本次,颇为折腾了一些时间,终于可用了。

 

通过这个整合,大概可以得出几个结论:

1、mybatis和mybatis-plus可以共存,通常限于特定情形,例如一方作为另外一方的组件。

2、注解org.mybatis.spring.annotation.MapperScan可以用于一个项目的多个地方,我的例子中就是,分别用于扫描用于mybatis和mybatis-plus的配置

    MapperScan想用几个,用多出都可以!

3、当系统移除mybatis有关配置后(包括MybatisProperties类或者yaml中的mybatis属性),那么mybatis的自动配置是不会执行的。也就是说,我的这个例子中

      其实用的就是mybatis-plus

4、spring的自动配置机制还是有些灵活的

@org.springframework.context.annotation.Configuration(proxyBeanMethods = false)
@ConditionalOnClass({ SqlSessionFactory.class, SqlSessionFactoryBean.class })
@ConditionalOnSingleCandidate(DataSource.class)
@EnableConfigurationProperties(MybatisProperties.class)
@AutoConfigureAfter({ DataSourceAutoConfiguration.class, MybatisLanguageDriverAutoConfiguration.class })
public class MybatisAutoConfiguration implements InitializingBean

由于删除了yml中mybatis片段,所以mybatis的自动配置并不会发生,只剩下plus的。在我的项目中保留着mybatis-plus的配置,所以只有plus生效。  

 

如果真想配置两套(什么sessionFactory之类的),那么麻烦很多,有可能不能成功,或者成功了也有许多问题,没有深究过!暂略,不讨论 

本文来自博客园,作者:正在战斗中,转载请注明原文链接:https://www.cnblogs.com/lzfhope/p/18879994

相关栏目:

用户点评