当前位置: 首页 > news >正文

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}

http://www.hskmm.com/?act=detail&tid=28169

相关文章:

  • 网络优化问题
  • Java环境安装备忘录
  • 深入解析:【Spring MVC终极指南】一文掌握请求处理与响应!从Servlet原生方式到SpringMVC高效优雅写法
  • foobar2000 v2.25.2 汉化版
  • 比特币地址投毒攻击深度剖析
  • 为什么大家都爱用微擎?这几点真的太香了
  • 【JS逆向百例】某坤行 1101,雪球 1038,新 acw_sc__v2 逆向分析
  • JAVA 的模板方法模式解析
  • 《构建之法-现代软件工程》 -阅读和提问作业1
  • 计算机视觉与AI在人体成分分析中的技术突破
  • 2024-网鼎杯web-PyBlockly
  • 关于微信小程序申请地理位置接口申请
  • c++学习总结
  • 2025 年大闸蟹蟹卡 / 大闸蟹礼盒 / 大闸蟹礼券 / 好蟹汇大闸蟹选择指南:生态养殖与全国服务双保障解析
  • 分享一个超级耐玩的游戏 转载 植物大战僵尸融合版最新版(v3.0.1)支持安卓版+PC电脑版
  • 【Go 语言神器】iota 到底是什么?为什么高手都爱用它?
  • 2025 年模具生产厂家最新推荐榜单:聚焦优质源头企业,助力工程采购精准选型框格梁模具/框格梁模板/混泥土模具厂家推荐
  • 2025 年最新推荐仿石漆厂家实力厂家口碑排行榜:精选优质环保外墙内墙涂料企业权威揭晓
  • oracle查询存储过程和函数中是否包含某个字符串
  • Qoder 负责人揭秘:Qoder 产品背后的思考与未来发展
  • 2025 年半导体晶片生产厂家最新推荐榜单:专利技术与规模化供货能力双维度深度解析
  • 2025 年水产养殖降氨氮亚盐厂家最新推荐排行榜 ,助力北方对虾鱼塘螃蟹池塘养殖户轻松选购优质产品
  • CS:APP学习笔记之程序的机器级表示(三) - Invinc
  • EHOME视频平台EasyCVR构建全协议、全场景融合的视频监控中枢
  • GA/T 1400视图库平台EasyCVR平台GB28181与1400级联方式全解析
  • 2025 年玻璃钢水箱生产厂家最新推荐榜单:含 30 吨 / 订做 / 消防 / 方形 / 拼装式 / 屋顶 / 大型产品,从产能与服务双维度精选优质企业
  • linux 修改本地时区
  • crontab 定时执行python脚本失败,但手动执行却成功问题处理 - hello-*
  • 2025 年不锈钢水箱厂家最新推荐榜:优质厂家实力对比与选购指南,助您选到适配设备矩形/屋顶/定做方形不锈钢水箱厂家推荐
  • 实用指南:Java 后端面试技术文档(参考)