③mybatis的动态sql

news/2024/11/9 9:50:34/

        很多时候需要实现多条件查询,手动判断拼接sql有些麻烦

        mybatis提供了一个动态sql实现多条件查询的方法

1.if标签

        使用if元素可以根据条件来包含或排除某个SQL片段

    <select id="search" resultType="Household">select id,idcard,name,cellphone,gender,state from householdwhere state='0'<if test="idcard!=null and idcard.length()!=0">and idcard like concat('%',#{idcard},'%')</if><if test="name!=null and name.length()!=0">and name like concat('%',#{name},'%')</if></select>

2.where标签

         <where>如果该标签中有任意一个条件成立,会自动给sql加上where关键字,还会自动去掉多余的and or

<select id="getUserList" resultType="User">SELECT * FROM users<where><if test="name != null">AND name = #{name}</if><if test="age != null">AND age = #{age}</if></where>
</select>

3.foreach 标签

        foreach元素用于遍历集合或数组,并将集合中的元素作为SQL语句的一部分

        foreach经常用来遍历 list和数组,如果传的参数是list,
        collection的值就是list,是数组就用array
        open是以什么开始,close是以什么结束,separator是元素之间以什么分隔

<!--foreach经常用来遍历 list和数组,如果传的参数是list,collection的值就是list,是数组就用arrayopen是以什么开始,close是以什么结束,separator是元素之间以什么分隔--><update id="delSelection" >update household set state = '1' where in<foreach collection="array" item="id"open="(" separator="," close=")">#{id}</foreach></update>

4.choose、when、otherwise标签

        用于构建类似于Java中的switch语句的选择逻辑

<select id="getUser" parameterType="int" resultType="User">SELECT * FROM usersWHERE 1=1<choose><when test="userId != null">AND id = #{userId}</when><when test="username != null">AND username = #{username}</when><otherwise>AND status = 'ACTIVE'</otherwise></choose>
</select>

5.trim、where、set标签

        用于动态地生成SQL的开头或结尾部分

        trim 元素可用于修剪生成的 SQL 语句中的多余部分

trim 元素的属性
prefix指定要在生成的 SQL 语句开头添加的字符串。
suffix指定要在生成的 SQL 语句末尾添加的字符串。
prefixOverrides指定要从生成的 SQL 语句开头移除的字符串。
suffixOverrides指定要从生成的 SQL 语句末尾移除的字符串。
<update id="updateUser" parameterType="User">UPDATE users<trim prefix="SET" suffixOverrides=","><if test="name != null">name = #{name},</if><if test="age != null">age = #{age},</if></trim>WHERE id = #{id}
</update>

        set 元素可用于动态生成 SQL 语句中的 SET 子句

<update id="updateUser" parameterType="User">UPDATE users<set><if test="username != null">username = #{username},</if><if test="password != null">password = #{password},</if></set>WHERE id = #{id}
</update>

http://www.ppmy.cn/news/669517.html

相关文章

prometheus在springboot应用中埋点

添加依赖 <!-- prometheus指标埋点 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>io.micrometer</groupI…

java方法的return有什么作用_java中,return和return null有什么区别吗?

定位以及z-index 定位 定位用来控制元素的位置 定位的关键字是position,position有4个值,分别是relative,absolute,static,fixed当元素定位以后,元素有4个值可以用,分别是le ... JavaScript 与函数式编程 原文:https://bethallchurch.github.io/JavaScript-and-Functional-Prog…

BWT算法解析及Java语言实现

BWT算法将原来的文本转换为一个相似的文本&#xff0c;转换后使得相同的字符位置连续或者相邻&#xff0c;之后可以使用其他技术如&#xff1a;Move-to-fronttransform 和 游程编码 进行文本压缩。 BWT原理&#xff1a; 1. BWT编码 ①对需要转换的字符串后加“$”符号&#…

BWT (Burrows–Wheeler_transform) 解码分析

原文地址&#xff1a; BWT (Burrows–Wheeler_transform)数据转换算法 原文讲解十分详细&#xff0c;但关键地方有点绕&#xff0c;故作分析注释 因为进行的是循环移位&#xff0c;且是循环左移注意下面的性质&#xff1a;   1、L的第一个元素是Text中的最后一个元素   …

BWT算法

BWT算法 来自mengbi_er BWT算法可以将原文本转换成相似文本&#xff0c;并且可以用其他技术进行压缩。 编码方式 &#xff08;1&#xff09; 将文本串后加一个文本中不会出现的字符‘#’。&#xff08;定义#小于文本串中任一字符&#xff09; &#xff08;2&#xff09; 将…

一阶BWT过程

BWT是一种以数据块为操作对象的可你的数据变换方法&#xff0c;其核心思想是对字符串循环移动后得到字符矩阵进行排序和变换。也就是对参考基因组进行了一次有规律的重新排序&#xff0c;变换的目的就是为了方便后续进行查找。 一阶BWT构造和查找的具体过程如下&#xff1a; 一…

C++读取BWT901CL传感器的数据

1 简述 最近在学习人体姿态设别的算法。想着买个角度传感器去尝试下。这个传感器最好是无线的带电池的&#xff0c;这样对我来说是比较方便使用的。我就在淘宝上找到一个一款BWT901CL&#xff0c;这个角度传感器。这个模块挺好用的&#xff0c;有加速度、角速度、角度。而且都…

学习 STM32之九轴姿态传感器(BWT901CL)串口通信读取数据

由于个人应用到3轴传感器&#xff0c;所以买了直接买了一个9轴的&#xff0c;用于学习STM32Core平台串口2连接维特智能串口Normal协议&#xff0c;然后通过串口1直接打印数据&#xff0c;接收传感器数据和与传感器进行通信&#xff1b;需要看产品文档的可以直接官网搜索文档&am…