最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mybatis常見注解有哪些(總結(jié))

 更新時間:2021年03月05日 10:59:22   作者:黃羽明  
這篇文章主要介紹了Mybatis常見注解有哪些(總結(jié)),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

當下,注解非常流行,以前很長篇的代碼,現(xiàn)在基本上一個注解就能搞定。

那,在Mybatis中又有哪些注解呢?

5e918565fd0ca1740e9e14337ddf83b3.png

Mybatis中的注解基本上都在org.apache.ibatis.annotations目錄下:

4e258b99972668d3048d7ccfd3030991.png 

@MapperScan

該注解存在著爭議,但不可否認的是這個注解確實是Mybatis的注解,是為了集成Spring而寫的注解。該注解主要是掃描某個包目錄下的Mapper,將Mapper接口類交給Spring進行管理。

org.mybatis.spring.annotation.MapperScan

使用方式

@SpringBootApplication
@MapperScan("com.tian.mybatis.mapper")
public class Application {
}

其實,從名字上就能看出,是用來掃描的Mapper的。

掃描包路徑可以是一個或者多個,也可以在路徑中可以使用 * 作為通配符對包名進行匹配 。

@SpringBootApplication
@MapperScan("com.tian.*.mapper")
public class Application {
}
@SpringBootApplication
@MapperScan({"com.tian.mybatis.mapper","com.tian.mybatis.mapper1"})
public class Application {
}

靈活度相當高,這樣在實際上項目中,我們就可以指定掃描想要被掃描的包路徑。

@Mapper

該注解目的就是為了不再寫mapper映射文件 (UserMapper.xml)。可以大大的簡化編寫xml的繁瑣。該注解是由Mybatis框架中定義的一個描述數(shù)據(jù)層接口的注解,注解往往起到的都是一個描述性作用,用于告訴Spring框架此接口的實現(xiàn)類由Mybatis負責創(chuàng)建,并將其實現(xiàn)類對象存儲到spring容器中。

使用方式

@Mapper
public interface UserMapper { 
  User selectById(Integer id); 
}

@Insert

插入記錄的時候主鍵如何生成?對此基本上有三種方案,分別是:手動指定(應用層)、自增主鍵(數(shù)據(jù)層單表)、選擇主鍵(數(shù)據(jù)層多表)。

對應xml文件中的<insert>標簽。

在應用層手動指定主鍵

手動指定的方式不把主鍵區(qū)別看待,插入之前在應用層生成對象的時候就會給主鍵一個值,插入的時候與普通字段沒啥區(qū)別。

/**
* 插入記錄,手動分配主鍵 
*/
@Insert("INSERT INTO t_user (id, username, passwd) VALUES (#{id}, #{username}, #{passwd})")
int addUserAssignKey(User user);

在上面的這個例子中,mybatis并不知道到底哪個字段是主鍵,id雖然是主鍵字段,但并沒有被區(qū)別對待。

「注意」

#{username}這種寫法,是把User作為了當前上下文,這樣訪問User的屬性的時候直接寫屬性名字就可以了。

表自增主鍵

自增主鍵對應著XML配置中的主鍵回填,一個簡單的例子:

/**
* 插入記錄,數(shù)據(jù)庫生成主鍵 
*/
@Options(useGeneratedKeys = true, keyProperty = "id")
@Insert("INSERT INTO t_user (username, passwd) VALUES (#{username}, #{passwd})")
int addUserGeneratedKey(User user);

使用Option來對應著XML設置的select標簽的屬性,userGeneratordKeys表示要使用自增主鍵,keyProperty用來指定主鍵字段的字段名。自增主鍵會使用數(shù)據(jù)庫底層的自增特性。

選擇主鍵

選擇主鍵從數(shù)據(jù)層生成一個值,并用這個值作為主鍵的值。

/**
 * 插入記錄,選擇主鍵 
 */
@Insert("INSERT INTO t_user (username, passwd) VALUES (#{username}, #{passwd})")
@SelectKey(statement = "SELECT UNIX_TIMESTAMP(NOW())", keyColumn = "id", keyProperty = "id", resultType = Long.class, before = true)
int addUserSelectKey(User user);

@Delete

刪除的時候只要把語句條件神馬的寫在@Delete注解的value里就好了,返回一個int類型是被成功刪除的記錄數(shù)。對應xml文件中的<delete>標簽。

/**
 * 刪除記錄 
 */
@Delete("DELETE FROM t_user WHERE id=#{id}")
int delete(Long id);

@Update

修改的時候和刪除一樣只要把SQL語句寫在@Update的value中就好了,返回一個int類型表示被修改的記錄行數(shù)。

對應xml文件中的<update>標簽。

/**
 * 修改記錄 
 */
@Update("UPDATE t_user SET username=#{username}, passwd=#{passwd} WHERE id=#{id}")
int update(User user);

@Select

查詢的時候稍稍有些復雜,因為查詢會涉及到如何將查出來的字段設置到對象上,對應xml文件中的<select>標簽。

通常有那么三種辦法:

在SQL語句中手動指定別名來匹配

在寫SQL語句的時候,手動為每一個字段指定一個別名來跟對象的屬性做匹配,適用于表字段名與對象屬性名差異很大沒有規(guī)律并且表字段不多的情況。

/**
 * 根據(jù)ID查詢,手動設置別名 
 */
@Select("SELECT id, username, passwd, birth_day AS birthDay FROM t_user WHERE id=#{id}")
User loadByIdHandAlias(Long id);

使用mybatis的自動下劃線駝峰轉(zhuǎn)換

mybatis有一個選項叫mapUnderscoreToCamelCase,當表中的字段名與對象的屬性名相同只是下劃線和駝峰寫法的差異時適用。

配置了mapUnderscoreToCamelCase之后mybatis在將ResultSet查出的數(shù)據(jù)設置到對象的時候會嘗試先將下劃線轉(zhuǎn)換為駝峰然后前面拼接set去設置屬性。

開啟轉(zhuǎn)換:

70943cdbb95f3ac3f19fc71c43010a86.png

然后查詢

/**
 * 根據(jù)ID查詢,開了自動駝峰轉(zhuǎn)換 
 */
@Select("SELECT * FROM t_user WHERE id=#{id}")
User loadByIdAutoAlias(Long id);

查看打印的結(jié)果,birth_day屬性填充到了對象中:

e35c24ba10367397879f3ff38d702193.png 

使用ResultMap

對于表的字段名和對象的屬性名沒有太大相同點并且表中的字段挺多的情況下,應該使用ResultMap做適配。

/**
 * 使用ResultMap 
 */
@Results(id = "userMap", value = {
    //可以使用這種方式來處理字段名和數(shù)據(jù)庫表字段名不一致的情況
    @Result(id=true, column = "id", property = "id"),
    @Result(column = "username", property = "username"),
    @Result(column = "passwd", property = "passwd"),
    @Result(column = "birth_day", property = "birthDay")
})
@Select("SELECT * FROM t_user WHERE id=#{id}")
User loadByIdResultMap(Long id);

@Results對應著XML中的ResultMap,同時可以為其指定一個id,其它地方可以使用這個id來引用它,比如要引用上面的這個Results:

/**
 * 引用其他的Result 
 */
@ResultMap("userMap")
@Select("SELECT * FROM t_user WHERE id=#{id}")
User loadByIdResultMapReference(Long id);

使用@ResultMap來引用一個已經(jīng)存在的ResultMap,這個ResultMap可以是在Java中使用@Results注解定義的,也可以是在XML中使用resultMap標簽定義的。

增刪改查注解總結(jié)

865515ac8c7d87003f155fdc99d2d321.png 

其他注解

@Results:結(jié)果映射的列表, 包含了一個特別結(jié)果列如何被映射到屬性或字段的詳情。屬 性:value, id。value 屬性是 Result 注解的數(shù)組。對應xml中的<resultMap> 標簽。

@Result:在列和屬性或字段之間的單獨結(jié)果映 射。屬 性:id,column, property, javaType ,jdbcType ,type Handler, one,many。id 屬性是一個布爾值,表 示了應該被用于比較(和在 XML 映射 中的相似)的屬性。one 屬性是單 獨 的 聯(lián) 系, 和 <association> 相 似 , 而 many 屬 性 是 對 集 合 而 言 的 , 和 <collection>相似。它們這樣命名是為了 避免名稱沖突。類似于<resultMap>的子標簽 <result>``<id>。

@One:復雜類型的單獨屬性值映射。屬性: select,已映射語句(也就是映射器方 法)的完全限定名,它可以加載合適類 型的實例。注意:聯(lián)合映射在注解 API 中是不支持的。這是因為 Java 注解的 限制,不允許循環(huán)引用。類似于<association>標簽。

@Many:與@One類似,一對多的關(guān)系,類似于<collection>

@Param :參數(shù)標簽,我們在Mapper的方法簽名上標注的參數(shù),我們可以指定參數(shù)名稱,然后在注解中或者xml中的SQL里就可以使用我們自定義的參數(shù)名稱。

@SelectKey :獲取最新插入id。

@CacheNamespace :為給定的命名空間 (比如類) 配置緩存。對應xml中的<cache>。

@CacheNamespaceRef :參照另外一個命名空間的緩存來使用。屬性:value,應該是一個名空間的字 符串值(也就是類的完全限定名) 。對應xml中的<cacheRef>標簽。

@ConstructorArgs :收集一組結(jié)果傳遞給一個劫奪對象的 構(gòu)造方法。屬性:value,是形式參數(shù) 的數(shù)組。

@Arg :單 獨 的 構(gòu) 造 方 法 參 數(shù) , 是 ConstructorArgs 集合的一部分。屬性: id,column,javaType,typeHandler。id 屬性是布爾值, 來標識用于比較的屬 性,和XML 元素相似。對應xml中的<arg>標簽。

@Case :單獨實例的值和它對應的映射。屬性: value,type,results。Results 屬性是結(jié) 果數(shù)組,因此這個注解和實際的 ResultMap 很相似,由下面的 Results 注解指定。對應xml中標簽<case>。

Mybatis常用注解對應的目標和標簽

c7ff276e375ce7513baf70e390cb91e1.png 

總結(jié)

mybatis最初配置信息是基于 XML ,映射語句(SQL)也是定義在 XML 中的。而到了 MyBatis 3提供了新的基于注解的配置。mybatis提供的注解有很多,筆者進行了分類:

  • 「增刪改查:」@Insert、@Update、@Delete、@Select、@MapKey、@Options、@SelelctKey、@Param、@InsertProvider、@UpdateProvider、@DeleteProvider、@SelectProvider
  • 「結(jié)果集映射:」@Results、@Result、@ResultMap、@ResultType、@ConstructorArgs、@Arg、@One、@Many、@TypeDiscriminator、@Case
  • 「緩存:」@CacheNamespace、@Property、@CacheNamespaceRef、@Flush

絕大部分注解,在xml映射文件中都有元素與之對應,但是不是所有。此外在mybatis-spring中提供了@Mapper注解和@MapperScan注解,用于和spring進行整合。

到此這篇關(guān)于Mybatis常見注解有哪些(總結(jié))的文章就介紹到這了,更多相關(guān)Mybatis常見注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java使用反射調(diào)用方法示例

    Java使用反射調(diào)用方法示例

    這篇文章主要介紹了Java使用反射調(diào)用方法,結(jié)合實例形式分析了java使用反射調(diào)用對象方法的相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07
  • SpringBoot特點之依賴管理和自動裝配(實例代碼)

    SpringBoot特點之依賴管理和自動裝配(實例代碼)

    在使用SpringBoot的時候,會自動將Bean裝配到IoC容器中,操作也很簡單,今天小編給大家介紹下SpringBoot特點之依賴管理和自動裝配的知識,感興趣的朋友一起看看吧
    2022-03-03
  • Java Redis Redisson配置教程詳解

    Java Redis Redisson配置教程詳解

    這篇文章主要介紹了Java Redis Redisson配置教程,包括Session共享配置及其他Redisson的Config配置方式,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • MyBatis-Plus?實體類注解的實現(xiàn)示例

    MyBatis-Plus?實體類注解的實現(xiàn)示例

    MyBatis-Plus作為MyBatis的增強版,提供了一系列實用的注解,如@TableName、@TableId、@TableField等,旨在簡化數(shù)據(jù)庫和Java實體類之間的映射及CRUD操作,通過這些注解,開發(fā)者可以輕松實現(xiàn)表映射、字段映射、邏輯刪除、自動填充和樂觀鎖等功能
    2024-09-09
  • Java中基于DeferredResult的異步服務詳解

    Java中基于DeferredResult的異步服務詳解

    這篇文章主要介紹了Java中基于DeferredResult的異步服務詳解,DeferredResult字面意思是"延遲結(jié)果",它允許Spring MVC收到請求后,立即釋放(歸還)容器線程,以便容器可以接收更多的外部請求,提升吞吐量,需要的朋友可以參考下
    2023-12-12
  • SpringMVC整合SSM實現(xiàn)表現(xiàn)層數(shù)據(jù)封裝詳解

    SpringMVC整合SSM實現(xiàn)表現(xiàn)層數(shù)據(jù)封裝詳解

    這篇文章主要介紹了SpringMVC整合SSM實現(xiàn)表現(xiàn)層數(shù)據(jù)封裝,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-10-10
  • Java常用集合與映射的線程安全問題小結(jié)

    Java常用集合與映射的線程安全問題小結(jié)

    本文給大家介紹Java常用集合與映射的線程安全問題小結(jié),本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2025-04-04
  • spring解決循環(huán)依賴的簡單方法

    spring解決循環(huán)依賴的簡單方法

    這篇文章主要給大家介紹了關(guān)于spring解決循環(huán)依賴的簡單方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • Spring Boot實現(xiàn)模塊化的幾種方法

    Spring Boot實現(xiàn)模塊化的幾種方法

    模塊可以是業(yè)務模塊,為應用程序提供一些業(yè)務服務,或者為幾個其他模塊或整個應用程序提供跨領(lǐng)域關(guān)注的技術(shù)模塊。這篇文章主要介紹了Spring Boot實現(xiàn)模塊化,需要的朋友可以參考下
    2018-07-07
  • SpringBoot整合resilience4j實現(xiàn)接口限流

    SpringBoot整合resilience4j實現(xiàn)接口限流

    最近在開發(fā)項目的時候,需要用到限流的功能,本文主要介紹了SpringBoot整合resilience4j實現(xiàn)接口限流,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01

最新評論

德安县| 赤水市| 延川县| 新宾| 鄄城县| 永新县| 石城县| 望谟县| 鹤山市| 昂仁县| 阳西县| 岢岚县| 都江堰市| 长垣县| 谷城县| 肥西县| 肃宁县| 凤翔县| 社会| 青州市| 化州市| 泗水县| 峡江县| 齐齐哈尔市| 临高县| 徐州市| 化德县| 阳城县| 柳州市| 敦化市| 宜春市| 当涂县| 灵山县| 庐江县| 连山| 福安市| 洪洞县| 新丰县| 武清区| 夏津县| 巴楚县|