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>