美文网首页
MyBatis中的xml文件部分标签使用

MyBatis中的xml文件部分标签使用

作者: fengyongge | 来源:发表于2017-08-08 15:54 被阅读1456次
    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. $将传入的数据直接显示生成在sql中。如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id.
    3. 方式能够很大程度防止sql注入。
    4. $方式无法防止Sql注入。
    5. $方式一般用于传入数据库对象,例如传入表名.
    6. 一般能用#的就别用$.
      MyBatis排序时使用order by 动态参数时需要注意,用$而不是#
        <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>
    

    </select>

    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>

    相关文章

      网友评论

          本文标题:MyBatis中的xml文件部分标签使用

          本文链接:https://www.haomeiwen.com/subject/nfptrxtx.html