尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

MyBatis 中的动态 SQL 的相关使用方法(Javaee/MyBatis) - 教程

MyBatis 中的动态 SQL 的相关使用方法(Javaee/MyBatis) - 教程
📅 发布时间:2026/6/19 9:37:29

MyBatis 中的动态 SQL 的相关使用方法(Javaee/MyBatis) - 教程

MyBatis 的动态 SQL 是一种强大的特性,它可以让你在 XML 映射文件内,根据不同的条件编写不同的 SQL 语句。MyBatis 动态 SQL 主要元素有:

<if>: 根据提供的条件来动态拼接 SQL。

接口定义

Integer insertUserByCondition(UserInfo userInfo);

Mapper.xml实现 

INSERT INTO userinfo (
username,
`password`,
age,
gender,
phone)
VALUES (
#{username},
#{age},
#{gender},
#{phone})

<trim>标签

标签中有如下属性:
• prefix:表⽰整个语句块,以prefix的值作为前缀
• suffix:表⽰整个语句块,以suffix的值作为后缀
• prefixOverrides:表⽰整个语句块要去除掉的前缀
• suffixOverrides:表⽰整个语句块要去除掉的后缀

INSERT INTO userinfo
username,
`password`,
age,
gender,
phone,
VALUES
#{username},
#{password},
#{age},
#{gender},
#{phone}

在以上sql动态解析时,会将第⼀个部分做如下处理:
• 基于 prefix 配置,开始部分加上( 
• 基于suffix 配置,结束部分加上) 
• 多个组织的语句都以, 结尾,在最后拼接好的字符串还会以 , 结尾,会基于suffixOverrides 配置去掉最后⼀个 
• 注意<if test="username !=null"> 中的username 是传⼊对象的属性

<where>: 自动处理前导的 AND 或 OR 语句。

接口定义

List queryByCondition();

 Mapper.xml实现

select id, username, age, gender, phone, delete_flag, create_time,
update_time
from userinfo
and age = #{age}
and gender = #{gender}
and delete_flag = #{deleteFlag}

<where> 只会在⼦元素有内容的情况下才插⼊where⼦句,⽽且会⾃动去除⼦句的开头的AND或
OR
以上标签也可以使⽤ <trim prefix="where" prefixOverrides="and"> 替换,但是此种情况下,当⼦元素都没有内容时,where关键字也会保留

<set>: 自动处理后面的逗号问题。

接⼝定义:根据传⼊的⽤⼾id属性,修改其他不为null的属性

Integer updateUserByCondition(UserInfo userInfo);

 Mapper.xml

update userinfo
username = #{username},
age = #{age},
delete_flag = #{deleteFlag},
where id = #{id}

<set> :动态的在SQL语句中插⼊set关键字,并会删掉额外的逗号.(⽤于update语句中)

<foreach>: 主要用于处理数组、集合的元素。

对集合进⾏遍历时可以使⽤该标签。标签有如下属性:
• collection:绑定⽅法参数中的集合,如List,Set,Map或数组对象
• item:遍历时的每⼀个对象
• open:语句块开头的字符串
• close:语句块结束的字符串
• separator:每次遍历之间间隔的字符串

需求:根据多个userid,删除⽤⼾数据
接⼝⽅法:

void deleteByIds(List ids);

ArticleMapper.xml中新增删除sql:

delete from userinfo
where id in
#{id}

<include> :通过属性refid,指定包含的SQL⽚段
我们可以对重复的代码⽚段进⾏抽取,将其通过 <sql> 标签封装到⼀个SQL⽚段,然后再通过
<include> 标签进⾏引⽤。
• <sql> :定义可重⽤的SQL⽚段
• <include> :通过属性refid,指定包含的SQL⽚段

id, username, age, gender, phone, delete_flag, create_time, update_time
通过  标签在原来抽取的地⽅进⾏引⽤。操作如下:
select
from userinfo
select
from userinfo where id= #{id}

相关新闻

  • 网络优化问题
  • 维护区间[1,i-1]本质不同逆序对的个数板子(不同种类的逆序对个数)
  • foobar2000 v2.25.2 汉化版

最新新闻

  • 4.19周总结
  • 2026华南优质企业管理培训机构综合测评:企业管理培训哪家好 - 品牌测评鉴赏家
  • MCP1701A LDO在STM32低功耗设计中的应用与实战解析
  • 终极Excalidraw虚拟白板指南:为什么它正在取代你的传统绘图工具?
  • 跨省大件货物托运怎么选?全品类快递物流整合渠道对比,大小货手机一键预约上门 - 时讯资讯
  • 大模型应用开发-记忆模块设计:基于助手Agent类型

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号