mybatis-动态SQL
- IT业界
- 2025-09-01 18:33:02

随着用户输入或外部条件的变化而变化的SQL语句, 我们称之为动态SQL.
一. <if>标签
根据三个信息来查询员工, 如果我们只想通过其中一个信息(只填写一个信息在代码中其他信息为null)来查询是无法查询出来的, 促使就要用到动态SQL中的<if>.
修改后因为从第二个条件开始每个条件的开头都使用and连接 如果前面的不成立 在生成代码时就会在where和条件之间多出一个and导致不能正常运行此时可以用<where></where>标签代替包裹条件体
<where>标签, 只要有一个条件成立它就会自动在运行时生成where,并且会去除掉影响运行的and
案例: 动态更新员工信息 <!-- 动态更新员工信息--> <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="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>标签 至于这里为啥不用 * 直接代替所有元素是因为用 * 的性能比较低
mybatis-动态SQL由讯客互联IT业界栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“mybatis-动态SQL”
上一篇
”无痕模式“真的无痕?
下一篇
地表放置机场和飞机(十)