对Mybatis|对Mybatis Plus中@TableField的使用正解
目录
- @TableField的使用
- 1研究背景和过程
- 2总结
- 2.1别名效果value属性
- 2.2防止字段持久化exist属性
- @TableField的作用
- @TableField(exist=false)
@TableField的使用
1 研究背景和过程
妹纸开发突然发现@TableField失效了,在群里发问。一了解,发现妹纸本意是想用@TabkeField达到类似@JsonProperty的功能。也就是当实体类属性名与数据库列名不一致时,通过此注解实现别名效果。
奇怪的是,这注解一部分成功,一部分失效。具体表现就是有时候可以取到值,有时候又取不到。我点进改注解源码,发现它给value设定的本意是:当驼峰转化未开启时,使用此注解实现驼峰转化。然而,我实际测试表明它其实没这功能。
我信誓旦旦跟妹纸讲,@TableField没有别名的功能。谁知妹纸给我发了一张自动打印sql的截图。里面清清楚楚的显示,MP确实自动生成了AS别名。灵光一闪,是否是Mybatis Plus自动生成的可以别名,而自己写的sql就不行?
不验不知道,一验吓一跳。果然如此,手写的sql都不能自动生成别名,而自动生成的sql查询语句都成功转化了。至此,@TableField注解告一段落。
2 总结
2.1 别名效果 value属性 使用MP自动生成的方法时,可以用@TableField起别名
在xml写sql时,需要用as或者resultMap来转化
2.2 防止字段持久化 exist属性 使用exist属性可以控制类中属性在表中是都一定对应,如果有不存在于数据表的字段,建议都设成fasle
@TableField的作用
@TableField(exist = false)
【对Mybatis|对Mybatis Plus中@TableField的使用正解】注解加载bean属性上,表示当前属性不是数据库的字段,但在项目中必须使用,这样在使用bean的时候,mybatis-plus就会忽略这个,不会报错
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
推荐阅读
- mybatis|mybatis plus框架的@TableField注解不生效问题总结
- PROG10082 面向对象
- 高并发底层原理|高并发之伪共享和缓存行填充(缓存行对齐)(@Contended)
- SpreadJS|SpreadJS + GcExcel 一出,谁与争锋!全栈表格技术轻松应对复杂公式计算场景(一)
- 前端|vant的picker组件,传值为对象数组,colunmsFieldNames属性
- 合作伙伴|对比解读《2020年CNCF中国云原生调查报告》
- Spring复杂对象创建的方式小结
- idea使用Mybatis逆向工程插件详情
- mybatis中映射文件include标签的应用
- 《利用Python 进行数据分析》第十章(时间序列)