Mybatis之@ResultMap,@Results,@Result註解的使用
Mybatis註解@Results、@Result、@ResultMap
問題
在使用mybatis時發現,mybatis能自動匹配實體名和數據庫字段名相同的字段。當有實體名與數據庫的字段名不同時該如何解決??
數據庫的表對應的列名:
springboot項目中建的實體類為:
public class MapModel { private Long key; private String value; //省略getter、setter方法 }
方法一
給查詢字段另起名對應實體類的名稱:
@Select("SELECT province_id as key , province_name as value FROM `j_position`") public List<MapModel> provinceName();
方法二
使用@Results、@Result、@ResultMap註解:
@Select("SELECT province_id, province_name FROM `j_position`") @Results(id="resultMap1" ,value = { @Result(property = "key",column = "province_id"), @Result(property = "value",column ="province_name") }) public List<MapModel> provinceName();
其中定義的id=”resultMap1″可以使用
@ResultMap("resultMap1) @Select("SELECT province_id, province_name FROM `j_position` where province_name=#{name}") public List<MapModel> provinceName(String name);
推薦使用方法二!
mybatis註釋使用
resultMap對應的註釋,及對應註解Results、Result、One、Many的使用
有一部分建立在我上一個博客,mybatis註釋使用(單表查詢),如果那裡看不懂瞭,建議看下我上一個博客(裡面所有的配置文件,接口,數據庫的創建都有說明)
<resultMap>對應的註解:
1.@Results註解
代替的是標簽<resultMap >
該註解中可以使用單個@Result註解,也可以使用@Result集合
@Results({@Result(),@Result()})或@Results(@Result())
註意:使用註解是若報出org.apache.ibatis.binding.BindingException:Invalid bound statement (not found):接口全類名.方法名
可能是使用@Results註解時忘記使用@Select註解
2.@Resutl註解
代替瞭 <id>標簽和<result>標簽
@Result 中 屬性介紹:
column
數據庫的列名Property
需要裝配的屬性名one
需要使用的@One註解(@Result(one=@One)()))many
需要使用的@Many註解(@Result(many=@many)()))
3.@One註解(一對一)
代替瞭<assocation>標簽,是多表查詢的關鍵,在註解中用來指定子查詢返回單一對象。
@One註解屬性介紹:
select
指定用來多表查詢的sqlmapperfetchType
會覆蓋全局的配置參數lazyLoadingEnabled。。
使用格式:
@Result(column=" ",property="",one=@One(select=""))
4.@Many註解(多對一)
代替瞭<Collection>標簽,是是多表查詢的關鍵,在註解中用來指定子查詢返回對象集合。
註意:聚集元素用來處理“一對多”的關系。需要指定映射的Java實體類的屬性,屬性的javaType(一般為ArrayList)但是註解中可以不定義;
使用格式:
@Result(property="",column="",many=@Many(select=""))
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- Mybatis中resultMap的Colum和property屬性詳解
- Mybatis一對多查詢列表屬性處理示例詳解
- springboot整合mybatis實現多表查詢的實戰記錄
- 關於mybatis一對一查詢一對多查詢遇到的問題
- 關於Mybatis使用collection分頁問題