mybatis多表连查存在字段重名,造成数据异常

问题描述:多表查询出现字段重名的情况,在使用懒加载的模式,测试类中直接调用其中的一个字段,显示为null。

Mybatis中做多表联查的时候,不管是一对一、一对多、一对多对多:多对多:都不能有字段重名的情况:不管是主键还是普通字段。一旦字段重名的话,就会造成数据少自动赋值,或者覆盖,甚至重复赋值!

解决方法:
1.尽量不要表间重名,mybatis里处理起来很麻烦!id和普通字段都是。但是在表多的时候,很难不会出现字段重名的情况。主键id最容易重名!

2.在mybatis中写原生SQL进行查询的时候,查的字段尽可能的少,这也影响速率,强烈禁止使用*,用多少查多少!这样也能及时发现字段重名的情况!

3.最后如果真的需要查出重名的字段,并且修改数据库字段名造成的更改过大,这里推荐的方式是给字段取别名,在写resultMap映射的时候,其中的column属性就填写SQL语句中查出字段取的别名,这样就能解决重复问题了!

4.出现相同字段情况,可以根据情况在resultMap映射的时候手动配置一些属性。

修改的过程:

数据库中的表:

gtype表:
在这里插入图片描述
goods表:
在这里插入图片描述
两个表使用联合查询的时候:

GTypeMapper.xml:

<select id="selectById2" resultMap="gTypeResultMap">
          SELECT
            gtype.typeid,
            gtype.typename,
            goods.gid,
            goods.gname,
            goods.gprice,
            goods.gdecs,
            goods.typeid
        FROM
            goods
        INNER JOIN gtype ON goods.typeid = gtype.typeid
        WHERE
            gtype.typeid=#{typeid}
    </select>

    <resultMap id="gTypeResultMap" type="com.gx.model.GType" 
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值