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>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值