使用MyBatis進(jìn)行簡單的更新與查詢方式_第1頁
使用MyBatis進(jìn)行簡單的更新與查詢方式_第2頁
使用MyBatis進(jìn)行簡單的更新與查詢方式_第3頁
使用MyBatis進(jìn)行簡單的更新與查詢方式_第4頁
使用MyBatis進(jìn)行簡單的更新與查詢方式_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第使用MyBatis進(jìn)行簡單的更新與查詢方式目錄MyBatis增刪改查的用法sql映射文件myBatis框架的緩存myBatis框架的新增myBatis框架的更新myBatis框架的刪除myBatis框架的簡單查詢MyBatis框架的結(jié)果映射resultType和resultMap總結(jié)

MyBatis增刪改查的用法

sql映射文件

sql映射文件中的頂級元素說明

元素說明mappersql映射文件的根元素,只有一個(gè)屬性namespace,用于區(qū)分不同的mapper,必須全局唯一。cache為給定命名空間配置緩存cache-ref引用其他命名空間的緩存配置resultMap用于描述查詢結(jié)果集中的字段荷Java實(shí)體類屬性的對應(yīng)關(guān)系sql定義可重用的sql語句塊,可以在其他語句映射中引用insert映射insert語句update映射update語句delete映射delete語句select映射select語句

使用規(guī)則

?1,sql映射文件與該mapper接口同名(實(shí)體類名+mapper),并放置在同意包路徑下。

?2,要以映射的mapper接口的完全限定名(包名+類名)作為namespace屬性的值。

?3,接口中的方法名與映射文件中sql語句映射的ID一一對應(yīng)。

?4,在不同的sql映射文件中,子元素的id可以相同。

myBatis框架的緩存

緩存分類

一級緩存基于PerperualCache的HashMap本地緩存,默認(rèn)是SQLSession級別的緩存,在SQLSession的一個(gè)生命周期中有效。MyBatis框架的一級緩存默認(rèn)是開啟的。二級緩存二級緩存是SQLSessionFactory級別的,其緩存中的數(shù)據(jù)可以被所有SQLsession共享。MyBatis框架的二級緩存**默認(rèn)是關(guān)閉的。**使用時(shí)需要在其核心配置文件中設(shè)置開啟。

二級緩存的使用方法

1在核心配置文件中設(shè)置全局開啟二級緩存

settings

settingname="cacheEnabled"value="true"/

/settings

2根據(jù)需要在sql映射文件中配置緩存,為當(dāng)前namespace啟用二級緩存

!--在mapper標(biāo)簽內(nèi)--

!--緩存設(shè)置--

cache

eviction="FIFO"

flushInterval="60000"

size="512"

readOnly="true"/

??cache元素中各種屬性的作用

eviction選擇緩存回收策略LRU:默認(rèn)選項(xiàng),最近最少回收,移除最長時(shí)間不被使用的緩存對象。FIFO:先進(jìn)先出,按照對象緩存的順序來移除他們。SOFT:軟引用,移除基于垃圾回收器狀態(tài)和軟引用規(guī)則的對象。WEAK:弱引用,更積極的移除基于來及回收器和若以用規(guī)則的對象。flushInterval設(shè)定緩存刷新間隔,以ms為單位設(shè)定多久自動(dòng)刷新一次緩存默認(rèn)不自動(dòng)刷新size設(shè)定緩存中最多存放的對象數(shù),默認(rèn)1024readOnly設(shè)定緩存是否只讀。默認(rèn)false,表示緩存數(shù)據(jù)會(huì)用于讀寫操作true:表示緩存數(shù)據(jù)值用于讀操作。

3在sql映射文件中配置支持二級緩存后,如需對個(gè)別查詢進(jìn)行調(diào)整,可在select元素中單獨(dú)設(shè)置

selectid="selectAll"resultType="SysUser"

useCache="true"

/select

myBatis框架的新增

新增,使用insert元素來映射插入語句。

//接口中的方法

/**

*新增的方法

*@paramsmbmsUser

smbmsUser對象

*@return返回受影響的行數(shù)

*/

intinsertUserInfo(SmbmsUsersmbmsUser);

!--對應(yīng)的mapper標(biāo)簽--

!--屬性id的值為對應(yīng)的Mapper接口中的方法名,屬性parameterType的值為此方法形參的類型--

insertid="insertUserInfo"parameterType="com.pojo.SmbmsUser"

!--sql語句中#{xxx}中xxx均為實(shí)體類中的屬性名一致--

insertintosmbms_user(userName,userPassword,userCode)values(#{userName},#{userPassword},#{userCode})

/insert

myBatis框架的更新

//接口中的方法

/**

*更新信息的方法

*@paramsmbmsUser

smbmsUser對象

*@return

返回受影響的行數(shù)

*/

intupdateUserInfo(SmbmsUsersmbmsUser);

!--對應(yīng)的mapper標(biāo)簽--

!--屬性id的值為對應(yīng)的Mapper接口中的方法名,屬性parameterType的值為此方法形參的類型--

updateid="updateUserInfo"parameterType="com.pojo.SmbmsUser"

!--sql語句中#{xxx}中xxx均為實(shí)體類中的屬性名一致--

Updatesmbms_usersetuserName=#{userName}whereid=#{id}

/update

myBatis框架的刪除

//接口中的方法

/**

*根據(jù)id刪除的方法

*@paramid

要?jiǎng)h除的id

*@return

返回受影響的行數(shù)

*/

intdeleteUserInfoById(@Param("id")intid);

!--對應(yīng)的mapper標(biāo)簽--

!--屬性id的值為對應(yīng)的Mapper接口中的方法名,屬性parameterType的值為此方法形參的類型--

deleteid="deleteUserInfoById"parameterType="int"

!--此時(shí)#{xxx}參數(shù)中xxx可以不與對應(yīng)Mapper類方法中的形參一直--

deletefromsmbms_userwhereid=#{id}

/delete

注意總結(jié)

1對于增刪改這類操作,數(shù)據(jù)庫本身默認(rèn)返回執(zhí)行sql所影響的行數(shù),所以DAO層的Mapper接口方法的返回值一般設(shè)置為int類型。

2insert,update,delete元素中均沒有resultType/resultMap屬性。

myBatis框架的簡單查詢

基本數(shù)據(jù)類型實(shí)現(xiàn)單一條件查詢

//接口中的方法

/**

*根據(jù)用戶名模糊查的方法

*@paramuserName用戶名

*@return

集合

*/

ListSmbmsUser

listByUserName(StringuserName);

!--對應(yīng)的mapper標(biāo)簽--

!--屬性id的值為對應(yīng)的Mapper接口中的方法名,屬性parameterType的值為此方法形參的類型--

!--屬性resultType的值為返回結(jié)果的類型,要使用完全限定名或別名(這里用了完全限定名)--

selectid="listByUserName"

parameterType="string"resultType="com.pojo.SmbmsUser"

!--此時(shí)#{xxx}參數(shù)中xxx可以不與對應(yīng)Mapper類方法中的形參一直--

SELECTu.*,r.`roleName`FROMsmbms_user

ASu

INNERJOIN`smbms_role`ASrON

u.`userRole`=r.`id`WHEREuserNameLIKECONCAT('%',#{param},'%')

/select

select標(biāo)簽中的parameterType屬性,表示為向sql語句傳入的參數(shù)類型,使用完全限定名(包名+類名)或別名,支持基礎(chǔ)數(shù)據(jù)類型和復(fù)雜數(shù)據(jù)類型。

被映射的sql語句中,參數(shù)的表示方法為*#{參數(shù)名},此參數(shù)名不需要**和Mapper接口中方法的形參刻意匹配,因?yàn)閙yBatis框架將映射的sql語句自動(dòng)轉(zhuǎn)換成占位符的sql語句并實(shí)現(xiàn)賦值。*

mybatis框架內(nèi)建的部分別名與java數(shù)據(jù)類型的映射關(guān)系

映射類型別名映射類型別名BooleanbooleanStringstringBytebyteBigDecimalbigdecimal或decimalLonglongDatedateShortshortMapmapIntegerint或integerHashMaphashmapDoubledoubleListlistFloatfloatArrayListarraylist

基本數(shù)據(jù)類型實(shí)現(xiàn)多條件查詢

使用@Param注解實(shí)現(xiàn)多參數(shù)入?yún)?/p>

//接口中的方法

*根據(jù)商品名和id查詢商品通過注解的方式

*@paramname商品名

*@paramidid

*@return返回一個(gè)商品對象

SmbmsProvidergetByNameAndIdInNote(@Param("proName")Stringname,@Param("id")intid);

//注解中的參數(shù)名,將用于Sql映射文件中的對應(yīng)select標(biāo)簽的sql語句中的參數(shù)值

!--對應(yīng)的mapper標(biāo)簽中--

!--屬性id的值為對應(yīng)的Mapper接口中的方法名,屬性parameterType的值為此方法形參的類型--

!--屬性resultType的值為返回結(jié)果的類型,要使用完全限定名或別名(這里用了完全限定名)--

selectid="getByNameAndIdInNote"resultType="com.pojo.SmbmsProvider"

select*fromsmbms_providerwhereproNamelikeCONCAT('%',#{proName},'%')andid=#{id}

/select

注意:

?1,當(dāng)輸入的參數(shù)類型為基本數(shù)據(jù)類型時(shí),select標(biāo)簽中的parameterType屬性可省略(無論單參還是多參)

?2,注解中定義的參數(shù)名稱要和sql語句占位符中的參數(shù)名稱一致

實(shí)現(xiàn)多條件查詢

將查詢條件封裝成java對象作為入?yún)?/p>

//接口中的方法

/**

*根據(jù)輸入?yún)?shù)查詢商品信息

*@paramprovider對象

*@return商品對象

*/

ListSmbmsProvidergetAll(SmbmsProviderprovider);

!--對應(yīng)的mapper標(biāo)簽中--

!--屬性id的值為對應(yīng)的Mapper接口中的方法名,屬性parameterType的值為此方法形參的類型--

!--屬性resultType的值為返回結(jié)果的類型,要使用完全限定名或別名(這里用了完全限定名)--

selectid="getAll"resultType="com.pojo.SmbmsProvider"parameterType="com.pojo.SmbmsProvider"

!--sql中的#{xxx}中的xxx要和實(shí)體類中的屬性名一致--

select*fromsmbms_providerwhereproNamelikeCONCAT('%',#{proName},'%')

/select

將查詢條件封裝成Map對象作為入?yún)?/接口中的方法

/**

*根據(jù)商品名和id查詢商品的方法

*@parammap

map集具體合對象中存有商品名和id的值

*@return

返回一個(gè)具體對象

*/

SmbmsProvidergetByNameAndId(MapString,Objectmap);

!--對應(yīng)的mapper標(biāo)簽中--

!--屬性id的值為對應(yīng)的Mapper接口中的方法名,屬性parameterType的值為此方法形參的類型--

!--屬性resultType的值為返回結(jié)果的類型,要使用完全限定名或別名(這里用了完全限定名)--

selectid="getByNameAndId"

parameterType="map"resultType="com.pojo.SmbmsProvider"

!--sql中的#{xxx}中的xxx要和map集合中的key一致--

select*fromsmbms_providerwhereproNamelikeCONCAT('%',#{proName},'%')andid=#{id}

/select

//測試類中

@Test

voidgetByNameAndId(){

SqlSessionsession=MyBatisUtil.getSqlSession();

ProviderMapperproviderMapper=session.getMapper(ProviderMapper.class);

MapString,Objectmap=newHashMap();

//注意添加的key

map.put("proName","北京");

map.put("id",6);

SmbmsProvidersmbmsProvider=providerMapper.getByNameAndId(map);

System.out.println(smbmsProvider.getProName());

}

使用Map類型傳遞多個(gè)參數(shù),綁定的sql語句中使用#{Map的key}來取得參數(shù)值。使用Map傳參的方式更加靈活,不受域模型(實(shí)體類)設(shè)計(jì)的限制,可以更加靈活的組織查詢所需的條件。

MyBatis框架的結(jié)果映射

使用resultMap元素定義結(jié)果映射,對名稱不同的結(jié)果集字段和實(shí)體類屬性進(jìn)行映射。

resultMap元素包含的屬性

名稱說明id映射規(guī)則集的唯一標(biāo)識(shí),可以被select元素中的resultMap屬性引用,便于找到對應(yīng)規(guī)則集。type映射的結(jié)果類型。

resultMap元素包含的子元素

名稱說明id指定和數(shù)據(jù)表主鍵字段對應(yīng)的標(biāo)識(shí)屬性??商岣呖蚣艿男阅埽貏e是應(yīng)用緩存和嵌套結(jié)果映射的時(shí)候。result指定結(jié)果集字段和實(shí)體類屬性的映射關(guān)系。

eg:

!--使用resultMap元素定義結(jié)果映射--

resultMapid="userWithRoleName"type="com.pojo.SmbmsUser"

idproperty="id"column="id"/id

resultproperty="userRoleName"column="roleName"/result

/resultMap

!--使用resultMap元素定義的規(guī)則封裝查詢結(jié)果--

selectid="listByUserName"parameterType="string"resultMap="userWithRoleName"

SELECTu.*,r.`roleName`FROMsmbms_userASu

INNERJOIN`smbms_role`ASrONu.`userRole`=r.`id`

WHEREuserNameLIKECONCAT('%',#{userName},'%')

/select

注意

?1,select元素中的resultMap屬性的值要與resultMap元素中id屬性的值一致。

?2,select元素中的parameterType屬性的值要與resultMap元素中type屬性的值一致。

?3,resultMap元素中的id子元素是數(shù)據(jù)表主鍵字段的列,其中property屬性是相應(yīng)實(shí)體類中的對應(yīng)屬性,其中column屬性是結(jié)果集中列的名稱。

?4,resultMap元素中的result子元素是用來映射其他的列,其中property屬性是相應(yīng)實(shí)體類中的對應(yīng)屬性,其中column屬性是結(jié)果集中列的名稱。

resultMap的自動(dòng)映射行為

可以在核心配置文件中進(jìn)行設(shè)置

settings

!--設(shè)置自動(dòng)映射行為--

settingname="autoMappingBehavior"value="FULL"/

/settings

其上value的值有3種

值說明NONE禁用自動(dòng)映射,僅為手工映射的屬性賦值。PARTIAL默認(rèn)行為,沒嵌套的resultMap使用自動(dòng)映射,有嵌套的則不使用。FULL全部使用自動(dòng)映射,有嵌套的也會(huì)使用自動(dòng)映射。

自動(dòng)映射行為對resultType和resultMap的影響

自動(dòng)映射行為resultType(不支持嵌套映射)沒有嵌套映射的resultMap有嵌套映射的resultMapNONE失效手工映射手工映射PARTUAL自動(dòng)映射自動(dòng)映射手工映射FULL自動(dòng)映射自動(dòng)映射自動(dòng)映射

注意

1,resultType不支持嵌套映射,無論autoMappingBehavior設(shè)置為PARTIAL還是FULL,實(shí)體類都會(huì)自動(dòng)映射,而實(shí)體類中的關(guān)聯(lián)屬性都不會(huì)被初始化,始終未null.

2,resultType完全依賴自動(dòng)映射,如果autoMappingBehavior設(shè)置為NONE,resultType會(huì)失效,無法初始化實(shí)體類對象而返回null,此時(shí)返回查詢只能使用resultMap手工映射。

嵌套結(jié)果映射

1,association元素

?------------此元素用來處理has-one類型的關(guān)系(復(fù)合類型)。

處理:多對一或一對一

?association元素包含的屬性

名稱說明property實(shí)體類中用來映射查詢結(jié)果子集的屬性javaTypeproperty指定的屬性的數(shù)據(jù)類型,可以使用java完全限定類名或別名。如果property指定的屬性是javaBean,則框架能自行檢測出。如果property指定的屬性是HashMap,則應(yīng)通過javaType屬性明確指定其數(shù)據(jù)類型。resultMap引用外部resultMap

association元素包含的子元素

名稱說明id指定和數(shù)據(jù)表主鍵字段對應(yīng)的標(biāo)識(shí)屬性。result指定結(jié)果集字段和實(shí)體類屬性的映射關(guān)系。

eg:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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

提交評論