mybatis的动态sql

动态sql:<where>

动态sql:<if>

动态sql:<sql>

动态sql:<trim>

create table student(
   id int(11) primary key,
   sname varhcar(11), 
   address varhcar(20),
   sex varchar(5) 
);

 

动态sql:<set>

如果我们需要进行一些复杂的要求,此时就需要进行sql的拼接,mybatis为我们提供了动态sql帮助我们进行sql的拼接

我们简单的创建一个表,用来测试这些动态sql

 

1.<where>和<if>经常一起使用,因此我们在这里一起讲解

 

<where>:用于拼接where 语句等同于where 1=1如果有条件的话,则在后面拼接and 条件即可,如果没有条件的话则等同于select * from student where 1=1

而与<where>标签经常一起使用的则是<if>标签。

<if test="">:test里面写入条件,如果符合则拼接标签体内的sql语句

下面是<if>和<where>的结合

 

<select id="studentSelect" parameterType="student" resultType="student">
        select * from student
        <where>
            <!-- test:条件 -->
            <if test="sname!=null">
                and sname=#{sname}
            </if>
            <if test="id!=null">
                and id = #{id}
            </if>
        </where>
 </select>

 

2.<sql>和<trim>经常一起使用,我们在这里一起讲解

 

<sql>可以书写一些sql片段,比如当插入的时候需要有insert into 表名(字段名) values(值)

我们可以将"字段名"和"值"的sql语句通过<sql>标签书写

由于字段名和值之间需要由逗号隔开,而我们不知道哪些字段需要插入,因此需要在每一个字段或值后面添加逗号,

但是这样最后一个字段名或值后面会多一个逗号,因此我们使用<trim>标签

<trim suffixOverrides="">:即为将后缀的所不需要的语句去掉

    <sql id="key">
        <trim suffixOverrides=",">
            <if test="sname!=null">
                sname,
            </if>
        </trim>
    </sql>

    <sql id="value">
        <trim suffixOverrides=",">
            <if test="sname!=null">
                #{sname},
            </if>
        </trim>
    </sql>

而我们在<insert>中使用<include refid="">来使用这些<sql>标签

    <insert id="add" parameterType="com.oracle.pojo.Student">
        insert into student (
        <include refid="key" />
        ) values (
        <include refid="value" />
        )
    </insert> 

3.<foreach> 标签

当我们进行查询或删除可能会有delete from student where id in(1,2,3)这样的批量删除语句

这个时候我们的parameterType传入的参数类型则是"list",而这是一个数组,我们需要遍历一下这个数组,这个时候就有了<foreach>标签

<foreach>标签可以循环遍历传入的数组

collection:要遍历的数组

open:拼接sql是以什么开始的,一般是”(”

close: 拼接sql是以什么介绍的,一般是”)”

item:遍历出来的元素

        <delete id="delete" parameterType="list">
        <if test="list!=null">
            delete from student
            <where>
                and id in
                <foreach collection="list" open="(" close=")" item="value"
                    separator=",">
                    #{value}
                </foreach>
            </where>
        </if>
    </delete>

 

4.<set>标签

这个标签用在更新语句,用在update操作中,通常和<if>还有<trim>一起使用

<update id="update" parameterType="student">
        update student
        <set>
            <trim suffixOverrides=",">
                <if test="sname!=null">
                    sname = #{sname},
                </if>
                <if test="address!=null">
                    sname = #{address},
                </if>
                <if test="sex!=null">
                    sex = #{sex},
                </if>
            </trim>
        </set>
        where id = #{id}
    </update>

 

posted @ 2019-08-21 11:44  emmmmmm哇咔咔  阅读(118)  评论(0编辑  收藏  举报