Mybatis动态SQL实战:if、choose、where、set、trim、foreach全解析
5星 · 超过95%的资源 117 浏览量
更新于2024-09-02
收藏 479KB PDF 举报
"Mybatis动态SQL之if、choose、where、set、trim、foreach标记实例详解"
MyBatis是一个流行的持久层框架,它允许开发者将SQL语句直接写在XML配置文件或者Mapper接口的注解中。动态SQL是MyBatis的一个强大特性,可以根据条件动态地生成SQL语句,避免了大量硬编码的条件判断。在MyBatis中,有几种主要的动态SQL标签,包括`if`、`choose`(`when`、`otherwise`)、`where`、`set`、`trim`和`foreach`。下面我们将逐一解析这些标签的用法和实例。
1. if 标签
`if`标签用于根据条件判断是否插入某个片段。例如,在上述描述中,如果用户名不等于"admin",我们需要查询密码为123456的用户。在XML映射文件中,可以这样写:
```xml
<select id="selectUser" parameterType="map" resultType="JiKeUser">
SELECT * FROM user
WHERE 1=1
<if test="username != 'admin'">
AND password = #{password}
</if>
</select>
```
2. choose(when、otherwise)标签
`choose`标签类似于Java的`switch`语句,可以实现多个条件分支。`when`标签用于设置满足某个条件时执行的SQL片段,而`otherwise`标签用于设置当所有条件都不满足时执行的SQL。例如:
```xml
<select id="selectUser" parameterType="map" resultType="JiKeUser">
SELECT * FROM user
WHERE 1=1
<choose>
<when test="username != null">
AND username = #{username}
</when>
<when test="email != null">
AND email = #{email}
</when>
<otherwise>
AND status = 'active'
</otherwise>
</choose>
</select>
```
3. where 标签
`where`标签用于构建`WHERE`子句。当没有条件时,它会自动移除开头的`AND`或`OR`,避免生成无效的SQL。例如:
```xml
<select id="selectUser" parameterType="map" resultType="JiKeUser">
SELECT * FROM user
<where>
<if test="username != null">
username = #{username}
</if>
<if test="email != null">
AND email = #{email}
</if>
</where>
</select>
```
4. set 标签
`set`标签用于构建`SET`子句,在更新语句中使用。它同样会自动处理第一个条件前的`SET`关键字。例如:
```xml
<update id="updateUser" parameterType="JiKeUser">
UPDATE user
<set>
<if test="username != null">
username = #{username},
</if>
<if test="email != null">
email = #{email},
</if>
</set>
WHERE id = #{id}
</update>
```
5. trim 标签
`trim`标签用于删除多余的前缀或后缀。在上述`set`和`where`标签中,其实已经隐含使用了`trim`的功能。但如果你需要自定义删除规则,可以直接使用`trim`。例如,删除所有以特定字符串开头的元素:
```xml
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="ids != null">
id IN
<foreach item="item" index="index" collection="ids" open="(" separator="," close=")">
#{item}
</foreach>
</if>
</trim>
```
6. foreach 标签
`foreach`标签用于循环遍历集合,生成对应的SQL片段。在上述`trim`示例中,它遍历了`ids`集合,生成了`IN`子句。例如,查询id在列表中的用户:
```xml
<select id="selectUsersByIds" parameterType="java.util.List" resultType="JiKeUser">
SELECT * FROM user
WHERE id IN
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
</select>
```
通过这些动态SQL标签,MyBatis能够灵活地根据传入的参数构建复杂的SQL语句,极大地提高了代码的可读性和维护性。在实际开发中,根据具体需求合理运用这些标签,可以有效地优化数据库操作。
2024-04-28 上传
2012-05-28 上传
点击了解资源详情
2014-11-15 上传
2014-08-27 上传
2016-11-30 上传
2013-03-01 上传
2012-06-24 上传
点击了解资源详情
weixin_38697063
- 粉丝: 6
- 资源: 956
最新资源
- 全国江河水系图层shp文件包下载
- 点云二值化测试数据集的详细解读
- JDiskCat:跨平台开源磁盘目录工具
- 加密FS模块:实现动态文件加密的Node.js包
- 宠物小精灵记忆配对游戏:强化你的命名记忆
- React入门教程:创建React应用与脚本使用指南
- Linux和Unix文件标记解决方案:贝岭的matlab代码
- Unity射击游戏UI套件:支持C#与多种屏幕布局
- MapboxGL Draw自定义模式:高效切割多边形方法
- C语言课程设计:计算机程序编辑语言的应用与优势
- 吴恩达课程手写实现Python优化器和网络模型
- PFT_2019项目:ft_printf测试器的新版测试规范
- MySQL数据库备份Shell脚本使用指南
- Ohbug扩展实现屏幕录像功能
- Ember CLI 插件:ember-cli-i18n-lazy-lookup 实现高效国际化
- Wireshark网络调试工具:中文支持的网口发包与分析