課前課程如何使用通用mapper_第1頁
課前課程如何使用通用mapper_第2頁
課前課程如何使用通用mapper_第3頁
課前課程如何使用通用mapper_第4頁
課前課程如何使用通用mapper_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、例如下面的例子:publicerface UserInfoMapper extends Mapper /其他必須手寫的接口.一旦繼承了 Mapper,繼承的 Mapper 就擁有了以下通用的方法:/根據(jù)實(shí)體類不為 null 的字段進(jìn)行查詢,條件全部使用=號 and 條件List select(T record);/根據(jù)實(shí)體類不為 null 的字段查詢總數(shù),條件全部使用=號 and 條件selectCount(T record);/根據(jù)主鍵進(jìn)行查詢,必須保證結(jié)果唯一/單個(gè)字段做主鍵時(shí),可以直接寫主鍵的值/聯(lián)合主鍵時(shí),key 可以是實(shí)體類,也可以是 MapT selectByPrimaryKey(

2、Object key);/一條數(shù)據(jù)/支持 Oracle 序列,UUID,類似的 INDENTITY 自動增長(自動回寫)/優(yōu)先使用傳入的參數(shù)值,參數(shù)值空時(shí),才會使用序列、UUID,自動增長insert(T record);1.1. 1. 繼承通用的 Mapper,必須指定泛型集成方法請看上面的文檔,集成后,可以繼續(xù)閱讀本頁文檔。/一條數(shù)據(jù),只不為 null 的字段,不會影響有默認(rèn)值的字段/支持 Oracle 序列,UUID,類似的 INDENTITY 自動增長(自動回寫)/優(yōu)先使用傳入的參數(shù)值,參數(shù)值空時(shí),才會使用序列、UUID,自動增長insertSelective(T record);/根

3、據(jù)實(shí)體類中字段不為 null 的條件進(jìn)行刪除,條件全部使用=號 and 條件delete(T key);/通過主鍵進(jìn)行刪除,這里最多只會刪除一條數(shù)據(jù)/單個(gè)字段做主鍵時(shí),可以直接寫主鍵的值/聯(lián)合主鍵時(shí),key 可以是實(shí)體類,也可以是 MapdeleteByPrimaryKey(Object key);/根據(jù)主鍵進(jìn)行更新,這里最多只會更新一條數(shù)據(jù)/參數(shù)為實(shí)體類updateByPrimaryKey(T record);/根據(jù)主鍵進(jìn)行更新/只會更新不是 null 的數(shù)據(jù)updateByPrimaryKeySelective(T record);/根據(jù) Exmaple 條件查詢總數(shù)selectCount

4、ByExle(Object exle);/根據(jù) Exmaple 條件刪除deleteByExle(Object exle);1. 表名默認(rèn)使用類名,駝峰轉(zhuǎn)下劃線(只對大寫字母進(jìn)行處理),如 UserInfo 默認(rèn)對應(yīng)的表名為 user_info。表名可以使用Table(name = tableName)進(jìn)行指定,對不符合第一條默認(rèn)規(guī)則的可以通過這種方式指定表名.字段默認(rèn)和Column 一樣,都會作為表字段,表字段默認(rèn)為 Java 對象的 Field 名字駝峰轉(zhuǎn)下劃線形式.可以使用Column(name = fieldName)指定不符合第 3 條規(guī)則的字段名使用Transient 注解可以忽略

5、字段,添加該注解的字段不會作為表字段使用.建議一定是有一個(gè)Id 注解作為主鍵的字段,可以有多個(gè)Id 注解的字段作為聯(lián)合主鍵.1.2. 2. 泛型(實(shí)體類)的類型必須符合要求實(shí)體類按照如下規(guī)則和數(shù)據(jù)庫表進(jìn)行轉(zhuǎn)換,注解全部是 JPA 中的注解:/根據(jù) Exmaple 條件查詢List selectByExle(Object exle);/根據(jù) Exmaple 條件更新非空(null)字段updateByExleSelective(Param(record) T record, Param(exle) Object exle);/根據(jù) Exmaple 條件更新全部字段updateByExle(Par

6、am(record) T record, Param(exle) Object exle);該字段不會回寫。這種情況對應(yīng)類似如下的 XML: inserto Author(id, username, password,bio, favourite_section) values(seq_userid.nextval, #username, #password, #, #bio, #favouriteSection,jdbcType=VARCHAR)默認(rèn)情況下,實(shí)體類中如果不存在包含Id 注解的字段,所有的字段都會作為主鍵字段進(jìn)行使用(這種效率極低).實(shí)體類可以繼承使用,可以參考測試代碼中的co

7、m.abel533.m.UserLogin2 類.由于基本類型,如作為實(shí)體類字段時(shí)會有默認(rèn)值 0,而且無法消除,所以實(shí)體類中建議不要使用基本類型.除了上面提到的這些,Mapper 還提供了序列(支持 Oracle)、UUID(任意數(shù)據(jù)庫,字段長度 32)、主鍵自增(類似,Hsqldb)三種方式,其中序列和 UUID 可以配置多個(gè),主鍵自增只能配置一個(gè)。這三種方式不能同時(shí)使用,同時(shí)存在時(shí)按照 序列UUID主鍵自增的優(yōu)先級進(jìn)行選擇.下面是具體配置方法:使用序列可以添加如下的注解:/可以用于數(shù)字類型,字符串類型(需數(shù)據(jù)庫支持自動)的字段SequenceGenerator(name=Any,seque

8、nceName=seq_userid)Idprivateeger id;增加這個(gè)注解后, 會回寫 ID 。通過設(shè)置GeneratedValue 的 generator 參數(shù)可以支持的獲取主鍵的方法,例如在 Oracle 中使用序列:Id使用主鍵自增:/不限于Id 注解的字段,但是一個(gè)實(shí)體類中只能存在一個(gè)(繼承關(guān)系中也只能存在一個(gè))IdGeneratedValue(strategy = GenerationType.IDENTITY)privateeger id;該字段不會回寫。這種情況對應(yīng)類似如下的 XML:inserto Author(id, username, password,bio,

9、favourite_section) values(#id, #username_bind, #password, #, #bio, #favouriteSection,jdbcType=VARCHAR)使用 UUID 時(shí):/可以用于任意字符串類型長度超過 32 位的字段GeneratedValue(generator = UUID)private String username;這會令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法來取出由數(shù)據(jù)庫生成的主鍵(比如:像和 SQL Server 這樣的關(guān)系數(shù)據(jù)庫管理系統(tǒng)的自動遞增字段)。 這種情況對應(yīng)的 xml 類似下

10、面這樣:主鍵自增還有一種簡單的寫法:/不限于Id 注解的字段,但是一個(gè)實(shí)體類中只能存在一個(gè)(繼承關(guān)系中也只能存在一個(gè))GeneratedValue(generator = JDBC)privateeger id;GeneratedValue(strategy = GenerationType.IDENTITY,generator = select SEQ_ID.nextval from dual)privateeger id;使用 Oracle 序列的時(shí)候,還需要配置:因?yàn)樵跀?shù)據(jù)庫前,需要先獲取到序列值,否則會報(bào)錯。這種情況對于的 xml 類似下面這樣: select SEQ_ID.nextv

11、al from dual inserto Author(id, username, password,bio, favourite_section) values(#id, #username, #password, #, #bio, #favouriteSection,jdbcType=VARCHAR)例如本項(xiàng)目測試中的配置:附:Spring 配置相關(guān)如果你在 Spring 中配置 Mapper 接口,不需要像上面這樣一個(gè)個(gè)配置,只需要有下面的這個(gè)掃描 Mapper 接口的這個(gè)配置即可:1.3. 3. 將繼承的 Mapper 接口添加到 Mybatis 配置中 inserto Author

12、(username,password,bio)values (#username,#password,#,#bio)例如下面這個(gè)簡單的例子:SqlSessqlSes= MybatisHelper.getSqlSes(); try /獲取 MapperUserInfoMapper mapper = sqlSes.getMapper(UserInfoMapper.class); UserInfo userInfo = new UserInfo(); userInfo.setUsername(abel533);userInfo.setPassword(123456); userInfo.setUse

13、rtype(2);userInfo.set();/新增一條數(shù)據(jù)Assert.assertEquals(1, mapper.insert(userInfo);/ID 回寫,不為空Assert.assertNotNull(userInfo.getId();/6 是當(dāng)前的 IDAssert.assertEquals(6, ()userInfo.getId();/通過主鍵刪除新增的數(shù)據(jù)Assert.assertEquals(1,mapper.deleteByPrimaryKey(userInfo); finally sqlSes.close();1.4. 4. 代碼中使用如果想在 Spring4 中使

14、用泛型注入,還需要包含 Mapper所在的包,具體請看 在 Spring4 中使用通用 Mapper。另一個(gè)例子:SqlSessqlSes= MybatisHelper.getSqlSes();try /獲取 MapperCountryMapper mapper = sqlSes.getMapper(CountryMapper.class);/查詢總數(shù)Assert.assertEquals(183, mapper.selectCount(new Country();/查詢 100Country country = mapper.selectByPrimaryKey(100);/根據(jù)主鍵刪除Assert.assertEquals(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論