什么是 MyBatis ?
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java s,普通的 Java对象)映射成数据库中的记录。
1、forEach 循环
forEach 元素的属性主要有 item, idnex, collection, open, separator, close。
1.collection:传入的 List 或 Array 或自己封装的 Map。
2.item:集合中元素迭代时的别名。
3.idnex:集合中元素迭代是的索引。
4.open:where 后面表示以什么开始,如以‘(\'开始。
5.separator:表示在每次进行迭代是的分隔符。
6.close:where后面表示以什么结束,如以‘)\'结束。
//mapper中需要传递一个容器
public List<User> queryByIdList(List<Integer> userIdList);
<select id=\"queryByIdList\" resultMap=\" ResultMap\" 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=\" ResultMap\" paramterType\"string\">
SELECT * FROM user
<where>
<if test=\"name != null\">
name like concat(\'%\', concat(#{name}, \'%\'))
</if>
</where>
</select>
3、if + where 标签
用 if 标签判断参数是否有效来进行条件查询。
<select id=\"getUserList\" resultMap=\" ResultMap\" 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>
<if test=\" name != null and name != \'\'\">
name = #{name},
</if>
<if test=\" phone != null and phone != \'\'\">
phone = #{phone},
</if>
</set>
WHERE userId = #{userId}
</update>
5、if + trim 代替 where/set 标签
trim 可以更灵活的去处多余关键字的标签,可以实现 where 和 set 的效果。
<select id=\"getUserList\" resultMap=\" ResultMap\" 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=\" ResultMap\">
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>
总结
以上所述是小编给大家介绍的MyBatis 常用写法 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
继续阅读与本文标签相同的文章
PCB设计的一些实战小经验总结
-
开箱即用-OSS无代理备份
2026-05-19栏目: 教程
-
RDS MySQL 8.0 Returning
2026-05-19栏目: 教程
-
阿里云智能大学训练营讲师培训
2026-05-19栏目: 教程
-
SQL 中 Left Join 转为 Inner Join 的实际应用
2026-05-19栏目: 教程
-
82天突破1000star,项目团队梳理出软件开源必须注意的8个方面
2026-05-19栏目: 教程
