mybatis笔记四

记录下动态sql的常用标签:

1.where

一般用作数据操作添加的条件

例子:

 <select id="selectByRoleId" resultMap="resource">
        select * from resource 
        <where>
            role_id = #{roleId}
        </where>

2.if

一般用做查询,修改或者删除数据时的一些拼接条件。

test字段为判断条件

例子:

<select id="findCountByContditon" resultType="int" parameterType="com.example.demo.po.User">
        select
        coalesce(count(id),0)
        from user
        <where>
            <if test="name != null and name != ''">
                name like  #{name}
            </if>
            <if test="createTime != null">
                and create_time  &lt; #{createTime}
            </if>
        </where>
    </select>

上面的sql有个问题,就是如果name条件不成立,creatTime条件成立,那么sql会报错。一般如果在where条件下有多个if判断,在if前加入where 1=1。

<select id="findCountByContditon" resultType="int" parameterType="com.example.demo.po.User">
        select
        coalesce(count(id),0)
        from user
        <where>
            1=1
            <if test="name != null and name != ''">
                and name like  #{name}
            </if>
            <if test="createTime != null">
                and create_time  &lt; #{createTime}
            </if>
        </where>
    </select>

3.foreach

一般用来批量添加数据

collection字段一般为list、array、map类型,值为传入的参数

separator字段值为分隔符,即以什么来分割

item 字段为循环时每个元素的别名

index 字段值为每次循环时的下标

open 字段值为前缀值

close 字段值为后缀值

例子:

<insert id="saveAll" parameterType="java.util.List">
        insert into user(name,role_id,password)
        values
        <foreach collection="users" separator="," item="user" index="index" >
            ( #{user.name}, #{user.roleId}, #{user.password})
        </foreach>
    </insert>

4.set

一般用在修改数据,与if经常一起出现

<update id="updateByCondition">
        update user
        <set>
            <if test="name != null and name != ''">
                name = #{name},
            </if>
            <if test="password != null and password != ''">
                password = #{password},
            </if>
            <if test="createTime != null">
                create_time = @{createTime}
            </if>
        </set>
        where id = #{id}
    </update>

5.include

一般是将常用的字段抽出来作为常量

<sql id="user_columns">
        id, name,role_id,password,create_time,update_time
    </sql>

<select id="selectById" resultMap="user">
        select 
         <include refid="user_columns"/>
         from user where id = #{id}
    </select>

6.trim

prefix字段前缀添加值

suffix字段后缀添加值

prefixOverrides字段删除前缀值

suffixOverrides字段删除后缀值

<update id="updateByCondition">
        update user  set
        <trim suffixOverrides=",">
            
                <if test="name != null and name != ''">
                    name = #{name},
                </if>
                <if test="password != null and password != ''">
                    password = #{password},
                </if>
                <if test="createTime != null">
                    create_time = @{createTime},
                </if>
            </trim>
        where id = #{id}
    </update>

如果password为空,其他不为空。sql变为

update user set name = #{name}, create_time = #{createTime} where id = #{id }

 

有兴趣学习的可以关注公众号阅读相关:码上行走

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章