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");

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章