关于mybatis plus中手写sql查询enum

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于mybatis plus中手写sql查询enum相关的知识,希望对你有一定的参考价值。

参考技术A 首先,我系统里之前是mybatis,现在用mp,就得解决冲突问题。mp本身有个mybatis,要把之前的pageHelper中的mybatis exclude出去:

然后看mp官网配置,其他都一样,只不过这里有个细节:这个必须加上才能在xml手写的时候查询enum的类型,比如状态

例如:

解决SpringBoot整合Mybatis和Mybatis-Plus不能公用(版本兼容性问题)

1 前言

虽然Mybatis-Plus很好使,可以帮助我们生成CRUD的接口,但是有的情况下我们需要联合其他表进行多表查询,这时候Mybatis可以手写SQL的优势就体现出来了,一般在开发中,很多项目都是Mybatis和Mybatis-Plus公用的,但是公用也有有版本不兼容的问题

2 发现问题

今天打算使用SpringBoot整合Mybatis和Mybatis-Plus,但是发现不能共同

具体体现为:我手写了一个mapper.xml文件,然后使用接口去调用里面的sql,但是报了一个很经典的问题:

Invalid bound statement (not found): com.wyh.mapper.IUserMapper.queryAllUser


这个问题很常见。我相信不少后端开发都遇到过,意思是识别不了对应的mapper.xml

常见的发生场景可以参考我这篇文章:解决Mybatis报错并分析原因:Invalid bound statement (not found): com.xxx.mapper.xxx

3 分析问题

经过我一行行代码的调试,我敢肯定这个问题的原因不符合上述的任意一种情况

真的是一行行代码删除测试,一个类一个类的改动去测试,这是我的一个实体,去掉相关MP的代码

最终我定位到:是因为Mybatis和Mybatis-Plus不能公用,我认为是版本不兼容的问题

4 解决问题

如何证明是版本不兼容呢?

这是我报错的时候的依赖版本

会报错:

mybatis的版本我没有改动,只是将mybatis-plus的版本从3.1.1提升到了3.3.0

修改完版本后再次运行解决问题

这时候再把相关Mybatis-Plus的代码还原,哪怕同时编写Mybatis的sql和Mybatis-Plus自带的API都是可以的,没有任何问题

接口和方法名称写的比较糙。。。只是为了方便测试

5 Mybatis和Mybatis-Plus的相关依赖:

 		<!--  mybatis依赖    -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.3</version>
        </dependency>
        <!--  mybatis-plus支持 -->
        <!--  如果想要同时使用mybatis,务必提高mybatis-plus的版本!!!      -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.0</version>
        </dependency

6 总结

目前我想到解决这个问题的版本就是提高Mybatis-Plus的版本去支持Mybatis,如果大家有别的办法欢迎评论!

最后不得不感叹:这种问题真的好难发现啊!!!

以上是关于关于mybatis plus中手写sql查询enum的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis-Plus联表查询的短板,终于有一款工具补齐了

你还在手写 join 联表查询?MyBatis-Plus 这样写太香了!

MyBatis-Plus联表查询的短板,终于有一款工具补齐了

MyBatis-Plus联表查询的短板,终于有一款工具补齐了

springboot项目里,让tk-mybatis支持可以手写sql的mapper.xml文件

解决SpringBoot整合Mybatis和Mybatis-Plus不能公用(版本兼容性问题)