




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第7章映射器主要內容
核心配置文件SQL映射文件
級聯查詢7.1MyBatis配置文件概述MyBatis的核心配置文件配置了很多影響MyBatis行為的信息,這些信息通常只會配置在一個文件中,并且不會輕易改動。另外,與Spring框架整合后,MyBatis的核心配置文件信息將配置到Spring的配置文件中。因此,在實際開發中需要編寫或修改MyBatis的核心配置文件的情況不多。7.2映射器概述元素名稱描
述備
注select查詢語句,最常用、最復雜的元素之一可以自定義參數,返回結果集等insert插入語句執行后返回一個整數,代表插入的行數update更新語句執行后返回一個整數,代表更新的行數delete刪除語句執行后返回一個整數,代表刪除的行數sql定義一部分SQL,在多個位置被引用例如,一張表列名,一次定義,可以在多個SQL語句中使用resultMap用來描述從數據庫結果集中來加載對象,是最復雜、最強大的元素提供映射規則7.3<select>元素
在SQL映射文件中<select>元素用于映射SQL的select語句,其示例代碼如下: <!--根據uid查詢一個用戶信息-->
<selectid="selectUserById"parameterType="Integer" resultType="com.po.MyUser"> select*fromuserwhereuid=#{uid} </select>
上述示例代碼中,id的值是唯一標識符,它接收一個Integer類型的參數,返回一個MyUser類型的對象,結果集自動映射到MyUser屬性。屬性名稱描
述id它和Mapper的命名空間組合起來使用,是唯一標識符,供MyBatis調用parameterType表示傳入SQL語句的參數類型的全限定名或別名。是個可選屬性,MyBatis能推斷出具體傳入語句的參數。resultTypeSQL語句執行后返回的類型(全限定名或者別名)。如果是集合類型,返回的是集合元素的類型。返回時可以使用resultType或resultMap之一resultMap它是映射集的引用,與<resultMap>元素一起使用。返回時可以使用resultType或resultMap之一flushCache它的作用是在調用SQL語句后,是否要求MyBatis清空之前查詢本地緩存和二級緩存。默認值為false。如果設置為true,則任何時候只要SQL語句被調用,都將清空本地緩存和二級緩存useCache啟動二級緩存的開關。默認值為true,表示將查詢結果存入二級緩存中timeout用于設置超時參數,單位是秒。超時將拋出異常。fetchSize獲取記錄的總條數設定statementType告訴MyBatis使用哪個JDBC的Statement工作,取值為STATEMENT(Statement)、PREPARED(PreparedStatement)、CALLABLE(CallableStatement)resultSetType這是針對JDBC的ResultSet接口而言,其值可設置為FORWARD_ONLY(只允許向前訪問)、SCROLL_SENSITIVE(雙向滾動,但不及時更新)、SCROLL_INSENSITIVE(雙向滾動,及時更新)7.3.1使用Map接口傳遞多個參數
在實際開發中,查詢SQL語句經常需要多個參數,比如多條件查詢。多個參數傳遞時,<select>元素的parameterType屬性值的類型是什么呢?在MyBatis中允許Map接口通過鍵值對傳遞多個參數。
假設數據操作接口中有個實現查詢陳姓男性用戶信息功能的方法:
publicList<MyUser>selectAllUser(Map<String,Object>param);
此時,傳遞給映射器的是一個Map對象,使用它在SQL中設置對應的參數,對應SQL文件代碼如下:<!--查詢陳姓男性用戶信息-->
<selectid="selectAllUser"resultType="com.po.MyUser"parameterType="map"> select*fromuser whereunamelikeconcat('%',#{u_name},'%') andusex=#{u_sex} </select>
上述SQL文件中參數名u_name和u_sex是Map的key。7.3.2使用JavaBean傳遞多個參數
首先,在ch7應用的src目錄下,創建一個名為com.pojo的包,在包中創建一個POJO類SeletUserParam
其次,將Dao接口中的selectAllUser方法修改為:publicList<MyUser>selectAllUser(SeletUserParamparam);
再次,將com.mybatis包中的SQL映射文件UserMapper.xml中的“查詢陳姓男性用戶信息”代碼修改為:<selectid="selectAllUser"resultType="com.po.MyUser"parameterType="com.pojo.SeletUserParam"> select*fromuser whereunamelikeconcat('%',#{u_name},'%') andusex=#{u_sex}</select>
最后,將com.controller包中UserController的“查詢多個用戶”代碼片段修改。7.4<insert>元素<insert>元素用于映射插入語句,MyBatis執行完一條插入語句后,將返回一個整數表示其影響的行數。它的屬性與<select>元素的屬性大部分相同,在本節講解它的幾個特有屬性。具體如下:
keyProperty:該屬性的作用是將插入或更新操作時的返回值賦值給PO類的某個屬性,通常會設置為主鍵對應的屬性。如果是聯合主鍵,可以在多個值之間用逗號隔開。
keyColumn:該屬性用于設置第幾列是主鍵,當主鍵列不是表中的第一列時需要設置。如果是聯合主鍵時,可以在多個值之間用逗號隔開。
useGeneratedKeys:該屬性將使MyBatis使用JDBC的getGeneratedKeys()方法獲取由數據庫內部生產的主鍵,如MySQL、SQLServer等自動遞增的字段,其默認值為false。7.4.1主鍵(自動遞增)回填MySQL、SQLServer等數據庫的表格可以采用自動遞增的字段作為主鍵。有時可能需要使用這個剛剛產生的主鍵,用以關聯其他業務。<!--添加一個用戶,成功后將主鍵值回填給uid(po類的屬性)--> <insertid="addUser"parameterType="com.po.MyUser" keyProperty="uid"useGeneratedKeys="true"> insertintouser(uname,usex)values(#{uname},#{usex}) </insert>7.4.2自定義主鍵
如果實際工程中使用的數據庫不支持主鍵自動遞增(如Oracle),或者取消了主鍵自動遞增的規則時,可以使用MyBatis的<selectKey>元素來自定義生成主鍵。<insertid="insertUser"parameterType="com.po.MyUser"> <!--先使用selectKey元素定義主鍵,然后再定義SQL語句--> <selectKeykeyProperty="uid"resultType="Integer"order="BEFORE"> selectif(max(uid)isnull,1,max(uid)+1)asnewUidfromuser </selectKey> insertintouser(uid,uname,usex)values(#{uid},#{uname},#{usex})</insert>7.5<update>與<delete>元素<update>和<delete>元素比較簡單,它們的屬性和<insert>元素、<select>元素的屬性差不多,執行后也返回一個整數,表示影響了數據庫的記錄行數。
<!--修改一個用戶--><updateid="updateUser"parameterType="com.po.MyUser"> updateusersetuname=#{uname},usex=#{usex}whereuid=#{uid}</update>
<!--刪除一個用戶--><deleteid="deleteUser"parameterType="Integer"> deletefromuserwhereuid=#{uid}</delete>7.6<sql>元素<sql>元素的作用在于可以定義SQL語句的一部分(代碼片段),方便后面的SQL語句引用它,比如反復使用的列名。<sqlid="comColumns">uid,uname,usex</sql><selectid="selectUser"resultType="com.po.MyUser"> select<includerefid="comColumns"/>fromuser</select>7.7<resultMap>元素<resultMap>元素表示結果映射集,是MyBatis中最重要也是最強大的元素。主要用來定義映射規則、級聯的更新以及定義類型轉化器等。7.7.1<resultMap>元素結構<resultMaptype=""id=""><constructor><!--類在實例化時,用來注入結果到構造方法--> <idArg/><!--ID參數,結果為ID--> <arg/><!--注入到構造方法的一個普通結果--></constructor><id/><!--用于表示哪個列是主鍵--><result/><!--注入到字段或JavaBean屬性的普通結果--><associationproperty=""/><!--用于一對一關聯--><collectionproperty=""/><!--用于一對多、多對多關聯--><discriminatorjavaType=""><!--使用結果值來決定使用哪個結果映射--><casevalue=""/> <!--基于某些值的結果映射--></discriminator></resultMap><resultMap>元素的type屬性表示需要的POJO,id屬性是resultMap的唯一標識。子元素<constructor>用于配置構造方法(當POJO未定義無參數的構造方法時使用)。子元素<id>用于表示哪個列是主鍵。子元素<result>用于表示POJO和數據表普通列的映射關系。子元素<association>、<collection>和<discriminator>是用在級聯的情況下。關于級聯的問題比較復雜,將在7.8節級聯那里學習。7.7.2使用Map存儲結果集
任何select語句可以使用Map存儲結果,示例代碼如下: <!--查詢所有用戶信息存到Map中--> <selectid="selectAllUserMap"resultType="map"> select*fromuser </select>7.7.3使用POJO存儲結果集
<!--使用自定義結果集類型--> <resultMaptype="com.pojo.MapUser"id="myResult"> <!--property是com.pojo.MapUser類中的屬性--> <!--column是查詢結果的列名,可以來自不同的表--> <idproperty="m_uid"column="uid"/> <resultproperty="m_uname"column="uname"/> <resultproperty="m_usex"column="usex"/> </resultMap>
<!--使用自定義結果集類型查詢所有用戶--> <selectid="selectResultMap"resultMap="myResult"> select*fromuser </select>7.8級聯關系
如果表A中有一個外鍵引用了表B的主鍵,A表就是子表,B表就是父表。當查詢表A的數據時,通過表A的外鍵,也將表B的相關記錄返回,這就是級聯查詢。例如,查詢一個人的信息時,同時根據外鍵(身份證號)也將他的身份證信息返回。7.8.1一對一
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- DB31/T 303-2014肉雞場生產技術規范
- DB31/T 244-2011優良種豬登記管理規程
- DB31/T 1415-2023既有多層住宅加裝電梯使用管理規范
- DB31/T 1362-2022純電動公交客車維護技術要求
- DB31/T 1353-2022數字景區建設技術規范
- DB31/T 1243-2020互花米草生態控制技術規范
- 跨境電商股權眾籌投資合同范本
- 創業投資公司股權回購及轉讓專項合同
- 住宅購買合同中欺詐行為賠償標準合同
- 融資租賃公司股權轉讓及設備租賃合同
- 2023年江蘇省生物初中會考試卷
- 偏微分方程的數值解法課后習題答案
- 保密管理-保密教育培訓簽到簿
- 手術室剖宮產護理查房-課件
- 消防檔案范本(企業類)
- 隧道工程隧道洞口臨建施工方案
- 心理咨詢的面談技術
- (word完整版)污水處理廠安全評價報告
- DB50∕T 867.6-2019 安全生產技術規范 第6部分:黑色金屬冶煉企業
- 新產品開發流程課件
- 高中語文部編版選擇性必修下冊第四單元 單元學習導航 課件 (8張PPT)
評論
0/150
提交評論