满山红网站建设公司福州关键词快速排名
随着用户输入或外部条件的变化而变化的SQL语句, 我们称之为动态SQL.
一. <if>标签
根据三个信息来查询员工, 如果我们只想通过其中一个信息(只填写一个信息在代码中其他信息为null)来查询是无法查询出来的, 促使就要用到动态SQL中的<if>.
修改后因为从第二个条件开始每个条件的开头都使用and连接 如果前面的不成立 在生成代码时就会在where和条件之间多出一个and导致不能正常运行此时可以用<where></where>标签代替包裹条件体
<where>标签, 只要有一个条件成立它就会自动在运行时生成where,并且会去除掉影响运行的and
案例: 动态更新员工信息
<!-- 动态更新员工信息--><update id="update">update mybatis.empset<if test="username != null">username =#{username},</if><if test="name != null">name = #{name},</if><if test="gender != null">gender = #{gender},</if><if test="image != null">image = #{image},</if><if test="job != null">job = #{job},</if><if test="entrydate != null">entrydate = #{entrydate},</if><if test="dept_id != null">dept_id = #{deptId},</if><if test="update_time != null">update_time = #{updateTime}</if>where id = #{id}</update>
但是如果后面的信息为null在生成代码时前一条最后会有一个" , "导致语法出错,此时就要用到<set>
<!-- 动态更新员工信息--><update id="update">update mybatis.emp<set><if test="username != null">username =#{username},</if><if test="name != null">name = #{name},</if><if test="gender != null">gender = #{gender},</if><if test="image != null">image = #{image},</if><if test="job != null">job = #{job},</if><if test="entrydate != null">entrydate = #{entrydate},</if><if test="deptId != null">dept_id = #{deptId},</if><if test="updateTime != null">update_time = #{updateTime}</if></set>where id = #{id}</update>
二. <foreach>标签
<!-- 批量删除员工(13, 14, 15)-->
<!--如果只删除一个数据指定id时可以直接 where id = #{id}但是要想批量删除, 就不能这么写了, 要用遍历标签在运行时去生成代码
标签内的容结果参考(?, ?, ?)collection: 遍历的集合item: 遍历出来的元素separator: 数据之间的分隔符open: 遍历开始前拼接的SQL片段close: 遍历结束后拼接的SQL片段
--><delete id="deleteByIds">delete from emp where id in<foreach collection="ids" item="id" separator="," open="(" close=")">#{id}</foreach></delete>
三. <sql>&<include>标签
此代码标注内容重复如果要修改每个都要修改, 此时就可以用到 <sql>&<include>标签 至于这里为啥不用 * 直接代替所有元素是因为用 * 的性能比较低