詳解mybatis映射配置文件

一  mybatis 映射文件結構html


      mybatis映射配置文件存在以下頂級元素,且這些元素按照以下順序被定義。sql

  • cache – 給定命名空間的緩存配置。
  • cache-ref – 其餘命名空間緩存配置的引用。  
  • resultMap – 是最複雜也是最強大的元素,用來描述如何從數據庫結果集中來加載對象。
  • parameterMap – 已廢棄!老式風格的參數映射。內聯參數是首選,這個元素可能在未來被移除,這裏不會記錄。
  • sql – 可被其餘語句引用的可重用語句塊。
  • insert – 映射插入語句
  • update – 映射更新語句
  • delete – 映射刪除語句
  • select – 映射查詢語句

二  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系列文章


     淺談JavaWeb架構演變

     淺談mybatis如何半自動化解耦

     詳解mybatis配置文件

四  參考文獻


   【01】http://www.mybatis.org/mybatis-3/zh/configuration.html#

五 版權區


  •    轉載博客,必須註明博客出處
  •    博主網址:http://www.cnblogs.com/wangjiming/
  •    如您有新想法,歡迎提出,郵箱:2098469527@qq.com
相關文章
相關標籤/搜索