详解mybatis映射配置文件
一? mybatis 映射文件結構
? ? ??mybatis映射配置文件存在如下頂級元素,且這些元素按照如下順序被定義。
- cache?– 給定命名空間的緩存配置。
- cache-ref?– 其他命名空間緩存配置的引用。??
- resultMap?– 是最復雜也是最強大的元素,用來描述如何從數據庫結果集中來加載對象。
- parameterMap?– 已廢棄!老式風格的參數映射。內聯參數是首選,這個元素可能在將來被移除,這里不會記錄。
- sql?– 可被其他語句引用的可重用語句塊。
- insert?– 映射插入語句
- update?– 映射更新語句
- delete?– 映射刪除語句
- select?– 映射查詢語句
二? mybatis映射配置文件頂級元素分析
?(一)CRUD
?在映射配置文件中,基本的CRUD操作定義如下
<!--select by id--><select id="getUserInfoById" resultType="UserInfo">SELECT user_name ,user_addr FROM user_info WHERE user_id=#{user_id}</select><!--insert--><insert id="addUserInfo" useGeneratedKeys="true">INSERT INTO user_info(user_name,user_addr)VALUES(#{user_name},#{user_addr})</insert><!--update--><update id="updateUserInfo">UPDATE user_info set user_name=#{user_name} WHERE user_id=#{user_id}</update><!--delete--><delete id="delUserInfoById">DELETE FROM user_info WHERE user_id=#{user_id}</delete>1.#{}表示占位符,相當于?,#{}需要經過預處理,能防止SQL漏洞注入,當然,也可以使用${},只是不能防止漏洞注入。
2.select語句有很多屬性
id -- 唯一標識select語句
parameterType --參數類型
paramerterMap -- 參數映射
resultType -- 返回類型
resultMap -- 返回類型映射
flushCache -- 當語句被調用時,是否清除本地緩存或二級緩存
useCache -- 是否使用二級緩存
timeout --?在拋出異常之前,驅動程序等待數據庫返回請求結果的秒數
fetchSize -- 每次批量返回的結果行數
statementType -- 使用STATEMENT,PREPARED 或 CALLABLE 的一個
resultSetType -- 使用FORWARD_ONLY,SCROLL_SENSITIVE 或 SCROLL_INSENSITIVE 中的一個
<selectid="selectPerson"parameterType="int"parameterMap="deprecated"resultType="hashmap"resultMap="personResultMap"flushCache="false"useCache="true"timeout="10000"fetchSize="256"statementType="PREPARED"resultSetType="FORWARD_ONLY">(二)resultType
resultType可表示返回基本類型,也可表示返回復雜對象類型(包括自定義類型)
1.返回基本類型
<select id="listUserInfo" resultType="int">SELECT userId FROM user_info </select>2.返回復雜類型
<select id="getUserInfoById" resultType="UserInfo">SELECT user_name ,user_addr FROM user_info WHERE user_id=#{user_id} </select>(三)resultMap
resultMap主要解決TABLE字段與JavaBean映射不匹配問題。
舉個例子:
定義一個JavaBean
public class UserInfo {String userName;String addr;//setter和getter }SQL語句:
DROP TABLE IF EXISTS `user_info`; CREATE TABLE `user_info` (`user_id` int(5) NOT NULL AUTO_INCREMENT,`user_name` varchar(50) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,`user_addr` varchar(100) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,PRIMARY KEY (`user_id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 16 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact;SET FOREIGN_KEY_CHECKS = 1;通過如上發現,user_name與userName不匹配,user_addr與addr不匹配。
通過resultMap就能很好地解決該問題
<resultMap id="userInfoMap" type="UserInfo"><result property="userName" column="user_name"/><result property="addr" column="user_addr"/> </resultMap>property表示JavaBean,column表示table字段
(四)SQL
sql語句,定義可重用語句。
<sql id="userColumns"> ${alias}.id,${alias}.username,${alias}.addr </sql>引定義好的sql
<select id="listUserInfo" resultMap="userInfoMap">SELECT<include refid="userColumns"><property name="alias" value="t1"/></include>FROM user_info t1</select>(五)cache &cache-ref
cache和cache-ref比較重要,放在下篇文章講解。
三? ?Mybatis系列文章
? ? ?淺談JavaWeb架構演變
? ? ?淺談mybatis如何半自動化解耦
? ? ?詳解mybatis配置文件
四? 參考文獻
? ?【01】http://www.mybatis.org/mybatis-3/zh/configuration.html#
五 版權區
- ? ?轉載博客,必須注明博客出處
- ? ?博主網址:http://www.cnblogs.com/wangjiming/
- ? ?如您有新想法,歡迎提出,郵箱:2098469527@qq.com
?
轉載于:https://www.cnblogs.com/wangjiming/p/10399333.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的详解mybatis映射配置文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 凯撒密码加密算法python_想偷WiF
- 下一篇: Razor Generator