国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

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

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

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

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

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

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

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

@MapperScan

該注解存在著爭(zhēng)議,但不可否認(rèn)的是這個(gè)注解確實(shí)是Mybatis的注解,是為了集成Spring而寫(xiě)的注解。該注解主要是掃描某個(gè)包目錄下的Mapper,將Mapper接口類(lèi)交給Spring進(jìn)行管理。

org.mybatis.spring.annotation.MapperScan使用方式

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

其實(shí),從名字上就能看出,是用來(lái)掃描的Mapper的。

掃描包路徑可以是一個(gè)或者多個(gè),也可以在路徑中可以使用 * 作為通配符對(duì)包名進(jìn)行匹配 。

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

靈活度相當(dāng)高,這樣在實(shí)際上項(xiàng)目中,我們就可以指定掃描想要被掃描的包路徑。

@Mapper

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

使用方式

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

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

對(duì)應(yīng)xml文件中的<insert>標(biāo)簽。

在應(yīng)用層手動(dòng)指定主鍵

手動(dòng)指定的方式不把主鍵區(qū)別看待,插入之前在應(yīng)用層生成對(duì)象的時(shí)候就會(huì)給主鍵一個(gè)值,插入的時(shí)候與普通字段沒(méi)啥區(qū)別。

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

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

「注意」

#{username}這種寫(xiě)法,是把User作為了當(dāng)前上下文,這樣訪問(wèn)User的屬性的時(shí)候直接寫(xiě)屬性名字就可以了。

表自增主鍵

自增主鍵對(duì)應(yīng)著XML配置中的主鍵回填,一個(gè)簡(jiǎn)單的例子:

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

使用Option來(lái)對(duì)應(yīng)著XML設(shè)置的select標(biāo)簽的屬性,userGeneratordKeys表示要使用自增主鍵,keyProperty用來(lái)指定主鍵字段的字段名。自增主鍵會(huì)使用數(shù)據(jù)庫(kù)底層的自增特性。

選擇主鍵

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

/** * 插入記錄,選擇主鍵 */@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

刪除的時(shí)候只要把語(yǔ)句條件神馬的寫(xiě)在@Delete注解的value里就好了,返回一個(gè)int類(lèi)型是被成功刪除的記錄數(shù)。對(duì)應(yīng)xml文件中的<delete>標(biāo)簽。

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

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

對(duì)應(yīng)xml文件中的<update>標(biāo)簽。

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

查詢的時(shí)候稍稍有些復(fù)雜,因?yàn)椴樵儠?huì)涉及到如何將查出來(lái)的字段設(shè)置到對(duì)象上,對(duì)應(yīng)xml文件中的<select>標(biāo)簽。

通常有那么三種辦法:

在SQL語(yǔ)句中手動(dòng)指定別名來(lái)匹配

在寫(xiě)SQL語(yǔ)句的時(shí)候,手動(dòng)為每一個(gè)字段指定一個(gè)別名來(lái)跟對(duì)象的屬性做匹配,適用于表字段名與對(duì)象屬性名差異很大沒(méi)有規(guī)律并且表字段不多的情況。

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

mybatis有一個(gè)選項(xiàng)叫mapUnderscoreToCamelCase,當(dāng)表中的字段名與對(duì)象的屬性名相同只是下劃線和駝峰寫(xiě)法的差異時(shí)適用。

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

開(kāi)啟轉(zhuǎn)換:

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

然后查詢

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

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

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

使用ResultMap

對(duì)于表的字段名和對(duì)象的屬性名沒(méi)有太大相同點(diǎn)并且表中的字段挺多的情況下,應(yīng)該使用ResultMap做適配。

/** * 使用ResultMap */@Results(id = 'userMap', value = { //可以使用這種方式來(lái)處理字段名和數(shù)據(jù)庫(kù)表字段名不一致的情況 @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對(duì)應(yīng)著XML中的ResultMap,同時(shí)可以為其指定一個(gè)id,其它地方可以使用這個(gè)id來(lái)引用它,比如要引用上面的這個(gè)Results:

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

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

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

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

其他注解

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

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

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

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

@Param :參數(shù)標(biāo)簽,我們?cè)贛apper的方法簽名上標(biāo)注的參數(shù),我們可以指定參數(shù)名稱(chēng),然后在注解中或者xml中的SQL里就可以使用我們自定義的參數(shù)名稱(chēng)。

@SelectKey :獲取最新插入id。

@CacheNamespace :為給定的命名空間 (比如類(lèi)) 配置緩存。對(duì)應(yīng)xml中的<cache>。

@CacheNamespaceRef :參照另外一個(gè)命名空間的緩存來(lái)使用。屬性:value,應(yīng)該是一個(gè)名空間的字 符串值(也就是類(lèi)的完全限定名) 。對(duì)應(yīng)xml中的<cacheRef>標(biāo)簽。

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

@Arg :?jiǎn)?獨(dú) 的 構(gòu) 造 方 法 參 數(shù) , 是 ConstructorArgs 集合的一部分。屬性: id,column,javaType,typeHandler。id 屬性是布爾值, 來(lái)標(biāo)識(shí)用于比較的屬 性,和XML 元素相似。對(duì)應(yīng)xml中的<arg>標(biāo)簽。

@Case :?jiǎn)为?dú)實(shí)例的值和它對(duì)應(yīng)的映射。屬性: value,type,results。Results 屬性是結(jié) 果數(shù)組,因此這個(gè)注解和實(shí)際的 ResultMap 很相似,由下面的 Results 注解指定。對(duì)應(yīng)xml中標(biāo)簽<case>。

Mybatis常用注解對(duì)應(yīng)的目標(biāo)和標(biāo)簽

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

總結(jié)

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

「增刪改查:」@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映射文件中都有元素與之對(duì)應(yīng),但是不是所有。此外在mybatis-spring中提供了@Mapper注解和@MapperScan注解,用于和spring進(jìn)行整合。

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

相關(guān)文章:
主站蜘蛛池模板: 国产成人精品久久二区二区 | 未成人做爰视频www 窝窝午夜精品一区二区 | 国产成人精品久久一区二区小说 | 国产一级小视频 | 成人综合国产乱在线 | 日本aa毛片a级毛片免费观看 | 欧美日韩一区二区在线 | 九九国产| aa大片成人免费网站 | 久草热在线观看 | 欧美黄色一级视屏 | 亚洲永久中文字幕在线 | 一级全黄视频 | www.久久 | 免费欧洲毛片a级视频无风险 | 91久久国产综合精品女同国语 | 日产国产精品亚洲系列 | 久久久久久免费精品视频 | 一级做a爰片久久毛片苍井优 | 欧美视频自拍偷拍 | 精品一区二区三区视频在线观看免 | 美女又爽又黄视频 | 国产精品久久在线观看 | 国产精品黄网站免费观看 | 伊人青 | 手机看片日韩高清国产欧美 | 国产精品日韩一区二区三区 | 日韩在线播放视频 | 国内自拍一区 | 午夜精品一区二区三区在线观看 | 男人天堂视频在线观看 | 久久国产精品国产精品 | 久久免费黄色 | 精品欧美激情在线看 | 做爰成人五级在线视频| 91香蕉国产线在线观看免费 | 成人亚洲国产综合精品91 | 最新久久免费视频 | 久久精品国产一区二区三区日韩 | 国产在线观看免费视频软件 | 国产黄色大片网站 |