日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:29日期:2023-10-19 17:09:19

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

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

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

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

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

@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框架中定義的一個描述數據層接口的注解,注解往往起到的都是一個描述性作用,用于告訴Spring框架此接口的實現類由Mybatis負責創建,并將其實現類對象存儲到spring容器中。

使用方式

@Mapperpublic interface UserMapper { User selectById(Integer id); }@Insert

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

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

在應用層手動指定主鍵

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

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

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

「注意」

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

表自增主鍵

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

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

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

選擇主鍵

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

/** * 插入記錄,選擇主鍵 */@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類型是被成功刪除的記錄數。對應xml文件中的<delete>標簽。

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

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

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

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

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

通常有那么三種辦法:

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

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

/** * 根據ID查詢,手動設置別名 */@Select('SELECT id, username, passwd, birth_day AS birthDay FROM t_user WHERE id=#{id}')User loadByIdHandAlias(Long id);使用mybatis的自動下劃線駝峰轉換

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

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

開啟轉換:

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

然后查詢

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

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

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

使用ResultMap

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

/** * 使用ResultMap */@Results(id = 'userMap', value = { //可以使用這種方式來處理字段名和數據庫表字段名不一致的情況 @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來引用一個已經存在的ResultMap,這個ResultMap可以是在Java中使用@Results注解定義的,也可以是在XML中使用resultMap標簽定義的。

增刪改查注解總結

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

其他注解

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

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

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

@Many:與@One類似,一對多的關系,類似于<collection>

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

@SelectKey :獲取最新插入id。

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

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

@ConstructorArgs :收集一組結果傳遞給一個劫奪對象的 構造方法。屬性:value,是形式參數 的數組。

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

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

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

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

總結

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

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

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

到此這篇關于Mybatis常見注解有哪些(總結)的文章就介紹到這了,更多相關Mybatis常見注解內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Mybatis 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
在线人成日本视频| 久久国产三级| 欧美日本不卡| 日本成人中文字幕| 日韩欧美中文字幕一区二区三区| 久久亚洲国产精品一区二区| 久久午夜精品| 免费在线看一区| 久久国产精品久久久久久电车| 亚洲午夜黄色| 亚洲综合二区| 亚洲精品乱码久久久久久蜜桃麻豆 | 久久精品天堂| 久久精品国产精品亚洲毛片| 国产精品yjizz视频网| 日韩成人精品一区| 亚洲a在线视频| 中国女人久久久| 亚洲毛片在线免费| 国产图片一区| 精品日本视频| 久久中文字幕av一区二区不卡| av不卡在线看| 日本99精品| 国产va在线视频| 欧美日韩高清| 日本一区二区三区视频在线看| 久久成人av| 99久久夜色精品国产亚洲1000部| 午夜在线播放视频欧美| 91欧美极品| 亚洲精品成人图区| 男女男精品网站| 国产精品videossex久久发布| 97人人精品| 亚洲激情久久| 久久精品 人人爱| zzzwww在线看片免费| 黄色日韩精品| 国产欧美日韩精品一区二区三区| 国产精品高颜值在线观看| 亚洲一级高清| 欧美午夜三级| 色爱av综合网| 亚洲精品日本| 中文字幕在线看片| 蜜臀久久99精品久久久画质超高清| 国产精品一区二区99| 久久国产电影| 日本视频一区二区| 中文在线а√在线8| 日韩午夜黄色| 精品高清久久| 另类国产ts人妖高潮视频| 国产精品**亚洲精品| 免费不卡中文字幕在线| 国产精品最新| 欧美国产91| 国产精品最新自拍| 日韩视频精品在线观看| 欧美经典一区| 噜噜噜躁狠狠躁狠狠精品视频| 精品一区不卡| 亚洲精品动态| 欧美在线观看视频一区| 日韩三级精品| japanese国产精品| 美女免费视频一区| 亚洲麻豆一区| 亚洲香蕉网站| 国产精品s色| 免费在线成人网| 日韩欧美另类一区二区| 国产图片一区| 美女尤物久久精品| 欧美男人天堂| 国产欧美91| 免费在线视频一区| 999精品在线| 精品亚洲精品| 最新国产精品| 欧美日韩国产亚洲一区| 国产v日韩v欧美v| 国产精品调教视频| 亚洲精品成人一区| 黑丝一区二区三区| 精品国产免费人成网站| 国产欧美丝祙| 日韩**一区毛片| 国产精品免费看| 成人午夜国产| 日韩av片子| 欧美激情久久久久久久久久久| 亚洲精品影视| 午夜在线观看免费一区| 丝袜美腿诱惑一区二区三区| 精品视频高潮| 欧美视频一区| 日韩精品久久久久久| 亚洲自拍另类| 国产视频亚洲| 狠狠色综合网| 亚洲激情黄色| 99在线精品免费视频九九视| 欧美精选一区二区三区| 成人午夜国产| 日韩中文视频| 日本一区二区免费高清| 欧美精品导航| 国产伦精品一区二区三区视频 | 中文字幕在线高清| 国产极品久久久久久久久波多结野| 日本在线不卡视频| 综合五月婷婷| 日本综合视频| 18国产精品| 日韩国产欧美在线播放| 日本中文字幕一区二区视频 | 夜夜嗨一区二区| 日韩午夜在线| 热久久免费视频| 亚洲精品福利| 青草久久视频| 国产亚洲精品美女久久| 国产美女视频一区二区| 国产精品久久久久久模特| 国产另类在线| 精品国产欧美日韩一区二区三区| 精品精品久久| 福利视频一区| 久久精品观看| 久久香蕉精品| 欧美亚洲一级| 麻豆91在线播放| 麻豆精品在线播放| 国产在线日韩精品| 欧美成a人免费观看久久| 吉吉日韩欧美| 国产中文一区| 亚洲激情另类| 中文字幕中文字幕精品| 日韩和欧美的一区| 欧美激情福利| 日韩电影免费网站| 99久久九九| 免费在线成人网| 久久精品99国产精品| 精品欧美日韩精品| 蜜桃av在线播放| 欧美日韩免费观看一区=区三区| 久久亚洲美女| 欧美日韩中文| 国产一区二区三区四区大秀| 91精品国产成人观看| 99国产一区| 日韩精品a在线观看91| 久久精品72免费观看| 精品国产乱码久久久久久樱花 | 另类av一区二区| 奇米狠狠一区二区三区| 老司机精品视频在线播放| 精品三级国产| 婷婷激情久久| 亚洲免费福利一区| 精品一区二区三区免费看| 免费污视频在线一区| 巨乳诱惑日韩免费av| 日韩高清成人在线| 给我免费播放日韩视频| 久久一级电影| 日韩精品福利一区二区三区| 成人在线观看免费视频| 欧美天堂亚洲电影院在线观看| 亚洲欧美网站在线观看| 美腿丝袜亚洲三区| 免费毛片在线不卡| 亚洲乱码一区| 高清在线一区| 香蕉精品999视频一区二区| 国产剧情一区二区在线观看| 99视频精品全国免费| 亚洲精品免费观看| 精品免费在线| 国产精品嫩草99av在线| 国产精品主播| 久久精品青草| 婷婷久久免费视频| 欧美激情另类| 亚洲精品系列| 日韩一区二区三区在线免费观看| 亚洲精品极品| 日韩av片子| 亚洲tv在线| 成人看片网站| 国产精品巨作av| 久久成人亚洲| 97精品视频在线看| 日韩一区精品| 久久亚洲专区| 麻豆久久一区二区|