Mybatis动态sql标签说明

MyBatis:动态SQL高级标签使用方法指南 本文介绍了Springboot项目中SQL映射方式、动态SQL和支持动态SQL的核心标签.MyBatis的动态SQL功能允许开发者根据不同条件灵活构建SQL语句,避免手动拼接字符串,另外,常用查询列和查询SQL还可以借助动态SQL实现复用,提高XML中SQL代码的可维护性和安全性。 阅读详情

一、简述

1️⃣config 文件常用标签
properties 标签:引入外部 properties 文件资源。
settings 标签:设置 mybatis 全局行为。
typeAlias 标签:减少 mapper 文件配置,给模型类起别名。
transactionManager 标签:配置 mybatis 的事务行为(JDBC|MANAGED)
dataSource 标签:配置 mybatis 数据源(POOLED|UNPOOLED|JNDI)
mappers 标签:引入Mapper文件或接口(url|resources|class|package)
2️⃣Mapper 文件常用标签
a. resultMap 标签:对查询的结果进行封装处理
简单 pojo 类型处理,只需处理表中字段和对像中属性映射处理。
包装 pojo 类型处理,使用 Collection 处理包装集合类型的对像,association 处理包含单个 pojo 对像。
Collection 处理的两种方式:
1.连接查询 join
2.通过多条 select 查询的方式。
association 处理两种方式:
1.连接查询 join
2.通过多条 select 查询的方式。

discriminor 鉴别器:根据查询结果中某个字段作为标识符,根据其查询的值,进行分类封装处理。

b.主键映射策略:如果主键由数据库生成,而不是手动指定,怎么获取该主键的问题。
一般使用 selectKey 标签处理。
3️⃣自定义封装结果集(了解):
按照自已定义方式把数据库返回结果封装成自己想要的类型。
一般自己建立结果的处理类,实现 ResultHandler 接口,重写里面的方法。
一般在select(“statementId”,params,ResultHandler实现类对像)
4️⃣解决什么样问题
用来解决 sql 语句 where 后条件的拼接问题,
使用流程控制标签来完成条件的拼接:if 标签,where 标签,foreach 标签。。。。
5️⃣常用动态 sql 标签
1.if 标签
2.choose when otherwise 标签
3.trim 标签
4.foreache 标签
5.where 标签
6.set 标签

二、if 标签:类似于 Java 中的 if 语句

<select id="selectByItem" parameterType="User" resultType="User">
    select * from USER
    where 1=1
    <!--mybatis如果是低版本时,如果是整形值,不要用‘’来判断;3.4.6版本没有问题-->
    <if test="id != null and id !=''">
        and id = #{id}
    </if>
    <if test="username !=null and username !=''">
        and username=#{username}
    </if>
</select>

三、where标签

根据查询条件是否存在,来决定是否生成 where 字符串。可以去除 where 后面紧跟的 sql 关键字, 如 or 或 and。

<!-- where标签 -->
<select id="selectByItem2" parameterType="User" resultType="User">
    select * from USER
    <where>
        <if test="id !='' and id != null">
            and id = #{id}
        </if>
        <if test="username !=null and username !=''">
            and username=#{username}
        </if>
    </where>
</select>

四、 choose when otherwise

和 Java 中 switch case 作用类似。不管有多少条件满足,只拼接其中一个条件。

<!-- choose when otherwise -->
<select id="selectByItem3" parameterType="User" resultType="User">
    select * from USER
    <where>
        <choose>
            <when test="id !='' and id != null">
                and id = #{id}
            </when>
            <when test="username !=null and username !=''">
                and username=#{username}
            </when>
            <otherwise>
                and 1=1
            </otherwise>
        </choose>
    </where>
</select>

五、Set 标签

set 用法和上面 where 用法一致。可以生成 update 语句中的 set 关键字,也可去除 sql 关键字,如逗号(set 标签中 sql 字符串最后的逗号)

<update id="update" parameterType="User">
    update USER
    <set>
        <if test="username !=null and username !=''">
            username = #{username},
        </if>
        <if test="password !=null and password !=''">
            password=#{password},
        </if>
    </set>
    where id = #{id}
</update>

六、foreach 标签

类似于 Java 中的 foreach 迭代。把传入 sql 语句中的数组类型或集合类型数据进行遍历操作。

<!-- 接口中参数为数组时,collection值必须为array -->
<select id="selectByIds" resultType="User">
    select * from USER
    <foreach collection="array" item="id" open="where id in(" separator="," close=")">
        #{id}
    </foreach>
</select>
​
<!-- 接口中参数为pojo,collection值必须为该数组类型属性名 -->
<select id="selectByIds2" resultType="User" parameterType="User">
    select * from USER
    <foreach collection="ids" item="id" open="where id in(" separator="," close=")">
        #{id}
    </foreach>
</select>

七、trim 标签:可以删除 sql 语句指定的字符串。

<!--
 prefix="前缀":在后面sql字符串前面拼接指定的前缀。
 prefixOverrides="要去除的字符":把紧跟着前缀后面的字符去掉。
 suffix="后缀":在后面sql字符串后面拼接指定的后缀。
 suffixOverrides="要去除的字符":把紧跟着后缀前面的字符去掉。
-->
​<update id="update2" parameterType="User">
    update USER
    <trim prefix="set" prefixOverrides=",">
        <if test="username !=null and username !=''">
            ,username = #{username}
        </if>
        <if test="password !=null and password !=''">
            ,password=#{password}
        </if>
        <if test="address !=null and address !=''">
            ,address=#{address}
        </if>
    </trim>
    where id = #{id}
</update>

<update id="update3" parameterType="User">
    update USER
    <trim prefix="set" suffixOverrides=",">
        <if test="username !=null and username !=''">
            username = #{username},
        </if>
        <if test="password !=null and password !=''">
            password=#{password},
        </if>
        <if test="address !=null and address !=''">
            address=#{address},
        </if>
    </trim>
    where id = #{id}
</update>
ANPC三电平拓扑:两种调制方式解析 ANPC结构是基于“I”型NPC结构(下面讲NPC如不特殊说明,均指的是“I”型结构NPC)发展出来的一种改进型。我们在讲NPC结构的时候会谈到他的一个缺点就是损耗分布不均匀,会导致温升不均衡,进而限制模块的功率输出能力。而ANPC结构由于多了两个开关管以及相应的两个中性点换流回路(如下图),可以更加灵活任意的配置开关管可以使损耗没有那么的不均衡,从而能一定程度上提高模块的输出功率。ANPC拓扑结构图以及增加的环流回路。 阅读详情

相关推荐

01. VBA从入门到精通——录制宏、窗口、快捷键

excel表功能区右击→常用→选择显示开发工具选项→确定Visual Basic:打开VBA窗口宏:查看要录制的宏录制宏:准备录制宏使用相对引用:录制宏的时候对单元格的引用做一个设置宏安全性:对宏的使用做安全设置,一般设置为禁用所有宏,并发出通知,此时打开带有宏代码的工作薄时会出现警告标记,如果宏可信就选择启动。

weixin_43812198的博客 1696

Mybatis的常用的9种动态sql标签

一般会加载动态条件中配合使用, 在有条件的情况下它会自动在所有条件的前面加上。分割符设置(每次循环在结尾添加什么分隔符,会自动去除最后一个结尾的分隔符)参数对象中计算表达式的值,根据表达式的值动态拼接。它的功能比较灵活、广泛。关键字, 还会去掉所有条件前面的。范围查询 使用$可以实现但是有。每次循环使用的接收变量。前面加上去除指定的字符串。后面加上去除指定的字符串。需要循环的集合的参数名字。循环开始添加的字符串。循环结束添加的字符串。前面加上指定的字符串。后面加上指定的字符串。

林夕 8499

LSCM最小二乘保角参数化

LSCM最小二乘保角参数化 最小二乘思想 已知一组点的数据(x,y) x x1x_1x1​ x2x_2x2​ x3x_3x3​ … xnx_nxn​ y y1y_1y1​ y2y_2y2​ y3y_3y3​ … yny_nyn​ 可以近似为线性关系 y=ax+by=ax+by=ax+b ,目标为确定常数 aaa , bbb ; 解法:找到 aaa , bbb ,使得所有 yiy_iyi​ 与 axi+bax_i+baxi​+b 偏差的平方和 Q=∑i=1n(yi−axi−b)2 Q=\s

weixin_49732532的博客 4252

MyBatis 中 9 种动态 SQL 标签

Mybatis动态sql可以让我们在Xml映射文件内,以标签的形式编写动态sql,完成逻辑判断和动态拼接sql的功能,Mybatis提供了9种动态sql标签 trim|where|set|foreach|if|choose|when|otherwise|bind。

我的博客 3310

保姆级教程:给你的Jetson Orin NX换个‘大房子’——新SSD初始化与JetPack 6.x刷机全流程

本文提供Jetson Orin NX存储升级与JetPack 6.x系统部署的完整指南,涵盖SSD选型、分区策略、刷机流程及性能优化技巧。通过实测数据展示如何提升AI模型加载速度33%,并分享温度管理、I/O调度等实战经验,助力开发者突破边缘计算存储瓶颈。

weixin_42715608的博客 156

ESP32实战指南:SPI驱动ADXL345三轴加速度传感器的精准数据采集与姿态解算

本文详细介绍了如何使用ESP32通过SPI接口驱动ADXL345三轴加速度传感器,实现精准数据采集与姿态解算。从硬件连接到SPI通信优化,再到数据处理和低功耗策略,提供了全面的实战指南。特别适合物联网开发者和硬件工程师参考,帮助快速掌握传感器数据采集技术。

vim8coder的博客 1042

Mybatis 动态 SQL

mybatis 动态sql

qq_57197323的博客 1030

头歌平台-人工智能导论实验(人脸识别)

答案仅供参考,自己动手丰衣足食!!!

qq_52119136的博客 3026

Mybatis动态SQL标签

动态SQL是MyBatis的一个强大特性,可以运用动态SQL语句标签方便我们在SQL中实现各种逻辑1.标签。

qq_71849595的博客 1220

sam3.1 部署笔记 推理封装

sam3.1 部署笔记

jacke121的专栏 423

基于STM32设计的遥控小车(手机APP+GPS+温湿度+ESP8266)

一、环境介绍 小车主控MCU: STM32F103ZET6 STM32程序开发IDE: keil5 STM32程序风格: 采用寄存器方式开发,注释齐全,执行效率高,方便移植 手机APP: 采用QT设计,程序支持跨平台编译运行(Android、IOS、Windows、Linux都可以编译运行,对应平台上QT的环境搭建,之前博客已经发了文章讲解) 硬件包含: 淘宝购买的完整一套4轮遥控小车(采用STM32F103ZET6作为主控板)、DHT11温湿度传感器、中科微GPS模块、ESP8266 ...

6万+

Mybatis常用动态sql标签、注意事项及使用案例总结

Mybatis常用动态sql标签、注意事项及使用案例总结

m0_67907445的博客 2853

基于PUMA实现DOA估计-附Matlab代码

具体而言,PUMA算法将接收的信号分别在时域和频域上进行处理,并结合平稳合成(SS)和平稳子空间(SSP)方法,以提高估计精度。该算法将传统的基于协方差矩阵的最大似然(ML)和最小二乘(LS)方法扩展到了非均匀线性阵列(ULA)上,并通过对信号分离和DOA估计的优化,达到了高精度和高分辨率的效果。方位角(DOA)估计是信号处理中的一个重要问题,它的目的是确定从多个传感器接收到的信号的方向。本文将介绍如何使用基于PUMA的方位角估计算法来实现DOA估计,并附有相应的Matlab代码实现。

Byte_O_O的博客 496

至少写出5个MyBatis中动态SQL标签并说明每个标签的作用。

(1)sql标签:在使用sql片段时使用include标签通过sql片段的id进行引用,sql片段的id在当前空间是唯一的(2)where if标签:同时使用可以进行查询,模糊查询(3)set标签:可以用来修改(4)choose语句:不用的查询,如果想用一个,查询条件有一个满足即可(5)trim:标记是一个格式化的标记,可以完成。

qq_62315465的博客 284

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【JavaEE】Mybatis 动态SQL

Mybatis实现动态SQL

yj20040627的博客 1916

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

MyBatis 动态SQL详解

注意,``失败后, `` 关键字只会去掉库表字段赋值前面的and,不会去掉语句后面的and关键字,即注意,`` 只会去掉`` 语句中的最开始的and关键字。在实际开发中会遇到许多相同的SQL,比如根据某个条件筛选,这个筛选很多地方都能用到,我们可以将其抽取出来成为一个公用的部分,这样修改也方便,一旦出现了错误,只需要改这一处便能处处生效了,此时就用到了这个标签了。这个标签和是天仙配,是共生的,include用于引用sql标签定义的常量。

Coisini__S的博客 1268

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Mybaits动态sql之sql标签

文章目录Mybaits动态sql之sql标签 Mybaits动态sql之sql标签 ​ 使用sql标签可以重复利用该标签中的sql语句 举一个例子,重复利用 id,name,age <sql id="baseSql"> id , name,age </sql> <select id="query" resultType="user" paramet...

qq_32640013的博客 220

MyBatis动态SQL(一)

MyBatis 的强大特性之一便是它的动态 SQL。动态 SQL 元素和 JSTL 或基于类似 XML 的文本处理器相似。在 MyBatis 之前的版本中,有很多元素需要花时间了解。MyBatis 3 大大精简了元素种类,现在只需学习原来一半的元素便可。MyBatis 采用功能强大的基于 OGNL 的表达式来淘汰其它大部分元素。 1.if标签 映射文件配置: <select id="q...

weixin_42510923的博客 164

别再手动拼接 SQL 了,MyBatis 动态 SQL 写法应有尽有,建议收藏!

在实际开发中会遇到许多相同的SQL,比如根据某个条件筛选,这个筛选很多地方都能用到,我们可以将其抽取出来成为一个公用的部分,这样修改也方便,一旦出现了错误,只需要改这一处便能处处生效了,此时就用到了。有时候,我们不想用到所有的查询条件,只想选择其中的一个,查询条件有一个满足即可,使用 choose 标签可以解决此类问题,类似于 Java 的 switch 语句。原理为:使用 OGNL 从 sql 参数对象中计算表达式的值,根据表达式的值动态拼接 sql,以此来完成动态 sql 的功能。

2301_78457286的博客 859

MyBatis动态SQL(认真看看, 以后写SQL就爽多了)

MyBatis 令人喜欢的一大特性就是动态 SQL。在使用 JDBC 的过程中, 根据条件进行 SQL 的拼接是很麻烦且很容易出错的。MyBatis 动态 SQL 的出现, 解决了这个麻烦。MyBatis通过 OGNL 来进行动态 SQL 的使用的。

程序员高级码农的博客 1193

详解MyBatis的动态SQL实现原理

MyBatis提供了强大的动态SQL语句生成功能,以应对复杂的业务场景,本篇文章将结合MyBatis解析SQL语句的过程对MyBatis中对,,等动态SQL标签的支持进行分析。MyBatis3.5.6MyBatis会为映射文件中的每个CURD标签节点里的SQL语句生成一个SqlSource如果是静态SQL语句,那么会生成;如果是动态SQL语句,则会生成。MyBatis在生成SqlSource时,会为CURD标签节点的每个子节点都生成一个SqlNode。

Java技术攻略的博客 967

MyBatis-动态sql

动态sql 什么是动态sql: 同一个dao的方法, 根据不同的条件可以表示不同的sql语句, 主要是where部分有变化 使用mybatis提供的标签,实现动态sql的能力, 主要讲 if ,where ,foreach, sql。 使用动态sql的时候, dao方法的形参使用java对象。 1 if 标签 语法: <if test="boolean判断结果"> sql 代码 </if> 在mapper文件中 <select id="selectStudent"

qq_44877579的博客 183

MyBatis 之 动态 SQL

动态 SQL

lfm1010123的博客 2134

【mybatis】连接池与动态SQL

在不同条件下拼接不同的sql。Mybatis框架的动态sql技术是一种根据特定条件动态拼接SQl语句的功能,他存在的意义是为了解决拼接SQL语句字符串时的痛点问题。比如我们在用淘宝之类的软件在进行商品属性选择的时候,我们会发现我们可以选择的商品的属性有很多条件,其中一些条件可以选择也可以不选择,那么如果使用传统的方式进行查询,反而在拼接sql的时候会造成一些列的问题。

m0_75163045的博客 1028

mybatis if test 多条件_汇总篇,Mybatis动态SQL详解,值得收藏

作者:阿进的写字台链接:https://www.jianshu.com/p/ffe5ebe17c3aMyBatis 令人喜欢的一大特性就是动态 SQL。在使用 JDBC 的过程中,根据条件进行 SQL 的拼接是很麻烦且很容易出错的。MyBatis 动态 SQL 的出现,解决了这个麻烦。MyBatis 通过 OGNL 来进行动态 SQL 的使用的。目前,动态 SQL 支持以下几种标...

weixin_39735288的博客 2270

动态sql_MyBatis动态SQL,写SQL更爽

作者:阿进的写字台链接:https://www.cnblogs.com/homejim/p/9909657.htmlMyBatis 令人喜欢的一大特性就是动态 SQL。在使用 JDBC 的过程中, 根据条件进行 SQL 的拼接是很麻烦且很容易出错的。MyBatis 动态 SQL 的出现, 解决了这个麻烦。MyBatis通过 OGNL 来进行动态 SQL 的使用的。目前, 动态 SQL 支...

weixin_42466331的博客 89
上一篇: MySQL 面试汇总
下一篇: MySQL 的锁分类
JFS_Study
博客等级 码龄6年 363粉丝 359原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JFS_Study

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值