一 mybatis 映射文件結構html
mybatis映射配置文件存在以下頂級元素,且這些元素按照以下順序被定義。sql
二 mybatis映射配置文件頂級元素分析數據庫
(一)CRUD緩存
在映射配置文件中,基本的CRUD操做定義以下mybatis
<!--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語句有不少屬性fetch
id -- 惟一標識select語句spa
parameterType --參數類型code
paramerterMap -- 參數映射htm
resultType -- 返回類型
resultMap -- 返回類型映射
flushCache -- 當語句被調用時,是否清除本地緩存或二級緩存
useCache -- 是否使用二級緩存
timeout -- 在拋出異常以前,驅動程序等待數據庫返回請求結果的秒數
fetchSize -- 每次批量返回的結果行數
statementType -- 使用STATEMENT,PREPARED 或 CALLABLE 的一個
resultSetType -- 使用FORWARD_ONLY,SCROLL_SENSITIVE 或 SCROLL_INSENSITIVE 中的一個
<select id="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系列文章
四 參考文獻
【01】http://www.mybatis.org/mybatis-3/zh/configuration.html#
五 版權區