版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第2章
MyBatis配置詳解與API介紹本章內(nèi)容Mybatis的結構與原理Mybatis配置文件詳解SQL映射文件詳解MybatisAPI介紹本章目標理解mybatis的運行流程掌握mybatis的配置掌握mybatis的映射文件理解mybatis中的重要的類Mybatis的結構與原理MyBatis執(zhí)行總體流程:(1)加載配置(2)SQL解析(3)SQL執(zhí)行(4)結果映射MyBatis功能架構API接口層:提供給外部使用的接口API,開發(fā)人員通過這些本地API來操縱數(shù)據(jù)庫。接口層一旦接收到調(diào)用請求就會調(diào)用數(shù)據(jù)處理層來完成具體的數(shù)據(jù)處理。數(shù)據(jù)處理層:負責具體的SQL查找、SQL解析、SQL執(zhí)行和執(zhí)行結果映射處理等。其主要的目的是根據(jù)調(diào)用的請求完成一次數(shù)據(jù)庫操作?;A支撐層:負責最基礎的功能支撐,包括連接管理、事務管理、配置加載和緩存處理,這些都是共用的資源,將他們抽取出來作為最基礎的組件。為上層的數(shù)據(jù)處理層提供最基礎的支持。MyBatis配置文件配置文件的結構配置文件的元素properties該元素是外部化的、可替代的屬性,這些屬性也可以配置在典型的Java屬性配置文件中,或者通過properties元素的子元素來傳遞。例如:
<propertiesresource="org/mybatis/example/perties"><propertyname="username"value="dev_user"/><propertyname="password"value="F2Fa3!33TYyg"/></properties>其中的屬性值就可以在整個配置文件中使用,使用可替換的屬性來實現(xiàn)動態(tài)配置。例如:
<dataSourcetype="POOLED"><propertyname="driver"value="${driver}"/><propertyname="url"value="${url}"/><propertyname="username"value="${username}"/><propertyname="password"value="${password}"/></dataSource>Settings該元素是極其重要的參數(shù)設置,它們會修改MyBatis在運行時的行為方式。
<settings>
//對在此配置文件下的所有cache進行全局性開/關設置,默認true<settingname="cacheEnabled"value="true"/>//全局性設置懶加載。如果設為‘false’,則所有相關聯(lián)的都會被初始化加載,默認true<settingname="lazyLoadingEnabled"value="true"/>//允許和不允許單條語句返回多個數(shù)據(jù)集(取決于驅動需求)默認true<settingname="multipleResultSetsEnabled"value="true"/>//使用列標簽代替列名稱。默認true<settingname="useColumnLabel"value="true"/>//允許JDBC生成主鍵。需要驅動器支持。如果設為了true,這個設置將強制使用被生成的主鍵,//有一些驅動器不兼容不過仍然可以執(zhí)行,默認false<settingname="useGeneratedKeys"value="false"/>//是否需要POJO啟動Java字節(jié)碼增強功能,可以提升getter/setter的調(diào)用效能避免Java反射所帶來的性能開銷<settingname="enhancementEnabled"value="false"/>//配置和設定執(zhí)行器,SIMPLE執(zhí)行器執(zhí)行其它語句。REUSE執(zhí)行器可能重復使用preparedstatements語句,BATCH執(zhí)行器可以重復執(zhí)行語句和批量更新。默認為simple<settingname="defaultExecutorType"value="SIMPLE"/>//設置一個時限,以決定讓驅動器等待數(shù)據(jù)庫回應的多長時間為超時<settingname="defaultStatementTimeout"value="25000"/></settings> typeAliases類型別名即為Java類型命名一個短的名稱。它僅同XML配置有關,只用于減少類完全限定名的多余部分。<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>:每當MyBatis設置參數(shù)到PreparedStatement或者從ResultSet結果集中取得值時,就會使用TypeHandler來處理數(shù)據(jù)庫類型與java類型之間轉換。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ù)字或單精度浮點型DoubleTypeHandler java.lang.Double,double 任何兼容的數(shù)字或雙精度浮點型BigDecimalTypeHandler java.math.BigDecimal 任何兼容的數(shù)字或十進制小數(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映射應用于多種數(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中,有兩種事務管理器類型(即type=”[JDBC|MANAGED]”)(1)JDBC:該配置直接簡單地使用了JDBC的提交和回滾設置。它依賴于從數(shù)據(jù)源得到的連接來管理事務范圍。(2)MANAGED:該配置幾乎無用。它從來不提交或回滾一個連接,且它會讓容器來管理事務的整個生命周期(如Spring或JEE應用服務器的上下文)。默認情況下,它會關閉連接。然而一些容器并不希望這樣,因此,如果需要從連接中停止它,則需要將closeConnection屬性設置為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要從哪里尋找映射文件,其余的細節(jié)便在每個SQL映射文件中。<mappers><mapperresource="org/mybatis/builder/AuthorMapper.xml"/><mapperresource="org/mybatis/builder/BlogMapper.xml"/><mapperresource="org/mybatis/builder/PostMapper.xml"/></mappers>SQL映射的XML文件SQL映射文件包括以下幾個很少的頂級元素(按照它們應該被定義的順序排序):cache:配置給定命名空間的緩存。cache-ref:從其他命名空間引用緩存配置。resultMap:最復雜,也是最有力量的元素,用于描述如何從數(shù)據(jù)庫結果集中加載對象。sql:可重用的SQL塊,也可以被其他語句引用。insert:映射插入語句。update:映射更新語句。delete:映射刪除語句。select:映射查詢語句。select查詢語句是使用MyBatis時最常用的元素之一。當從數(shù)據(jù)庫中取出數(shù)據(jù)時,會發(fā)現(xiàn)將數(shù)據(jù)存儲在數(shù)據(jù)庫中是很有價值的,所以許多應用程序的查詢操作相較更改數(shù)據(jù)操作更多。<selectid=”selectPerson”parameterType=”int”resultType=”hashmap”>//<resultMap>節(jié)點配置的idSELECT*FROMPERSONWHEREID=#{id}</select>該語句被稱為selectPerson,使用一個int(或Integer)類型的參數(shù),并返回一個HashMap類型的對象,其中的鍵是列名,值是列對應的值。
ResultMap配置:<resultMaptype="java.util.HashMap"id="cityResult"> <idproperty="cityCode"column="city_code"/> <resultproperty="cityName"column="city_name"/> <resultproperty="stateCode"column="state_code"/> </resultMap>Select中的屬性當有多個參數(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在它們的實現(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中最重要、最強大的元素。解決列名與屬性名稱不匹配的問題:<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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒園籃球培訓
- 思科交換機培訓
- (基礎卷)第一單元 圓和扇形(單元測試)數(shù)學六年級上冊單元速記巧練系列(冀教版)教師版
- 河北省唐山市灤州市2024-2025學年七年級上學期11月份期中考試生物試題(無答案)
- T-YNZYC 0085-2023 綠色藥材 云黃連產(chǎn)地加工規(guī)程
- T-TSSP 029-2023 鮮筍漿(粉)加工技術規(guī)程
- 河北省邯鄲市部分校2024-2025學年高三上學期第二次聯(lián)考生物試題 含解析
- 河北省邢臺市邢襄聯(lián)盟2024-2025學年高三上學期10月份期中聯(lián)考數(shù)學試題 含解析
- Windows Server網(wǎng)絡管理項目教程(Windows Server 2022)(微課版)課件項目2 活動目錄的配置與管理
- 浙江大學《現(xiàn)代漢語語法修辭》在線作業(yè)及答案
- 浙江省蒼南縣2023-2024學年七年級上學期期中語文試題(含答案)
- 外研版(2024新版)七年級上冊英語Unit 3 Family ties大單元教學設計
- 2024廣東佛山市三水市國睿公司綠色工業(yè)服務項目技術人員招聘3人(高頻重點提升專題訓練)共500題附帶答案詳解
- 魯控環(huán)??萍加邢薰菊衅腹P試題庫2024
- 魯交安A、B、C證題庫
- 城市供暖系統(tǒng)維護保養(yǎng)指南
- 特種設備之壓力管道監(jiān)管要求
- 2024年深圳市優(yōu)才人力資源有限公司招考聘用聘員42人(派遣至園山街道)(高頻重點復習提升訓練)共500題附帶答案詳解
- 部編版六年級語文上冊第七單元思維導圖、各課知識點詳細
- 鞋業(yè)委托研發(fā)合同范本
- 二年級體育說課稿《單腳起跳 雙腳落地 》
評論
0/150
提交評論