高效 MyBatis SQL 写法一

server/2025/2/6 12:30:07/

高效 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 entityWHERE 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 标签,开发者可以显著提升代码的可读性和维护性,同时减少错误的发生。

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

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


http://www.ppmy.cn/server/165407.html

相关文章

Kafka分区策略实现

引言 Kafka 的分区策略决定了生产者发送的消息会被分配到哪个分区中&#xff0c;合理的分区策略有助于实现负载均衡、提高消息处理效率以及满足特定的业务需求。 轮询策略&#xff08;默认&#xff09; 轮询策略是 Kafka 默认的分区策略&#xff08;当消息没有指定键时&…

Java常见的技术场景面试题

一、单点登录这块怎么实现的&#xff1f; 单点登录概述 单点登录&#xff1a;Single Sign On&#xff08;简称SSO&#xff09;,只需要登录一次&#xff0c;就可以访问所有信任的应用系统 在以前的时候&#xff0c;一般我们就单系统&#xff0c;所有的功能都在同一个系统上。…

C#面试常考随笔14: 方法如何传递不定数量的参数?params关键字怎么使用?

使用params关键字&#xff0c;就可以像python传参那样传递多个参数&#xff0c;类似元组 主要作用 params 关键字的主要作用是让方法可以接受不定数量的参数&#xff0c;而不需要在调用方法时显式地创建数组来传递多个参数。这为方法调用提供了更大的灵活性&#xff0c;使得代…

nuxt3 layout导航栏切换问题

nuxt3 layout导航栏切换问题 最近在玩nuxt3&#xff0c;遇到一个问题&#xff0c;我按照官方文档使用的layouts文件夹&#xff0c;然后下面使用了了多个页头页脚&#xff0c; 然后在app.vue是这么配置的 <template><script setup> import { useCookieStore } fr…

实战网络安全:渗透测试与防御指南

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 引言 在数字化时代&#xff0c;网络安全已成为企业和个人不可忽视的重要课题。网络攻击的复杂性与日俱增&#xff0c;从数据泄露…

Autosar-以太网是怎么运行的?(原理部分)

写在前面&#xff1a; 入行一段时间了&#xff0c;基于个人理解整理一些东西&#xff0c;如有错误&#xff0c;欢迎各位大佬评论区指正&#xff01;&#xff01;&#xff01; 1.TCP/IP协议详解 TCP/IP协议包含了一系列的协议&#xff0c;也叫TCP/IP协议族&#xff08;TCP/IP P…

iOS文字滚动:使用CATextLayer实现的跑马灯(附源码)

引言 在 iOS 开发中&#xff0c;跑马灯效果&#xff08;Marquee Effect&#xff09;是一种常见的文本滚动效果&#xff0c;广泛应用于广告展示、动态消息栏、通知推送等场景。通过跑马灯效果&#xff0c;我们能够以流畅的方式展示超出屏幕范围的文本&#xff0c;提升用户体验。…

【怎么用系列】短视频戒除-1-对推荐算法进行干扰

如今推荐算法已经渗透到人们生活的方方面面&#xff0c;尤其是抖音等短视频核心就是推荐算法。 【短视频的危害】 1> 会让人变笨&#xff0c;慢慢让人丧失注意力与专注力 2> 让人丧失阅读长文的能力 3> 让人沉浸在一个又一个快感与嗨点当中。当我们刷短视频时&#x…