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 指定用來多表查詢的sqlmapper
  • fetchType會覆蓋全局的配置參數lazyLoadingEnabled。。

使用格式:

@Result(column=" ",property="",one=@One(select=""))

4.@Many註解(多對一)

代替瞭<Collection>標簽,是是多表查詢的關鍵,在註解中用來指定子查詢返回對象集合。

註意:聚集元素用來處理“一對多”的關系。需要指定映射的Java實體類的屬性,屬性的javaType(一般為ArrayList)但是註解中可以不定義;

使用格式:

@Result(property="",column="",many=@Many(select=""))

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: