九、MyBatis动态SQL

news2024/11/20 3:31:13

在这里插入图片描述

文章目录

  • 九、动态SQL
    • 9.1 if
    • 9.2 where
    • 9.3 trim
    • 9.4 choose、when、otherwise
    • 9.5 foreach
    • 9.6 SQL片段
  • 本人其他相关文章链接

九、动态SQL

9.1 if

总结:根据标签中test属性所对应的表达式决定标签中的内容是否需要拼接到SQL中。

User getUserByParamsWithIf(User user);
<select id="getUserByParamsWithIf" resultType="User">
        select * from litemall_user where 1=1
        <if test="username != '' and username != null">
            and username = #{username}
        </if>
        <if test="id != 0 and id != null">
            and id = #{id}
        </if>
    </select>

9.2 where

总结

  • 当where标签中有内容时,会自动生成where关键字,并且将内容前多余的and或or去掉。
  • 当where标签中没有内容时,此时where标签没有任何效果。
  • 注意:where标签不能将其中内容后面多余的and或or去掉。
User getUserByParamsWithWhere(User user);
<select id="getUserByParamsWithWhere" resultType="User">
        select * from litemall_user
        <where>
            <if test="username != '' and username != null">
                and username = #{username}
            </if>
            <if test="id != 0 and id != null">
                and id = #{id}
            </if>
        </where>
    </select>

9.3 trim

总结:trim用于去掉或添加标签中的内容

常用属性

  • prefix:在trim标签中的内容的前面添加某些内容

  • prefixOverrides:在trim标签中的内容的前面去掉某些内容

  • suffix:在trim标签中的内容的后面添加某些内容

  • suffixOverrides:在trim标签中的内容的后面去掉某些内容

User getUserByParamsWithTrim(User user);
<select id="getUserByParamsWithTrim" resultType="User">
        select * from litemall_user
        <trim prefix="where" suffixOverrides="and">
            <if test="username != '' and username != null">
                 username = #{username} and
            </if>
            <if test="gender != 0 and gender != null">
                 gender = #{gender} and
            </if>
            <if test="id != 0 and id != null">
                id = #{id} and
            </if>
        </trim>
    </select>

9.4 choose、when、otherwise

总结:相当于if…else if …else ,其中when至少要有一个,otherwise最多只能有一个。

List<User> getUserByParamsWithChoose(User user);
<select id="getUserByParamsWithChoose" resultType="User">
        select * from litemall_user
        <where>
            <choose>
                <when test="username != '' and username != null">
                    username = #{username}
                </when>
                <when test="gender != 0 and gender != null">
                    gender = #{gender}
                </when>
                <when test="id != 0 and id != null">
                    id = #{id}
                </when>
            </choose>
        </where>
    </select>

9.5 foreach

总结:属性:

  • collection:设置要循环的数组或集合

  • item:表示集合或数组中的每一个数据

  • separator:设置循环体之间的分隔符

  • open:设置foreach标签中的内容的开始符

  • close:设置foreach标签中的内容的结束符

9.6 SQL片段

总结:sql片段,可以记录一段公共sql片段,在使用的地方通过include标签进行引入。

User getUserByParamsWithSQLFragment();
<sql id="userColumns">
        id, username, password, mobile, gender, last_login_ip
</sql>
<select id="getUserByParamsWithSQLFragment" resultType="User">
        select <include refid="userColumns"></include> from litemall_user where id = 4
</select>

本人其他相关文章链接

1.一、MyBatis简介:MyBatis历史、MyBatis特性、和其它持久化层技术对比、Mybatis下载依赖包流程
2.二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作)
3.三、MyBatis核心配置文件详解
4.四、MyBatis获取参数值的两种方式(重点)
5.五、MyBatis的增删改查模板(参数形式包括:String、对象、集合、数组、Map)
6.六、MyBatis特殊的SQL:模糊查询、动态设置表名、校验名称唯一性
7.七、MyBatis自定义映射resultMap
8.八、(了解即可)MyBatis懒加载(或者叫延迟加载)
9.九、MyBatis动态SQL
10.十、MyBatis的缓存
11.十一、MyBatis的逆向工程
12.十二、MyBatis分页插件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/491941.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

缓存击穿,穿透,雪崩

一、缓存穿透 是用户访问的数据既不在缓存当中&#xff0c;也不在数据库中。 如果从数据库查询不到数据&#xff0c;则不写入缓存。这就导致每次请求都会到数据库进行查询&#xff0c;缓存也失去了意义。 当高并发或有人利用不存在的Key频繁攻击时&#xff0c;数据库的压力骤…

AI 工具合辑盘点(四)持续更新

AI 视频生成和编辑工具 当今&#xff0c;视频已经成为最受欢迎的媒介之一。我们喜欢观看视频&#xff0c;但是制作高质量的视频需要耗费大量时间和精力。 无论你是内容创作者、专业视频编辑师&#xff0c;还是完全的新手&#xff0c;按照传统方式制作视频需要掌握各种知识、技…

【Maxwell】MySQL数据监听

背景 我们都知道随着业务的发展,监听数据库的数据变更及时性是必须的,虽然我们可以在入库之前进行处理,但是有个问题就是事务的一致性不好掌控,而且很多业务都是微服务的,那么不在一个微服务中,可能有需要跨服务去调用,那么此时直接去监听mysql的binlog来实现数据的操作…

这一篇Databinding应该可以帮助迅速上手吧

Databinding使用篇&#xff08;迅速上手&#xff09; 使用前需要在模块级别的build.gradle里面的android闭包里添加&#xff1a; dataBinding{enabled true}接着在layout文件中按下Alt 回车&#xff0c; 将布局转换成data binding layout即可&#xff0c;此时编译就会生成对…

【JAVAEE】创建线程的方式及线程的常用方法

目录 1.创建线程的四种方式 1.1继承Thread类 1.2实现Runnable接口 1.3匿名内部类 1.4lambda表达式 2.多线程的优势-增加运行速度 3.Thread类及常用方法 3.1构造方法 3.2常见属性 演示后台线程 演示线程是否存活 3.3线程中断 3.4线程等待-join() 3.5获取当前线程 …

23年5月高项备考学习笔记——信息系统管理

管理&#xff1a;监督系统的设计和结构 系统&#xff1a;提供蓝图 系统管理&#xff1a; 规划和组织&#xff1a;业务战略、组织机制、信息系统 业务战略&#xff1a; 总成本领先战略 差异性战略 专注化战略 设计和实施&#xff1a;战略转成需求&#xff0c;便管理&#xff1b…

5月5号软件资讯更新合集.....

Visual Studio Code 1.78 发布 VS Code 1.78 已发布&#xff0c;此版本一些主要亮点包括&#xff1a; 辅助功能改进 - 更好的屏幕阅读器支持、新的音频提示。 新的颜色主题 - “Modern” 浅色和深色主题默认设置。 配置文件模板 - Python、Java、数据科学等的内置模板。 新…

2023年6月DAMA-CDGA/CDGP数据治理认证报名请尽早啦!

6月18日DAMA-CDGA/CDGP数据治理认证考试开放报名中&#xff01; 考试开放地区&#xff1a;北京、上海、广州、深圳、长沙、呼和浩特、杭州、南京、济南、成都、西安。其他地区凑人数中… DAMA-CDGA/CDGP数据治理认证开班时间&#xff1a;5月7日 DAMA认证为数据管理专业人士提供…

线上FullGC问题排查实践——手把手教你排查线上问题 | 京东云技术团队

作者&#xff1a;京东科技 韩国凯 一、问题发现与排查 1.1 找到问题原因 问题起因是我们收到了jdos的容器CPU告警&#xff0c;CPU使用率已经达到104% 观察该机器日志发现&#xff0c;此时有很多线程在执行跑批任务。正常来说&#xff0c;跑批任务是低CPU高内存型&#xff0c…

【马蹄集】第九周作业

第九周作业 目录 MT2125 一样的虫子MT2126 AB数对MT2127 权值计算MT2128 黑客小码哥MT2129 来给单词分类 MT2125 一样的虫子 难度&#xff1a;黄金    时间限制&#xff1a;1秒    占用内存&#xff1a;128M 题目描述 有 N 只虫子&#xff0c;每只虫子有6条腿&#xff0c;每…

通过Python的pytesseract库识别图片中的文字

文章目录 前言一、pytesseract1.pytesseract是什么&#xff1f;2.安装pytesseract3.查看pytesseract版本4.安装PIL5.查看PIL版本 二、Tesseract OCR1.Tesseract OCR是什么&#xff1f;2.安装Tesseract OCR3.安装 Tesseract OCR 语言包 三、使用方法1.引入库2.打开图片文件3.使用…

聊一聊 Valgrind 监视非托管内存泄露和崩溃

一&#xff1a;背景 1. 讲故事 只要是程序总会出现各种莫名其妙的问题&#xff0c;比如&#xff1a;非托管内存泄露&#xff0c;程序崩溃&#xff0c;在 Windows 平台上一般用微软自家的官方工具 App Verifier 就可以洞察&#xff0c;那问题出在 Linux 上怎么办呢&#xff1f…

块状链表实现BigString大字符串操作(golang)

前言 块状链表是介于链表和数组之间的数据结构&#xff0c;能够在 O ( n ) O(\sqrt{n}) O(n ​)时间内完成插入、删除、访问操作。 数据结构如图所示。假设最大容量为 n n n, 则它有一个长度为 s n s\sqrt{n} sn ​的链表。链表中每个结点是一个长度为 2 n 2 \times \sqrt{…

C#_各类应用程序

目录 前言 1. 第一个程序&#xff1a;Hello&#xff0c;World&#xff01; 1.1 Console 1.2 Windows Forms 1.3 WPF&#xff08;Windows Presentation Foundation&#xff09; 1.4 ASP.NET Web Forms 1.5 ASP.NET MVC(Model - View - Controller) 1.6 Windows Store A…

Tuxera NTFS2023Mac专业NTFS驱动软件 解决Mac不能写入移动硬盘U盘问题 管理修复磁盘

Tuxera NTFS2023Mac专业NTFS驱动软件 解决Mac不能写入移动硬盘U盘问题 管理修复磁盘问题! NTFS For Mac2023是一款功能强大的MAC读写软件。NTFS For Mac可以帮助用户对磁盘进行日常管理&#xff0c;如果用户电脑的磁盘有问题&#xff0c;可以使用该软件进行修复&#xff0c;延…

Chatgpt系列(一) 如何使用chatgpt

系列文章目录 第一章: 如何使用chatgpt 第二章: chatgpt的概述 第三章: langchain入门 第四章: index 第五章: prompt 目录 系列文章目录 前言 一、LLM是什么&#xff1f; 二、使用步骤 1.学习地址 2.阅读内容重点的介绍 2.答复 读入数据 总结 系列文章目录前言一…

0基础学Java必备的50个知识点

1、编写&#xff1a;编写的Java代码保存在以“.java”结尾的源文件中。 2、编译&#xff1a;使用javac.exe命令编译java源文件&#xff0c;生成字节码文件。 格式&#xff1a;javac 源文件名.java 3、运行&#xff1a;使用java.exe命令解释运行字节码文件。格式&#xff1a;…

Linux笔记3

目录 一、root用户1.su命令2.sudo命令 二、vi/vim编译器1.三种工作模式2.命令模式3.底线命令模式 三、用户和用户组1.用户组管理2.用户管理3.getent命令 四、权限1.查看权限控制信息2.chmod 命令3.chown 命令 五、常用快捷键1.Ctrlc2.Ctrld3.历史命令4.光标移动快捷键 一、root…

亚马逊云科技和安恒信息,发布云原生SaaS主机安全和云原生堡垒机

4月19日&#xff0c;安恒信息首次举行了以“新见未来 实现梦想”为主题的年度新品发布会。来自产业界、投资界、财经界、媒体界等多方代表共同见证了本次发布会。这也是安恒信息自成立以来&#xff0c;首次大规模、高密度地发布新品。 联合产品发布 云原生SaaS主机安全与云原…

Linux 指令(一)+完整思维导图+实图例子+深入细节+通俗易懂建议收藏

绪论 在上一章&#xff0c;我们已经将Linux环境的安装起来了&#xff0c;从本章开始&#xff0c;我们将正式的进入到Linux的学习&#xff0c;Linux的学习还是比较的枯燥无味的&#xff0c;但我们要吃得苦中苦&#xff0c;让我们一起加油&#xff0c;进大厂拿到心仪的offer&…