




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第2章
MyBatis配置詳解與API介紹本章內(nèi)容Mybatis的結(jié)構(gòu)與原理Mybatis配置文件詳解SQL映射文件詳解MybatisAPI介紹本章目標(biāo)理解mybatis的運(yùn)行流程掌握mybatis的配置掌握mybatis的映射文件理解mybatis中的重要的類Mybatis的結(jié)構(gòu)與原理MyBatis執(zhí)行總體流程:(1)加載配置(2)SQL解析(3)SQL執(zhí)行(4)結(jié)果映射MyBatis功能架構(gòu)API接口層:提供給外部使用的接口API,開發(fā)人員通過這些本地API來操縱數(shù)據(jù)庫(kù)。接口層一旦接收到調(diào)用請(qǐng)求就會(huì)調(diào)用數(shù)據(jù)處理層來完成具體的數(shù)據(jù)處理。數(shù)據(jù)處理層:負(fù)責(zé)具體的SQL查找、SQL解析、SQL執(zhí)行和執(zhí)行結(jié)果映射處理等。其主要的目的是根據(jù)調(diào)用的請(qǐng)求完成一次數(shù)據(jù)庫(kù)操作?;A(chǔ)支撐層:負(fù)責(zé)最基礎(chǔ)的功能支撐,包括連接管理、事務(wù)管理、配置加載和緩存處理,這些都是共用的資源,將他們抽取出來作為最基礎(chǔ)的組件。為上層的數(shù)據(jù)處理層提供最基礎(chǔ)的支持。MyBatis配置文件配置文件的結(jié)構(gòu)配置文件的元素properties該元素是外部化的、可替代的屬性,這些屬性也可以配置在典型的Java屬性配置文件中,或者通過properties元素的子元素來傳遞。例如:
<propertiesresource="org/mybatis/example/perties"><propertyname="username"value="dev_user"/><propertyname="password"value="F2Fa3!33TYyg"/></properties>其中的屬性值就可以在整個(gè)配置文件中使用,使用可替換的屬性來實(shí)現(xiàn)動(dòng)態(tài)配置。例如:
<dataSourcetype="POOLED"><propertyname="driver"value="${driver}"/><propertyname="url"value="${url}"/><propertyname="username"value="${username}"/><propertyname="password"value="${password}"/></dataSource>Settings該元素是極其重要的參數(shù)設(shè)置,它們會(huì)修改MyBatis在運(yùn)行時(shí)的行為方式。
<settings>
//對(duì)在此配置文件下的所有cache進(jìn)行全局性開/關(guān)設(shè)置,默認(rèn)true<settingname="cacheEnabled"value="true"/>//全局性設(shè)置懶加載。如果設(shè)為‘false’,則所有相關(guān)聯(lián)的都會(huì)被初始化加載,默認(rèn)true<settingname="lazyLoadingEnabled"value="true"/>//允許和不允許單條語句返回多個(gè)數(shù)據(jù)集(取決于驅(qū)動(dòng)需求)默認(rèn)true<settingname="multipleResultSetsEnabled"value="true"/>//使用列標(biāo)簽代替列名稱。默認(rèn)true<settingname="useColumnLabel"value="true"/>//允許JDBC生成主鍵。需要驅(qū)動(dòng)器支持。如果設(shè)為了true,這個(gè)設(shè)置將強(qiáng)制使用被生成的主鍵,//有一些驅(qū)動(dòng)器不兼容不過仍然可以執(zhí)行,默認(rèn)false<settingname="useGeneratedKeys"value="false"/>//是否需要POJO啟動(dòng)Java字節(jié)碼增強(qiáng)功能,可以提升getter/setter的調(diào)用效能避免Java反射所帶來的性能開銷<settingname="enhancementEnabled"value="false"/>//配置和設(shè)定執(zhí)行器,SIMPLE執(zhí)行器執(zhí)行其它語句。REUSE執(zhí)行器可能重復(fù)使用preparedstatements語句,BATCH執(zhí)行器可以重復(fù)執(zhí)行語句和批量更新。默認(rèn)為simple<settingname="defaultExecutorType"value="SIMPLE"/>//設(shè)置一個(gè)時(shí)限,以決定讓驅(qū)動(dòng)器等待數(shù)據(jù)庫(kù)回應(yīng)的多長(zhǎng)時(shí)間為超時(shí)<settingname="defaultStatementTimeout"value="25000"/></settings> typeAliases類型別名即為Java類型命名一個(gè)短的名稱。它僅同XML配置有關(guān),只用于減少類完全限定名的多余部分。<typeAliases><typeAliasalias="Author"type="domain.blog.Author"/><typeAliasalias="Blog"type="domain.blog.Blog"/></typeAliases>聲明別名后,可以在映射器中使用:<insertid="insert"useGeneratedKeys="true" parameterType="Author">內(nèi)置類型別名Mybatis還內(nèi)置了一些類型別名:別名 映射的類型_byte byte_long long_short short_int int_integer int_double double_float float_boolean booleanstring Stringbyte Bytelong Longshort Shortint Integerinteger Integerdouble Doublefloat Floatboolean Booleandate Datedecimal BigDecimalbigdecimal BigDecimalobject Objectmap Maphashmap HashMaplist Listarraylist ArrayListcollection Collectioniterator IteratortypeHandlers<typeHandlers>:每當(dāng)MyBatis設(shè)置參數(shù)到PreparedStatement或者從ResultSet結(jié)果集中取得值時(shí),就會(huì)使用TypeHandler來處理數(shù)據(jù)庫(kù)類型與java類型之間轉(zhuǎn)換。BooleanTypeHandler java.lang.Boolean,boolean 任何兼容的布爾值ByteTypeHandler java.lang.Byte,byte 任何兼容的數(shù)字或字節(jié)類型ShortTypeHandler java.lang.Short,short 任何兼容的數(shù)字或短整型IntegerTypeHandler java.lang.Integer,int 任何兼容的數(shù)字和整型LongTypeHandler java.lang.Long,long 任何兼容的數(shù)字或長(zhǎng)整型FloatTypeHandler java.lang.Float,float 任何兼容的數(shù)字或單精度浮點(diǎn)型DoubleTypeHandler java.lang.Double,double 任何兼容的數(shù)字或雙精度浮點(diǎn)型BigDecimalTypeHandler java.math.BigDecimal 任何兼容的數(shù)字或十進(jìn)制小數(shù)類型StringTypeHandler java.lang.String CHAR和VARCHAR類型ClobTypeHandler java.lang.String CLOB和LONGVARCHAR類型NStringTypeHandler java.lang.String NVARCHAR和NCHAR類型NClobTypeHandler java.lang.String NCLOB類型ByteArrayTypeHandler byte[] 任何兼容的字節(jié)流類型BlobTypeHandler byte[] BLOB和LONGVARBINARY類型DateTypeHandler java.util.Date TIMESTAMP類型DateOnlyTypeHandler java.util.Date DATE類型TimeOnlyTypeHandler java.util.Date TIME類型SqlTimestampTypeHandler java.sql.Timestamp TIMESTAMP類型SqlDateTypeHandler java.sql.Date DATE類型SqlTimeTypeHandler java.sql.Time TIME類型environmentsMyBatis可以配置多種環(huán)境(開發(fā)環(huán)境,測(cè)試環(huán)境等)。這便于將SQL映射應(yīng)用于多種數(shù)據(jù)庫(kù)之中。<environmentsdefault="development"><environmentid="development"><transactionManagertype="JDBC"/><dataSourcetype="POOLED"><propertyname="driver"value="${driver}"/><propertyname="url"value="${url}"/><propertyname="username"value="${username}"/><propertyname="password"value="${password}"/></dataSource></environment></environments>transactionManager在MyBatis中,有兩種事務(wù)管理器類型(即type=”[JDBC|MANAGED]”)(1)JDBC:該配置直接簡(jiǎn)單地使用了JDBC的提交和回滾設(shè)置。它依賴于從數(shù)據(jù)源得到的連接來管理事務(wù)范圍。(2)MANAGED:該配置幾乎無用。它從來不提交或回滾一個(gè)連接,且它會(huì)讓容器來管理事務(wù)的整個(gè)生命周期(如Spring或JEE應(yīng)用服務(wù)器的上下文)。默認(rèn)情況下,它會(huì)關(guān)閉連接。然而一些容器并不希望這樣,因此,如果需要從連接中停止它,則需要將closeConnection屬性設(shè)置為false。dataSourcedataSource元素使用基本的JDBC數(shù)據(jù)源接口來配置JDBC連接對(duì)象的資源。內(nèi)建數(shù)據(jù)源類型(即type=”???”)有以下三種:
(1)UNPOOLED//表示不用緩存(2)POOLED//表示已經(jīng)緩存(3)JNDI:讀取其他容器的連接對(duì)象(java命名目錄接口)mappers既然MyBatis的行為已經(jīng)由上述元素配置完畢,那么我們現(xiàn)在要定義SQL映射語句。這些語句簡(jiǎn)單闡述了MyBatis要從哪里尋找映射文件,其余的細(xì)節(jié)便在每個(gè)SQL映射文件中。<mappers><mapperresource="org/mybatis/builder/AuthorMapper.xml"/><mapperresource="org/mybatis/builder/BlogMapper.xml"/><mapperresource="org/mybatis/builder/PostMapper.xml"/></mappers>SQL映射的XML文件SQL映射文件包括以下幾個(gè)很少的頂級(jí)元素(按照它們應(yīng)該被定義的順序排序):cache:配置給定命名空間的緩存。cache-ref:從其他命名空間引用緩存配置。resultMap:最復(fù)雜,也是最有力量的元素,用于描述如何從數(shù)據(jù)庫(kù)結(jié)果集中加載對(duì)象。sql:可重用的SQL塊,也可以被其他語句引用。insert:映射插入語句。update:映射更新語句。delete:映射刪除語句。select:映射查詢語句。select查詢語句是使用MyBatis時(shí)最常用的元素之一。當(dāng)從數(shù)據(jù)庫(kù)中取出數(shù)據(jù)時(shí),會(huì)發(fā)現(xiàn)將數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)中是很有價(jià)值的,所以許多應(yīng)用程序的查詢操作相較更改數(shù)據(jù)操作更多。<selectid=”selectPerson”parameterType=”int”resultType=”hashmap”>//<resultMap>節(jié)點(diǎn)配置的idSELECT*FROMPERSONWHEREID=#{id}</select>該語句被稱為selectPerson,使用一個(gè)int(或Integer)類型的參數(shù),并返回一個(gè)HashMap類型的對(duì)象,其中的鍵是列名,值是列對(duì)應(yīng)的值。
ResultMap配置:<resultMaptype="java.util.HashMap"id="cityResult"> <idproperty="cityCode"column="city_code"/> <resultproperty="cityName"column="city_name"/> <resultproperty="stateCode"column="state_code"/> </resultMap>Select中的屬性當(dāng)有多個(gè)參數(shù)時(shí),可以使用@Param("參數(shù)名")來聲明,例如 publicList<City>select(@Param("name")Stringname,@Param("state")intstate,@Param("city")Citycity);<insertid="insertAuthor"parameterType="domain.blog.Author">insertintoAuthor(id,username,password,email,bio)values(#{id},#{username},#{password},#{email},#{bio})</insert><updateid="updateAuthor"parameterType="domain.blog.Author">updateAuthorsetusername=#{username},password=#{password},email=#{email},bio=#{bio}whereid=#{id}</update><deleteid="deleteAuthor”parameterType="int">deletefromAuthorwhereid=#{id}</delete>insert、update和delete數(shù)據(jù)修改語句insert、update和delete在它們的實(shí)現(xiàn)中非常相似<insertid="insertAuthor"parameterType="domain.blog.Author"flushCache="true"statementType="PREPARED"keyProperty=""useGeneratedKeys=""timeout="20000"><updateid="insertAuthor"parameterType="domain.blog.Author"flushCache="true"statementType="PREPARED"timeout="20000"><deleteid="insertAuthor"parameterType="domain.blog.Author"flushCache="true"statementType="PREPARED"timeout="20000">insert、update和delete的屬性sql該元素可以被用于定義可重用的SQL代碼段,可以包含在其他語句中。如:
<sqlid=”userColumns”>id,username,password</sql>
上述SQL片段可以被包含在其他語句中。如:
<selectid=”selectUsers”parameterType=”int”resultType=”hashmap”>select<includerefid=”userColumns”/>fromsome_tablewhereid=#{id}</select>resultMapresultMap元素是MyBatis中最重要、最強(qiáng)大的元素。解決列名與屬性名稱不匹配的問題:<resultMapid="userResultMap"type="User"><idproperty="id"column="user_id"/><resultproperty="username"column="user_name"/><resultproperty="password"column="hashed_password"/></resultMap>其引用語句使用resultMap屬性即可(注意,我們?nèi)サ袅藃esultType屬性)。例如:
<selectid=”selectUsers”parameterType=”int”resultMap=”userResultMap”>selectuser_id,use
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 未來世界我想象中的家園想象作文13篇范文
- 2025年食品用類似原料項(xiàng)目提案報(bào)告
- 員工離職工作規(guī)范處理承諾書(3篇)
- 2025年煙臺(tái)市煙臺(tái)山醫(yī)院住院醫(yī)師規(guī)范化培訓(xùn)預(yù)招生模擬試卷及答案詳解(名師系列)
- 老年產(chǎn)品細(xì)致設(shè)計(jì)承諾書(5篇)
- 企業(yè)培訓(xùn)資源庫(kù)及學(xué)習(xí)工具
- 山東省德州市校際2024-2025學(xué)年高一下學(xué)期6月聯(lián)考地理試題(解析版)
- 農(nóng)村土地互換合同協(xié)議5篇
- 行業(yè)合同范本及審核指南
- 2025廣西平果市農(nóng)業(yè)機(jī)械化服務(wù)中心城鎮(zhèn)公益性崗位人員招聘1人考前自測(cè)高頻考點(diǎn)模擬試題及答案詳解(必刷)
- 美容護(hù)膚知識(shí)專題課件
- DBJ04T 469-2023 綠色建筑工程施工質(zhì)量驗(yàn)收標(biāo)準(zhǔn)
- 金屬材料與熱處理作業(yè)指導(dǎo)書
- 導(dǎo)管相關(guān)并發(fā)癥的預(yù)防及處理
- 2025年系統(tǒng)維保服務(wù)合同范本:包含半導(dǎo)體設(shè)備維護(hù)保養(yǎng)協(xié)議3篇
- 鐵路信號(hào)基礎(chǔ)繼電器詳解
- 等離子點(diǎn)火系統(tǒng)及暖風(fēng)器系統(tǒng)培訓(xùn)
- 2024年金華市中心醫(yī)院醫(yī)療集團(tuán)(醫(yī)學(xué)中心)招聘筆試真題
- 小學(xué)生無人機(jī)教學(xué)課件
- 新課標(biāo)體育與健康教案集(水平四)
- 混凝土結(jié)構(gòu)設(shè)計(jì)原理(第五版)課后習(xí)題答案
評(píng)論
0/150
提交評(píng)論