MyBatis 常用写法
1、forEach 循环
??forEach 元素的属性主要有 item, idnex, collection, open, separator, close。
- collection:传入的 List 或 Array 或自己封装的 Map。
- item:集合中元素迭代时的别名。
- idnex:集合中元素迭代是的索引。
- open:where 后面表示以什么开始,如以‘(’开始。
- separator:表示在每次进行迭代是的分隔符。
- close:where后面表示以什么结束,如以‘)’结束。//mapper中需要传递一个容器public List<User> queryByIdList(List<Integer> userIdList); <select id="queryByIdList" resultMap="BaseResultMap" parameterType="map"> SELECT * FROM user WHERE userId IN <foreach collection="userIdList" item="id" index="index" open="(" close=")" separator=","> #{id} </foreach> </select>
2、concat 模糊查询
//模糊查询使用concat拼接sql
<select id="queryByName" resultMap="BaseResultMap" paramterType"string"> SELECT * FROM user <where> <if test="name != null"> name like concat(‘%‘, concat(#{name}, ‘%‘)) </if> </where> </select>
3、if + where 标签
<select id="getUserList" resultMap="BaseResultMap" paramterType="com.demo.User">
SELECT * FROM user <where> <if test="userId !=null and userId!= ‘‘"> userId= #{userId} </if> <if test="name !=null and name!= ‘‘"> AND name= #{name} </if> <if phone="userId !=null and phone!= ‘‘"> AND phone= #{phone} </if> </where> </select>
where 动态语句中,where 标签会自动去掉 AND 或 OR。防止 WHERE AND 错误。
4、if + set
??使用 set 标签可以动态的配置 SET 关键字,使用 if + set 标签,如果某项为 null 则不进行更新。
<update id="updateUser" paramterType="com.demo.User"> UPDATE user <set> <iftest=" name != null and name != ‘‘"> name = #{name}, </if> <iftest=" phone != null and phone != ‘‘"> phone = #{phone}, </if> </set> WHERE userId = #{userId} </update>
5、if + trim 代替 where/set 标签
??trim 可以更灵活的去处多余关键字的标签,可以实现 where 和 set 的效果。
<select id="getUserList" resultMap="BaseResultMap" paramterType="com.demo.User"> SELECT * FROM user <trim prefix="WHERE" prefixOverrides="AND|OR"> <if test="userId !=null and userId!= ‘‘"> userId= #{userId} </if> <if test="name !=null and name!= ‘‘"> AND name= #{name} </if> <if phone="userId !=null and phone!= ‘‘"> AND phone= #{phone} </if> </trim> </select> <update id="updateUser" paramterType="com.demo.User"> UPDATE user <trim prefix="SET" suffixOverrides=","> <if test=" name != null and name != ‘‘"> name = #{name}, </if> <if test=" phone != null and phone != ‘‘"> phone = #{phone}, </if> </trim> WHERE userId = #{userId} </update>
5、choose(when, otherwise)标签
??choose 标签是按顺序判断其内部 when 标签中的 test 条件是否成立,如果有一个成立,则 choose 结束。当 choose 中所有 when 的条件都不满足,则执行 otherwise 中的 sql。类似 java 中的 switch 语句,choose 为 switch,when 为 case,otherwise 则为 default。
<select id="selectCustomerByCustNameAndType" parameterType="map" resultMap="BaseResultMap"> SELECT * FROM user <choose> <when test="Utype == ‘name‘"> WHERE name = #{name} </when> <when test="Utype == ‘phone‘"> WHERE phone= #{phone} </when> <when test="Utype == ‘email‘"> WHERE email= #{email} </when> <otherwise> WHERE name = #{name} </otherwise> </choose> </select>
//mapper中需要传递一个容器public List<User> queryByIdList(List<Integer> userIdList); <select id="queryByIdList" resultMap="BaseResultMap" parameterType="map"> SELECT * FROM user WHERE userId IN <foreach collection="userIdList" item="id" index="index" open="(" close=")" separator=","> #{id} </foreach> </select>
原文地址:https://www.cnblogs.com/xiaoqianTS/p/10000393.html