为了账号安全,请及时绑定邮箱和手机立即绑定

高效 MyBatis SQL 写法一

标签:
Java 数据库

高效 MyBatis SQL 写法一

前言

MyBatis 作为一款优秀的持久层框架,极大地简化了数据库操作。

然而,在实际开发中,XML 配置的编写仍然可能显得繁琐。

本文将分享一些 MyBatis 动态 SQL 的优质写法,帮助开发者提升效率并减少错误。

forEach 标签的使用

forEach 标签常用于循环遍历集合,生成动态 SQL

其核心属性包括:

  • item:集合中元素的别名。

  • index:集合中元素的索引。

  • collection:集合对象,必须指定。

  • open:循环开始时的符号,如 (

  • separator:元素间的分隔符,如 ,

  • close:循环结束时的符号,如 )

示例:


public  List<Entity>  queryById(List<String> userIds);

对应的 XML 配置:


<select  id="queryById"  resultMap="BaseResultMap">

SELECT * FROM entity

WHERE id IN

<foreach  collection="userIds"  item="userId"  index="index"  open="("  separator=","  close=")">

#{userId}

</foreach>

</select>

注意collection 属性的值取决于传入参数的类型。

如果传入的是 List,则值为 list;如果是数组,则为 array;如果是多个参数,则需封装为 Map

模糊查询与 concat 函数

模糊查询时,可以使用 concat 函数动态拼接 SQL 语句。

示例:


<select  id="queryByName"  resultMap="BaseResultMap"  parameterType="Entity">

SELECT * FROM entity

<where>

<if  test="name != null">

name LIKE concat('%', #{name}, '%')

</if>

</where>

</select>

choose 标签的多条件判断

choose 标签类似于 Java 中的 switch 语句,用于多条件判断。

示例:


<select  id="getUserList_choose"  resultMap="resultMap_user"  parameterType="User">

SELECT * FROM User u

<where>

<choose>

<when  test="username != null">

u.username LIKE CONCAT('%', #{username}, '%')

</when>

<when  test="sex != null">

AND u.sex = #{sex}

</when>

<otherwise>

AND u.status = 'ACTIVE'

</otherwise>

</choose>

</where>

</select>

selectKey 标签的主键生成

在插入数据时,selectKey 标签可用于生成主键。

示例:


<insert  id="createStudentAutoKey"  parameterType="StudentEntity"  keyProperty="studentId">

<selectKey  keyProperty="studentId"  resultType="String"  order="BEFORE">

SELECT nextval('student')

</selectKey>

INSERT INTO STUDENT_TBL (student_id, student_name, student_sex, student_birthday)

VALUES (#{studentId}, #{studentName}, #{studentSex}, #{studentBirthday})

</insert>

if 标签的动态条件

if 标签用于动态生成 SQL 条件。

示例:


<select  id="getStudentList_if"  resultMap="resultMap_studentEntity"  parameterType="StudentEntity">

SELECT * FROM STUDENT_TBL ST

<where>

<if  test="studentName != null">

ST.STUDENT_NAME LIKE CONCAT('%', #{studentName}, '%')

</if>

<if  test="studentSex != null">

AND ST.STUDENT_SEX = #{studentSex}

</if>

</where>

</select>

总结

通过合理使用 MyBatis 的动态 SQL 标签,开发者可以显著提升代码的可读性和维护性,同时减少错误的发生。

本文介绍的几种常见用法,涵盖了从条件判断到批量操作的多种场景,希望能为你的开发工作带来帮助。

– 欢迎点赞、关注、转发、收藏【我码玄黄】,各大平台同名。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消