解决字段名重复导致的问题,简单直接的方法是设置别名,例如
<id column="id" jdbcType="BIGINT" property="id"/>
<result column="name" jdbcType="VARCHAR" property="name"/>
<association property="post" column="postCode" javaType="com.test.post.model.Post" >
<id property="id" column="postid"/>
<result property="name" column="postname"/>
</association>
然而随之楼主又出现了一个新的问题,例如此例中,当postCode为空时,postid和postname理所当然为空。这时,又出现了问题:post的id和name竟然被赋予了外围employee的id和name值。这显然不是我们想要的结果啊,怎么办呢:
<configuration>
<settings>
<setting name="callSettersOnNulls" value="true"/>
<!--查询字段为空时依旧返回至对象-->
</settings>
</configuration>
在mybatis的配置文件中加上这句代码后,post的id和name,被正常的赋予了null值,而不是错误的employee的值了。
然而还是不对啊,这里employee为空,查询返回的post应该是null才对,而不是返回一个属性都是空的post。
怎么解决呢,尝试一下另一种association的查询方式吧:
<association property="post" column="postCode" select="com.test.post.dao.PostMapper.selectByPrimaryKey"/>
用分步查询的方式,果然没有嵌套查询所带来的问题了。返回了正常的null。
问题解决。