问题描述:多表查询出现字段重名的情况,在使用懒加载的模式,测试类中直接调用其中的一个字段,显示为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"