MyBatsi-Mapper映射文件

Mapper映射文件

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

mapper文件與mapper 接口的配置說明

<mapper namespace="vallue " ></mapper>java

  • 針對Configuration中不一樣mapper映射器,這裏的名稱空間定義不一樣:

當使用相對於類路徑的資源引用和徹底限定資源定位符(URL)映射器時,namespace=」valeu」 value的值能夠任意指定,而且mapper映射文件的位置能夠任意指定.sql

<mapper namespace="nnn" ></mapper>數據庫

  • 當使用使用映射器接口實現類的徹底限定類名和包內的映射器接口實現所有註冊爲映射器時, namespace=」valeu」 value的值必須指定爲mapper接口類型的權限名稱且mapper映射文件必須和mapper接口在一個包中

<mapper namespace="com.lifeibai.dao.UserDao" ></mapper>緩存

 

 

元素說明

<mapper namespace="vallue " > 這裏是mapper的元素</mapper>mybatis

第一部分insert update delete 

  • insert – 映射插入語句
  • update – 映射更新語句
  • delete – 映射刪除語句

 

 

主鍵生成策略

 

 

 

第二部分select 

 

 

第三部分sql 與字符串拼接

 

 

Sql

<!-- 自定義條件查詢用戶列表 -->app

<sql id="sometable">性能

  ${prefix}Tablespa

</sql>3d

 

<sql id="someinclude">對象

  from

    <include refid="${include_target}"/>

</sql>

 

<select id="select" resultType="map">

  select

    field1, field2, field3

  <include refid="someinclude">

    <property name="prefix" value="Some"/>

    <property name="include_target" value="sometable"/>

  </include>

</select>

字符串拼接替換#{}和${}

<!-- 自定義條件查詢用戶列表 -->

    <select id="findUserByUsername" parameterType="java.lang.String"

           resultType="cn.itcast.mybatis.po.User">

       select * from user where username like '%${value}%'

    </select>

 

 

#{}和${}

#{}表示一個佔位符號,經過#{}能夠實現preparedStatement向佔位符中設置值,自動進行java類型和jdbc類型轉換,#{}能夠有效防止sql注入。 #{}能夠接收簡單類型值或pojo屬性值。 若是parameterType傳輸單個簡單類型值,#{}括號中能夠是value或其它名稱。

 

${}表示拼接sql串,經過${}能夠將parameterType 傳入的內容拼接在sql中且不進行jdbc類型轉換, ${}能夠接收簡單類型值或pojo屬性值,若是parameterType傳輸單個簡單類型值,${}括號中只能是value。

 

第四部分resultMap 

 

 

resultMap的解決問題:

1)      po類字段與數據表中的列名不一致

2)      一對一關係

3)      一對多關係

4)      多對多

5)      根據條件封裝不一樣結果

ResultMap的子元素

  • constructor - 用於在實例化類時,注入結果到構造方法中
    • idArg - ID 參數;標記出做爲 ID 的結果能夠幫助提升總體性能
    • arg - 將被注入到構造方法的一個普通結果
  • id – 一個 ID 結果;標記出做爲 ID 的結果能夠幫助提升總體性能
  • result – 注入到字段或 JavaBean 屬性的普通結果
  • association – 一個複雜類型的關聯;許多結果將包裝成這種類型
    • 嵌套結果映射 – 關聯能夠指定爲一個 resultMap 元素,或者引用一個
  • collection – 一個複雜類型的集合
    • 嵌套結果映射 – 集合能夠指定爲一個 resultMap 元素,或者引用一個
  • discriminator – 使用結果值來決定使用哪一個 resultMap
    • case – 基於某些值的結果映射
      • 嵌套結果映射 – 一個 case 也是一個映射它自己的結果,所以能夠包含不少相 同的元素,或者它能夠參照一個外部的 resultMap。
id&result/constructor

 

 

 

一對一association

 

 

 

一對多collection

 

 

鑑別器discriminator 

 

 

<resultMap id="vehicleResult" type="Vehicle">

  <id property="id" column="id" />

  <result property="vin" column="vin"/>

  <result property="year" column="year"/>

  <result property="make" column="make"/>

  <result property="model" column="model"/>

  <result property="color" column="color"/>

  <discriminator javaType="int" column="vehicle_type">

    <case value="1" resultType="carResult">

      <result property="doorCount" column="door_count" />

    </case>

    <case value="2" resultType="truckResult">

      <result property="boxSize" column="box_size" />

      <result property="extendedCab" column="extended_cab" />

    </case>

    <case value="3" resultType="vanResult">

      <result property="powerSlidingDoor" column="power_sliding_door" />

    </case>

    <case value="4" resultType="suvResult">

      <result property="allWheelDrive" column="all_wheel_drive" />

    </case>

  </discriminator>

</resultMap>

第五部分cache 

 

 

第六部分 動態sql

  • if
  • choose (when, otherwise)
  • trim (where, set)
  • foreach

if

作條件判斷的,若是咱們不使用這個標籤,咱們確定會在代碼中判斷如查詢的元素是否爲空,傳入的元素是否爲空,而這時咱們直接使用這個標籤,就減小了代碼的書寫

<!-- 傳遞pojo綜合查詢用戶信息 -->

    <select id="findUserList" parameterType="user" resultType="user">

       select * from user

       where 1=1

       <if test="id!=null">

       and id=#{id}

       </if>

       <if test="username!=null and username!=''">

       and username like '%${username}%'

concat(‘%’,#{username},’%’)

       </if>

    </select>

choose (when, otherwise)

對於這類標籤,就是採用多個選項中找一個,就像單項選擇題,可是你不會都選擇,只會從中選擇1個來做爲條件。就有點相似於switch。。case。

<select id="findActiveBlogLike" resultType="Blog">

  SELECT * FROM BLOG WHERE state = ‘ACTIVE’

  <choose>

    <when test="title != null">

      AND title like #{title}

    </when>

    <when test="author != null and author.name != null">

      AND author_name like #{author.name}

    </when>

    <otherwise>

      AND featured = 1

    </otherwise>

  </choose>

</select>

trim (where, set)

若是使用第一個if語句的sql有and的話,就會發現沒有寫where標籤就會報錯。而這類標籤一般是搭配條件標籤使用的。

<select id="findUserList" parameterType="user" resultType="user">

       select * from user

       <where>

         <if test="id!=null and id!=''">

           and id=#{id}

         </if>

         <if test="username!=null and username!=''">

           and username like '%${username}%'

         </if>

       </where>

</select>

 

foreach

相關文章
相關標籤/搜索