mybatis-plus和pageHelper依赖的jar包冲突,导致线上所有的ew.customSqlSegment变量转义不过来,导致查询失败.

后端使用mybatis-plus实现数据的查询,本地能正常的执行,但是部署到项目会报异常Caused by: org.apache.ibatis.builder.BuilderException: Error evaluating expression ‘ew.customSqlSegment’. Cause: org.apache.ibatis.ognl.OgnlException: customSqlSegment [com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: This is impossible to happen]

先说解决的办法:将mybatis-plus升级到最新版本:

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <!-- <version>3.2.0</version>-->
            <version>3.4.2</version>
        </dependency>

​ 如果没能解决你的问题,你也可以继续读一读,可以参考我的解决思路.

问题描述:使用mybatis-plus查询数据,本地正常运行,部署到项目的时候,会报以上异常,所有类似以下的地方都报错:

@Select("SELECT count(src_ip) as attackSourceNum,src_ip as ip,src_nation as srcNation FROM protect_event ${ew.customSqlSegment} order by attackSourceNum desc")
List<VideoAttackSourceResponseVO> selectVideoAttackSource(@Param(Constants.WRAPPER) QueryWrapper<ProtectEvent> queryWrapper);

​ 报错原因 ${ew.customSqlSegment}转义不过来.经过远程debug(自行百度,我也不怎么会),发现走到该方法的时候,进入的其它版本的mybatis-spring-boot-start,所以怀疑是jar包冲突(其实一开始就应该先看看是不是jar包冲突的),经过maven-helper插件分析(也可以用mvn tree 相关的命令),引起冲突的是pageHelper.一共有mybatis和mybatis-spring两处冲突:

依赖冲突1
依赖冲突2
因为是想让mybatis-plus生效,所以就想把pageHelper中的冲突的依赖去掉,但是当我们把mybatis-spring-boot-starter去除依赖后,项目启动就会报错.所以只好手动的(而非用maven-helper插件)在pageHelper中直接去掉mybatis和mybatis-spring的依赖,为了保险起见,还将mybatis-plus升级到最新的版本.经过这样的处理,打包到线上,发现数据都查询了出来,问题完美的解决,后来又验证了一下,发现将mybatis-plus升级到最新的版本,而不用管pageHelper的依赖,mybatis-spring的冲突没有了,但是mybatis的冲突还是在,但即使这样还是能查询出来数据.所以怀疑这个异常的问题是mybatis-spring的jar包冲突所致.

​ 以上就是我的解决问题的过程,其实还可以在pom.xml中直接声明mybatis和mybatis-spring的版本,maven采用的声明优先原则,所以会走你自己声明的配置.另外如果依赖路径一样长,谁在pom.xml上先声明(即谁在上面),谁依赖的版本有效,有时候可以试试将自己想要生效的jar包往上移动一下.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值