第2章 MyBatis配置詳解與API介紹(理論)_第1頁
第2章 MyBatis配置詳解與API介紹(理論)_第2頁
第2章 MyBatis配置詳解與API介紹(理論)_第3頁
第2章 MyBatis配置詳解與API介紹(理論)_第4頁
第2章 MyBatis配置詳解與API介紹(理論)_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第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ù)庫。接口層一旦接收到調(diào)用請求就會(huì)調(diào)用數(shù)據(jù)處理層來完成具體的數(shù)據(jù)處理。數(shù)據(jù)處理層:負(fù)責(zé)具體的SQL查找、SQL解析、SQL執(zhí)行和執(zhí)行結(jié)果映射處理等。其主要的目的是根據(jù)調(diào)用的請求完成一次數(shù)據(jù)庫操作?;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>

//對在此配置文件下的所有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ù)庫回應(yī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ù)庫類型與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ù)字或長整型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)境,測試環(huán)境等)。這便于將SQL映射應(yīng)用于多種數(shù)據(jù)庫之中。<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:該配置直接簡單地使用了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連接對象的資源。內(nèi)建數(shù)據(jù)源類型(即type=”???”)有以下三種:

(1)UNPOOLED//表示不用緩存(2)POOLED//表示已經(jīng)緩存(3)JNDI:讀取其他容器的連接對象(java命名目錄接口)mappers既然MyBatis的行為已經(jīng)由上述元素配置完畢,那么我們現(xiàn)在要定義SQL映射語句。這些語句簡單闡述了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ù)庫結(jié)果集中加載對象。sql:可重用的SQL塊,也可以被其他語句引用。insert:映射插入語句。update:映射更新語句。delete:映射刪除語句。select:映射查詢語句。select查詢語句是使用MyBatis時(shí)最常用的元素之一。當(dāng)從數(shù)據(jù)庫中取出數(shù)據(jù)時(shí),會(huì)發(fā)現(xiàn)將數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫中是很有價(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類型的對象,其中的鍵是列名,值是列對應(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等.壓縮文件請下載最新的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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論