搭建spring boot+mybatis(plus)踩坑记录(三):动态表名设置不生效

这两天由于工作上需要,和同事一起搞一个项目,项目很简单,只对一张表维护,数据来源于硬件设备,通过Socket传输。我主要负责设计和项目搭建,之前也搭过,是mybatis的,mybatis-plus的项目是用别人搭好的,自己没实践过,现在必须得弄了。两天的搭建过程中主要遇到三个问题,有一些新的思考,做个记录, 方便后面回顾学习,也希望能帮到同为工程师的我们。这是第三篇。

前面说到我这边是动态表名,年表,表名带有年份后缀,现在是2021年,就是_2021,此时又遇到头疼的问题,如果用baseMapper自带的方法,表名无法动态,如果在自己Mapper写sql,那还好,表名可以用${}传过去,可以处理。那怎么办,还是得弄!!!看到一个篇官方的说明,说mybatis-plus 3.4.0有对动态表名的支持,设置也很简单。其中也看了下别人的方式,最后觉得还是这个篇官方的简介实操性最高:

MyBatis Plus 提供的 DynamicTableNameInnerInterceptor 插件就是用来解决动态表名。同时,还提供了 TableNameHandler 接口,该接口有一个 dynamicTableName() 方法,该方法返回新的表名称。

那就试下:

跑起来后,诶,不行啊:

那是为什么,别人也验证过,可以用,那不可能是不支持,那肯定是我的问题,但是我不知道问题出在哪,服务启动时跟了下断点,MybatisPlusConfig的mybatisPlusInterceptor的方法是走完了,看了下MybatisPlusInterceptor继承自Interceptor,再理解了下代码,定义一个名称和处理映射map,dynamicTableNameInnerInterceptor设置这个map,MybatisPlusInterceptor再添加这个interceptor,看着很对啊,示例也是那么写的!那为什么没效果?后面都跟到源码去了,发现得出的语句的表名后缀确实是没带上去,也就是没进到拦截器这里,走查询时也是没进这里的断点:

后来经过一番折腾,没解决。有点难受,再过了一会,想到,示例中的 log表,然后代码那里也是log表:

这好像是,应该是说精确匹配吧,我那里写的是表名的一部分,我以为可以模糊匹配表名,改成表名全名试下:

尼玛,可以了。那一刻我真是又喜又恨:

所以,你以为的有时不是不一定对噢。

找到问题:全名匹配。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值