MyBatis中的xml文件部分標籤使用

1:parameterType、resultType

無非就是對象,map,其他類型

<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
select id, supplier_id, member_id, province_code, province, city_code, city, district_code
from member_address
where id = #{id,jdbcType=INTEGER}
</select>
2:#{}和${}區別
  1. 將傳入的數據都當成一個字符串,會對自動傳入的數據加一個雙引號。如:order by #user_id#,如果傳入的值是111,那麼解析成sql時的值爲order by “111”, 如果傳入的值是id,則解析成的sql爲order by “id”.
  2. sqlorderby user_id$,如果傳入的值是111,那麼解析成sql時的值爲order by user_id, 如果傳入的值是id,則解析成的sql爲order by id.
  3. 方式能夠很大程度防止sql注入。 
  4. $方式無法防止Sql注入。
  5. $方式一般用於傳入數據庫對象,例如傳入表名. 
  6. 一般能用#的就別用.MyBatis使orderby 而不是#

    <if test="is_default != null">
        and is_default = #{is_default}
    </if>
    <if test="name!= null and name!= ''">
        and namelike '${name}%'
    </if>
    
3:轉義字符

在xml的sql語句中,不能直接用大於號、小於號要用轉義字符

轉義字符 符號 解釋
&lt; < 小於號
&gt; > 大於號
&amp; &
&apos; 單引號
&quot ; 雙引號

例如:

   <if test="end_time != null and end_time != ''">
        and created_at >= #{created_at}
    </if>

4:choose 元素

MyBatis 提供了 choose 元素。if標籤是與(and)的關係,而 choose 是或(or)的關係,choose (when,otherwize) ,相當於java 語言中的 switch ,與 jstl 中 的 choose 很類似。

 <select id="selectLimitProductByActivityId" parameterType="java.util.Map" resultType="java.lang.Long" >
  SELECT
    <choose>
        <when test="visitSource != null and visitSource==1">
            product_outer_id
        </when>
        <otherwise>
            product_id
        </otherwise>
    </choose>
FROM
    core_coupon
<where>
    <if test="supplier_id != null">
        AND supplier_id = #{supplier_id}
    </if>
    <if test="activity_id != null">
        AND activitie_id = #{activity_id}
    </if>
</where>

5:trim 標籤

<trim prefix="" suffix="" suffixOverrides="" prefixOverrides=""></trim>

prefix:在trim標籤內sql語句加上前綴。
suffix:在trim標籤內sql語句加上後綴。
suffixOverrides:指定去除多餘的後綴內容,如:suffixOverrides=”,”,去除trim標籤內sql語句多餘的後綴”,”。
prefixOverrides:指定去除多餘的前綴內容

 <update id="updateByParams" parameterType="java.util.Map" >
update core_member_group
<trim prefix="set"  suffixOverrides="," >

<if test="operator_id != null ">
  operator_id = #{operator_id} ,
</if>
<if test="user_num != null ">
  user_num = #{user_num} ,
</if>

<if test="group_name != null and group_name != ''">
  group_name = #{group_name} ,
</if>
<if test="query != null and query != ''">
  query = #{query} ,
</if>

</trim>
where group_id = #{group_id} and supplier_id = #{supplier_id}
and operator_id = #{operator_id}
and is_delete = 0
</update>

6:foreach 標籤

例如where id in (1,2,3,4)必須放到數組裏面,順便提一下如果id的數組特別大的話,儘量不要用where in,in的返回是有上線的

 <select id="selectListByParams" parameterType="java.util.Map" 
            resultType="com.sdc.common.address.model.CoreMemberAddress">
select id, supplier_id, member_id, province_code, province, city_code, city
from core_member_address 
<where>
    <if test="id != null">
        and id = #{id}
    </if>
    <if test="member_ids != null and member_ids.size()>0">
        and member_id in
        <foreach item="item" index="index" collection="member_ids" open="("
                 separator="," close=")">
            #{item}
        </foreach>
    </if>
</where>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章