首页 > 其他分享 >Mybatis常用动态标签

Mybatis常用动态标签

时间:2024-07-25 15:26:04浏览次数:8  
标签:username 示例 标签 SQL Mybatis 动态 WHERE email

MyBatis 动态 SQL 标签指南

MyBatis 提供了一组动态 SQL 处理功能,允许在运行时构建 SQL 语句。这非常有用,因为你可以根据不同的条件组合查询。下面是常用的动态 SQL 标签及其使用方法。

<if> 标签

  • 作用:根据表达式的结果决定是否包含某个 SQL 片段。
  • 属性test 属性用于设置判断条件。

示例

<select id="findActiveUsers" parameterType="int" resultType="User">
  SELECT * FROM user
  WHERE status = 'active'
  <if test="age != null">
    AND age >= #{age}
  </if>
</select>

<choose>, <when>, <otherwise> 标签 标签

  • 作用:类似于 Java 中的 switch-case 语句,可以有多个 子元素和一个可选的 子元素。
  • 属性: 的 test 属性用于设置判断条件。

示例

<select id="findUserByCriteria" parameterType="map" resultType="User">
  SELECT * FROM user
  WHERE
  <choose>
    <when test="username != null">
      username = #{username}
    </when>
    <when test="email != null">
      email = #{email}
    </when>
    <otherwise>
      active = 1
    </otherwise>
  </choose>
</select>

<set> 标签

  • 作用:用于 UPDATE 语句中,自动处理 SET 子句中的逗号分隔符和前导逗号。
  • 属性:无需设置属性。

示例


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

<foreach> 标签

  • 作用:遍历集合或数组,生成 SQL 语句中的 IN 子句或列表等。
  • 属性:collection 表示要遍历的集合名称;item 表示每次循环的变量名;open 和 close 分别表示循环开始和结束的字符串;separator 表示循环体之间的分隔符。

示例

<select id="findUsersByIds" parameterType="list" resultType="User">
  SELECT * FROM user
  WHERE id IN
  <foreach item="item" index="index" collection="list" open="(" separator="," close=")">
    #{item}
  </foreach>
</select>

<bind> 标签

  • 作用:允许你在 SQL 语句之外绑定变量,常用于预编译 SQL 语句。
  • 属性:name 用于定义绑定变量的名称;value 用于设置绑定变量的值。

示例

<select id="findUserByName" parameterType="string" resultType="User">
  <bind name="likeStr" value="'%' + username + '%'"/>
  SELECT * FROM user WHERE username LIKE #{likeStr}
</select>

<trim> 标签

  • 作用:用于修剪 SQL 语句中的前缀或后缀,并能去除多余的逗号等。
  • 属性:prefix、suffix、prefixOverrides、suffixOverrides。

示例

<update id="updateUser" parameterType="User">
  UPDATE user
  <trim prefix="SET" suffixOverrides=",">
    <if test="username != null">
      username = #{username},
    </if>
    <if test="email != null">
      email = #{email},
    </if>
    <if test="status != null">
      status = #{status}
    </if>
  </trim>
  WHERE id = #{id}
</update>

标签:username,示例,标签,SQL,Mybatis,动态,WHERE,email
From: https://blog.csdn.net/weixin_44990907/article/details/140690699

相关文章

  • 在 Python 中动态定义文字字符串排列的并集
    我有一个字符串列表:strings=['a','b','c']我想声明列表中所有可能的有序对的Union类型。硬编码,这看起来像:Literal我如何动态定义CustomType=Literal['ab','ac','aa','ba','bb','bc�......
  • MultiLabelBinarizer:inverse_transform 如何获得根据概率排序的标签列表?
    我正在做多标签分类,我使用MultiLabelBinarizer将标签列表转换为零和一。我可以使用inverse_transform获取标签,这是超级的。但是,如果我想根据类的概率对类进行排名,即概率越高,即使(仅)在其概率小于0.5的情况下,对标签的判断也越好。我怎样才能得到根据概率返回标签的排......
  • JavaWeb项目中动态拼接sql语句
    业务需求描述:图中的查询框在分条件查询用户信息列表时,前端可能会传回一个条件或多个条件,此时要对不同的条件进行sql语句的不同书写,前端传的情况有很多种,所以如果分情况写sql语句会比较死,并且不够灵活,而且书写的内容会很多,所以要想一种办法来进行不同情况的sql语句拼接。参数......
  • SpringBoot + MyBatis 实现 MySQL 主从复制动态数据源切换
    概述在项目中的某些场景中,需要对数据库进行一些优化。常用的有如下的实现方法:读写分离、引入缓存技术、主从复制、分库分表等。今天来简单介绍一些如何在程序中实现动态切换数据源,可能某台服务器性能比较好,让流量多的方法执行切换到此数据源去操作等等。当然这种思想也可以扩展......
  • 代码随想录算法训练营第43天 | 动态规划7:买卖股票
    121.买卖股票的最佳时机https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/description/代码随想录https://programmercarl.com/0121.买卖股票的最佳时机.html#算法公开课and-sell-stock/description/122.买卖股票的最佳时机IIhttps://leetcode.cn/problems/be......
  • 代码随想录算法训练营第42天 | 动态规划7:打家劫舍入门
    打家劫舍https://leetcode.cn/problems/house-robber/description/代码随想录https://programmercarl.com/0198.打家劫舍.html打家劫舍-环形https://leetcode.cn/problems/house-robber-ii/description/代码随想录https://programmercarl.com/0213.打家劫舍II.html#思路......
  • 使用mybatis-plus拦截器MybatisPlusInterceptor进行分页查询案例
    在MyBatis-Plus中,分页功能通常是通过配置MybatisPlusInterceptor(或其前身PaginationInterceptor)来实现的,这是一个全局的拦截器,用于拦截MyBatis的SQL执行,并在其中添加分页逻辑。以下是一个使用MybatisPlusInterceptor进行分页查询的案例:添加依赖<dependencies><de......
  • 为什么在 tkinter 中的第二个窗口中使用 Tk() 而不是 Toplevel() 不允许我更新标签中
    首先,我是初学者,所以请不要指望这是专业的,但我需要帮助我想在我的新窗口中使用Tk()因为我要销毁主窗口并让第二个窗口运行时,当我使用它时,它不会让我的标签的文本变量更新,但通过使用toplevel()进行简单的更改就可以了,到底是怎么回事??Chatgpt没有帮助,他说了很多没有什么......
  • 使用seaborn和hue绘制条形图,如何获取百分比值形式的条形标签?
    我有以下数据集(df):``source_cityclassprice0BangaloreBusiness53671.8568981班加罗尔经济6526.2944102钦奈商务54036.7498193钦奈经济6497.5686224德里商业48614.1728935德里经济6275.0931366海得拉巴业务50357.5905317海得拉巴经济6......
  • C++语法10:C++实现0-1背包问题的动态规划解法
    动态规划(DynamicProgramming):解锁复杂问题的钥匙在算法设计与分析的广阔领域中,动态规划(DynamicProgramming,DP)无疑是一把锋利的剑,用于斩断复杂问题中缠绕的荆棘。它通过将大问题分解为小问题,并存储子问题的解来避免重复计算,从而高效地解决了一系列看似无解的难题。本文将从......