版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- (2025年)中級銀行從業(yè)資格之中級公司信貸題型+答案(考點(diǎn)題)及參考答案詳解
- 2026浙江溫州市蒼南縣城市投資集團(tuán)有限公司招聘19人備考題庫及參考答案詳解一套
- 酒店客房部安全管理與防范制度
- 糖高血壓患者他汀類藥物的使用時(shí)機(jī)
- 酒店客房布草更換制度
- 酒店員工績效考核與晉升制度
- 糖網(wǎng)預(yù)防性篩查策略與社區(qū)實(shí)施
- 糖網(wǎng)篩查中的患者個(gè)體化戒煙干預(yù)方案
- 2025中國農(nóng)業(yè)大學(xué)鄧愛華教授誠聘博士后備考題庫參考答案詳解
- 2025年漯河市行政審批和政務(wù)信息管理局所屬事業(yè)單位人才引進(jìn)3人備考題庫及一套參考答案詳解
- JTG-D40-2002公路水泥混凝土路面設(shè)計(jì)規(guī)范-PDF解密
- 《雅思閱讀精講》
- 產(chǎn)前檢查的操作評分標(biāo)準(zhǔn)
- 水廠及管網(wǎng)改擴(kuò)建工程施工節(jié)能降耗主要措施
- 2023-2024學(xué)年貴州省遵義市小學(xué)語文六年級期末評估測試題詳細(xì)參考答案解析
- 銷售心理學(xué)全集(2022年-2023年)
- 變態(tài)反應(yīng)課件
- 電力拖動(dòng)控制線路與技能訓(xùn)練-教案
- 50年同學(xué)聚會(huì)邀請函(十二篇)
- 單層21米高廠房鋼結(jié)構(gòu)施工方案
- 2022高三英語一模-普陀區(qū)解析-fixed
評論
0/150
提交評論