ts2009 发表于 2016-11-26 09:14:05

MyBatis中Association联合select使用

  Association联合select使用容易出差问题地方
  mapper配置:

<resultMap type="com.demo.sys.entity.Menu" id="menuMap">
<id property="id" column="id" />
<result property="name" column="menu_name" />
<result property="url" column="url" />
<result property="active" column="isactive" />
<result property="createDate" column="createdate" />
<result property="updateDate" column="updatedate" />
<result property="bak1" column="bak1" />
<result property="bak2" column="bak2" />
<result property="bak3" column="bak3" />
<result property="locale" column="locale" />
<result property="orderNum" column="ordernum" />
<association property="module" column="module_id"resultMap="moduleMap" select="queryModule">
</association>
</resultMap>

<resultMap type="com.demo.sys.entity.Module" id="moduleMap">
<id property="id" column="id" />
<result property="name" column="module_name" />
<result property="remark" column="remark" />
<result property="createDate" column="createdate" />
<result property="updateDate" column="updatedate" />
</resultMap>

<select id="queryModule" resultMap="moduleMap" >
select * from sys_module where id =#{id}
</select>
  这种配置导致问题:
  Menu.module的属性很多都是为null,除了id不为空。
  经过调试发现问题出在:

<association property="module" column="module_id"resultMap="moduleMap" select="queryModule">
</association>

  去掉resultMap,修改为:

<association property="module" column="module_id"select="queryModule">
</association>

  结果Menu.module的属性可以正确被mybaties设置进去,都有值了。
  Association联合select使用值得注意的细节地方:
  这是我使用mybatis的Association联合select使用存着问题的地方,

<association property="module" column="module_id"   select="queryModule">
</association>
  mybatis会根据类似resultSet.getInt("module_id")的值,压入到select 为queryModule 的SQL输入参数里面。

<select id="queryModule" resultMap="moduleMap" >
select * from sys_module where id =#{id}
</select>
  我以前一直纠结于#{id}是指Menu.id还是module的主键或外键id属性。
  而select 为queryModule的SQL输入参数可以随便给名称,只要是输入参数与压入进去的值类型相同就行了,可以写成:

select * from sys_module where id =#{jjjasdasdid}
  不管输入参数名称是什么,mybatis最终会执行:
  效果为:select * from sys_module where id =resultSet.getInt("module_id");
页: [1]
查看完整版本: MyBatis中Association联合select使用