为了账号安全,请及时绑定邮箱和手机立即绑定

多表联查时数据库有重复字段名时打印为null

老师,我数据库user表有个name,car表也有个name,联查的泛型是UserCarVO实体类,类里一个属性是name,一个是carName,

在UserMapper extends BaseMapper<User>接口中的

查询语句是@Select("select u.*,c.name from user u inner join car c on c.owner_id = u.my_id ${ew.customSqlSegment}")。

IPage<UserCarVO> selectUserPage(Page<UserCarVO> page, @Param(Constants.WRAPPER) Wrapper<UserCarVO> wrapper);

为了最后让实体的carName对应c.name,我在carName上注解@TableField("c.name"),但是最后只能打印出用户的name,而carName为null,(我把数据库Car表字段改为car_name的话,就能打印出),请问怎样让注解生效?求老师解答,纠结好多个小时了,查论坛查百度的例子都没有重复字段。。。

正在回答

1 回答

同学,这个有解决办法,你给c.name在sql中设置别名就可以了,这样写elect u.*,c.name car_name from user u inner join car c on c.owner_id = u.my_id ${ew.customSqlSegment}。正常的话,就会把值存到你的VO中。

2 回复 有任何疑惑可以回复我~
#1

扶阿斗的人 提问者

太棒了老师,一下子就成功了!老师,我就是好奇,想再问一下,我之前也在SQL语句中设置了字段别名 c.name cname,然后VO对应属性carName上也注解了@TableField("cname"),但就是没有效果,是什么原因呢?难道仅当真正的数据库表对应的实体类上有@TableName的时候@TableField才起作用吗?
2019-08-29 回复 有任何疑惑可以回复我~
#2

老猿 回复 扶阿斗的人 提问者

能解决你的问题就好,你说的这种情况如果不行的话,我感觉是@TableField要写在表对应的实体类的属性上才会生效,MP的源代码,我也没太研究过,对底层原理不是太了解,等以后我研究源码时,研究明白了这个问题,再答复你。
2019-08-29 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

多表联查时数据库有重复字段名时打印为null

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信