IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Mybatis中的动态SQL -> 正文阅读

[大数据]Mybatis中的动态SQL

在ml映射文件中,除了常见的select|insert|updae|delete
标签之外,还有哪些常用的标签?

其他常用的标签有

  • if
  • where
  • set
  • choose(when、otherwise)
  • foreach

以上这些标签都是Mybatis提供的动态SQL标签

什么是动态SQL标签

??所谓动态SQL就是指根据不同的条件生成不同的SQL语句,本质上还是SQL,知识我们可以在SQL层面,去执行一个逻辑代码,利用Mybatis的动态SQL,我们可以彻底摆脱根据不同条件拼接SQL语句的这种痛苦。

1、if

<select id="queryBlog" parameterType="map" resultType="Blog">
    select * from mybatis.blog where 1=1(在做项目中不可能这么写)
    <if test="title != null">
        and title = #{title}
    </if>
    <if test="id != null">
        and id=#{id}
    </if>
</select>

如果where匹配到的第一个if没有and,则正常执行,如果匹配到的第二个if有and ,而第一个又没有匹配上,则会出现错误:如:where and id =#{ }
请添加图片描述
所以就引入了where标签:

2、where

where元素只会在子元素中返回任何内容的情况下才会插入“where”子句。而且,若子句的开头为“and”或者“or”,where元素也会将他们去除。
以后只要是写动态SQL就写上标签,反正如果不成立,他也不会加上,加上了反而更加智能。

<select id="queryBlogWh" parameterType="map" resultType="Blog">
    select * from mybatis.blog
<where>
    <if test="title != null">
        and title = #{title}
    </if>
    <if test="id != null">
        and id = #{id}
    </if>
</where>
</select>

3、choose

标签的使用跟JSTL基本上是一样的,要和标签连用,如

<where>
	<choose>
		<when>
		<otherwise>
<select id="queryBlogChoose" parameterType="map" resultType="Blog">
	select * from mybatis.blog
        <where>
            <choose>
                <when test="id != null" >
                    id =#{id}
                </when>
                <when test="title != null">
                    and title = #{title}
                </when>
                <otherwise>
                    and views = #{views}
                </otherwise>
            </choose>
        </where>
</select>

4、set

set标签是用在update语句中的,他的功能跟where标签的功能差不多。
set元素会动态地在首行插入set关键字,并且会删除额外的逗号

<update id="updateBlog" parameterType="map">
        update mybatis.blog
<set>
    <if test="id != null">
        id = #{id},
    </if>
    <if test="title !=null">
        title = #{title},
    </if>
    <if test="views != null">
        views = #{views}(这里没有)
    </if>
</set>
     where id = #{id}
</update>

5、sql片段

有些时候我们可能会将一些功能相同的部分抽取出来,方便复用

<sql id="title-id">
    <if test="title != null">
        title = #{title}
    </if>
    <if test="id != null">
        and id = #{id}
    </if>
</sql>

然后我们可以在select标签中导入,如:

<select id="queryBlogIF" parameterType="map" resultType="Blog">
    select * from mybatis.blog
    <where>
  		<include refid="title-id"></include>
    </where>
</select>

注意:sql片段的使用有几个需要注意的点
1、用法:

  • 使用SQL标签抽取公共的部分
  • 在需要是一个的地方使用include标签引用即可

2、注意点

  • 最好基于单表来定义SQL片段
  • 不要存在where标签

6、foreach

动态sql的另外一个常用的操作需求是对一个集合进行遍历,通常是在构建in条件语句的时候使用的

具体用法如下图:
请添加图片描述

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-10-08 20:48:45  更:2022-10-08 20:51:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年5日历 -2025/5/1 10:06:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码