MyBatis中Association联合select使用

Association联合select使用容易出差问题地方

 

mapper配置:

 

Java代码   收藏代码
  1. <resultMap type="com.demo.sys.entity.Menu" id="menuMap">  
  2.     <id property="id" column="id" />  
  3.     <result property="name" column="menu_name" />  
  4.     <result property="url" column="url" />  
  5.     <result property="active" column="isactive" />  
  6.     <result property="createDate" column="createdate" />  
  7.     <result property="updateDate" column="updatedate" />  
  8.     <result property="bak1" column="bak1" />  
  9.     <result property="bak2" column="bak2" />  
  10.     <result property="bak3" column="bak3" />  
  11.     <result property="locale" column="locale" />  
  12.     <result property="orderNum" column="ordernum" />  
  13.     <association property="module" column="module_id"  resultMap="moduleMap" select="queryModule">  
  14.             </association>  
  15. </resultMap>  

 

Java代码   收藏代码
  1. <resultMap type="com.demo.sys.entity.Module" id="moduleMap">  
  2.     <id property="id" column="id" />  
  3.     <result property="name" column="module_name" />  
  4.     <result property="remark" column="remark" />  
  5.     <result property="createDate" column="createdate" />  
  6.     <result property="updateDate" column="updatedate" />  
  7. </resultMap>  

 

Java代码   收藏代码
  1. <select id="queryModule" resultMap="moduleMap" >  
  2.     select * from sys_module where id =#{id}  
  3. </select>  

 

 

这种配置导致问题:

Menu.module的属性很多都是为null,除了id不为空。

 

经过调试发现问题出在:

Java代码   收藏代码
  1. <association property="module" column="module_id"  resultMap="moduleMap" select="queryModule">  
  2.                 </association>  

 

去掉resultMap,修改为:

Java代码   收藏代码
  1. <association property="module" column="module_id"  select="queryModule">  
  2.                 </association>  

 

 

结果Menu.module的属性可以正确被mybaties设置进去,都有值了。

 

 

 

 

Association联合select使用值得注意的细节地方:

这是我使用mybatis的Association联合select使用存着问题的地方,

 

 

Java代码   收藏代码
  1. <association property="module" column="module_id"   select="queryModule">  
  2.           
  3.         </association>  

 

    mybatis会根据类似resultSet.getInt("module_id")的值,压入到select 为queryModule 的SQL输入参数里面。

Java代码   收藏代码
  1. <select id="queryModule" resultMap="moduleMap" >  
  2.     select * from sys_module where id =#{id}  
  3. </select>  

 

  我以前一直纠结于#{id}是指Menu.id还是module的主键或外键id属性。

 

   而select 为queryModule的SQL输入参数可以随便给名称,只要是输入参数与压入进去的值类型相同就行了,可以写成:

  

Java代码   收藏代码
  1. select * from sys_module where id =#{jjjasdasdid}  

 

不管输入参数名称是什么,mybatis最终会执行:

 效果为:select * from sys_module where id =resultSet.getInt("module_id");

猜你喜欢

转载自blog.csdn.net/weixin_39214481/article/details/80051271