在Mybatis中写动态sql这些标签:if、where、set、trim、foreach、choose的作用是什么,怎么用?

这篇具有很好参考价值的文章主要介绍了在Mybatis中写动态sql这些标签:if、where、set、trim、foreach、choose的作用是什么,怎么用?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在 MyBatis 中,您可以使用动态 SQL 标签来构建灵活的 SQL 查询,以根据不同的条件生成不同的查询语句。以下是这些标签的作用和用法:

1. **`<if>` 标签:** 用于根据某个条件动态地包含或排除 SQL 片段,test:可以写条件。

   示例用法:
   
   ```xml
   <select id="getUserList" parameterType="Map" resultMap="UserResultMap">
       SELECT * FROM users
       <where>
           <if test="username != null">AND username = #{username}</if>
           <if test="email != null">AND email = #{email}</if>
       </where>
   </select>
   ```
   
2. **`<where>` 标签:** 用于在 SQL 查询中生成 `WHERE` 子句,并自动处理不必要的 `AND` 或 `OR`。

   示例用法:
   
   ```xml
   <select id="getUserList" parameterType="Map" resultMap="UserResultMap">
       SELECT * FROM users
       <where>
           <if test="username != null">AND username = #{username}</if>
           <if test="email != null">AND email = #{email}</if>
       </where>
   </select>
   ```
   
3. **`<set>` 标签:** 用于在更新语句中动态生成 `SET` 子句,根据传入的参数来更新特定的列。

   示例用法:
   
   ```xml
   <update id="updateUser" parameterType="User">
       UPDATE users
       <set>
           <if test="username != null">username = #{username},</if>
           <if test="email != null">email = #{email},</if>
       </set>
       WHERE id = #{id}
   </update>
   ```

4. **`<trim>` 标签:** 用于在 SQL 语句中修剪多余的空白字符和逗号,并可以根据条件自定义修剪的内容。

prefix:在sql动态条件加前缀

suffix:在sql动态条件加后缀

prefixOverrides:删除sql动态条件前缀内容

suffixOverrides:删除sql动态条件后缀内容

   示例用法:
   
   ```xml
   <select id="getUserList" parameterType="Map" resultMap="UserResultMap">
       SELECT * FROM users
       <where>
           <trim prefix="AND" prefixOverrides="OR">
               <if test="username != null">OR username = #{username}</if>
               <if test="email != null">OR email = #{email}</if>
           </trim>
       </where>
   </select>
   ```

5. **`<foreach>` 标签:** 用于循环遍历集合或数组,生成多个 SQL 片段。

   示例用法:
   
   ```xml
   <select id="getUserListByIds" parameterType="List" resultMap="UserResultMap">
       SELECT * FROM users
       WHERE id IN
       <foreach collection="list" item = "listParam" open = "(" separator = "," close = ")">
           #{listParam}
       </foreach>
   </select>
   ```

6. **`<choose>` 标签:** 类似于 Java 中的 `switch` 语句,根据条件选择其中一个分支进行处理。

 choose(类似switch)

when标签:   类似switch的case分支 ,   需要写test属性

otherwise(否则):   类似switch的default分支

   示例用法:
   ```xml
   <select id="getUserList" parameterType="Map" resultMap="UserResultMap">
       SELECT * FROM users
       <where>
           <choose>
               <when test="username != null">AND username = #{username}</when>
               <when test="email != null">AND email = #{email}</when>
               <otherwise>AND status = 1</otherwise>
           </choose>
       </where>
   </select>
   ```

这些动态 SQL 标签允许您在 MyBatis 中根据不同的条件构建动态的查询语句,以实现更灵活的数据库操作。您可以根据具体的业务需求选择适当的标签来创建定制的查询逻辑。文章来源地址https://www.toymoban.com/news/detail-675097.html

到了这里,关于在Mybatis中写动态sql这些标签:if、where、set、trim、foreach、choose的作用是什么,怎么用?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用动态sql时,if标签不起作用

    目录 场景: 问题分析: 问题解决: 简单讲一下应用场景 我拿到一个项目,完成后端数据处理,在进行可选条件查询时,使用动态sql  在mapper.xml中我先是这么写的  然后,就出现if标签失效的情况,关键是它有时候也会返回到前端数据,给我都搞蒙了 反复查看,加上网搜索

    2024年01月23日
    浏览(28)
  • MyBatis:动态 SQL 标签

    MyBatis 动态 SQL 标签 ,是一组预定义的标签,用于构建动态的 SQL 语句,允许在 SQL 语句中使用条件、循环和迭代等逻辑。通过使用动态 SQL 标签,开发者可以根据不同的条件和参数生成不同的 SQL 语句,实现更加灵活的数据访问操作。但是,需要谨慎处理 SQL 注入问题,确保所

    2024年02月04日
    浏览(25)
  • 【MyBatis】四、MyBatis中的动态SQL标签

    动态SQL语句是动态的拼接Mybatis中SQL语句的情况,可以动态的在Mybatis中使用SQL if语句的xml文件: 传入对象来进行调用: where标签中的and会被自动去掉,并且若没有合适的内容,则不会添加where 注意:where标签只能去掉条件前的and、五福去掉条件后的and trim标签会在其内容

    2024年02月09日
    浏览(28)
  • Mybatis是什么?Mybatis中动态sql常用标签有哪些?

    Mybatis是什么? Mybatis是一种开源的Java持久层框架,它可以将SQL语句和Java代码进行分离,使得开发人员可以更加专注于业务逻辑的实现。与Hibernate等ORM框架不同的是,Mybatis使用XML或注解的方式来描述SQL语句,这种方式更加灵活,因此在一些需要高度自定义SQL语句的场景下,

    2024年02月05日
    浏览(35)
  • MyBatis 动态SQL的标签有哪些?如何使用?

    目录 1. MyBatis 动态SQL标签有什么用? 2. if 标签 3. where 标签 4. trim 标签 5. choose,when,otherwise 6. foreach 1. MyBatis 动态SQL标签有什么用? 我来说一个场景大家就明白了,如下图,大家应该在铁路12306上买过火车票吧,可以看到,我们在选票的时候可以对车做很多种选择和筛选,系

    2024年02月11日
    浏览(26)
  • MyBatis 动态SQL之<choose><when><otherwise>标签-

    MyBatis 中动态语句 choose-when-otherwise 类似于 Java 中的 switch-case-default 语句。由于 MyBatis 并没有为 if 提供对应的 else 标签,如果想要达到…… 的效果,可以借助 、、 来实现。 hoose 标签按顺序判断其内部 when 标签中的判断条件是否成立,如果有一个成立,则执行相应的 SQL 语句

    2024年02月09日
    浏览(33)
  • 数据库操作不再困难,MyBatis动态Sql标签解析

    MyBatis缓存原理 Mybatis的CachingExecutor与二级缓存 Mybatis plugin 的使用及原理 MyBatis四大组件Executor、StatementHandler、ParameterHandler、ResultSetHandler 详解 MyBatis+Springboot 启动到SQL执行全流程 使用MyBatis,或者MyBatis-plus,有一项重要的开发技能就是写动态sql,动态sql能帮我们省略很多复杂逻

    2024年02月12日
    浏览(32)
  • MyBatis动态sql之批量修改、批量新增(使用foreach标签的一条sql语句解决)

            批量新增和批量修改在业务中是很常见的,一条sql访问数据库和通过代码循环体中循环访问数据库做单个数据新增修改相比较下:一条sql访问数据库性能上明显提升,代码且简洁明了 1、Mapper.java中 说明: 参数是list  2、Mapper.xml中 说明: 通过trim标签拼接前后缀和

    2024年02月10日
    浏览(36)
  • IDEA全局设置MyBatis中写SQL语句提示

    第一步:把这两个设置改成MySQL即可:   第二步:找到设置=编辑器=语言注入=店家加号,选择MySQL 

    2024年02月13日
    浏览(29)
  • MyBatis的代理开发方式、动态sql语句和typeHandlers和plugins标签实战

    接上篇博客: MyBatis基础知识和快速入门、MyBatis核心配置文件讲解,本文继续讲解MyBatis动态SQL语句、typeHandlers和plugins标签。 传统开发方式 编写UserDao接口 编写UserDaoImpl实现 mapper文件 测试传统方式 代理开发方式 代理开发方式介绍 采用 Mybatis 的代理开发方式实现 DAO 层的开发

    2023年04月27日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包