Mybatis中$ {} 和 # {}的区别,动态SQL之if、where、set、trim、foreach标签的使用

简介: Mybatis中$ {} 和 # {}的区别,动态SQL之if、where、set、trim、foreach标签的使用

一.Mapper文件的补充细节

a) Xml的特殊字符

在mapper文件中,小于号用& lt;代替, 大于号用 & gt;代替

i.  <   &lt;  
ii. >  &gt; 

b) $ {} 和 # {}的区别

i. 使用上,$ {}要获取的参数值,对应的参数必须使用Param注解

ii. 底层上,

${}使用字符串拼接

#{}使用?占位符

  1. 字符串拼接,可以拼接表名 列名 sql关键字
  2. ?占位符,只能绑定数据,但可以避免sql注入攻击

二.动态SQL

什么是动态SQL?就是能够根据不同的条件,产生不同 的SQL语句。


比如我们常见的多条件搜索框,可以根据姓名、性别、年龄、工资范围等按照一定的条件进行搜素,

但如果我只输入姓名搜素呢,或者按照姓名+年龄进行搜素呢,这样排列组合情况就太多了,我们不可能一个条件去写一个SQL的,

所以就需要我们根据用户输入的条件来动态的生成一条SQL语句。


Mapper文件中动态SQL常用的几个标签

< if> 作用:

满足条件时执行sql,不满足则不执行

< where> 作用:

  1. 会自动删除if动态sql产生的多余的and or前缀
  2. 会在if动态sql语句前添加where关键字


如下SQL语句所示:

< set>作用:
1.会自动if动态sql产生的多余的逗号后缀
2.会在if动态sql语句前添加set关键字

< trim>作用:
可以自定义前缀和后缀:

< foreach> 循环遍历,
常用来做批量删除的时候用

如下图所示:

collection:相当于集合名,

item表示集合中的一个元素,

open是循环之前要加的东西,

close是循环结束的时候要加的东西,

separator:元素间使用什么分隔。

目录
相关文章
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
文章介绍了MyBatis中动态SQL的用法,包括if、choose、where、set和trim标签,以及foreach标签的详细使用。通过实际代码示例,展示了如何根据条件动态构建查询、更新和批量插入操作的SQL语句。
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
|
SQL Java 数据库连接
mybatis动态SQL常用语法总结
MyBatis 使用 OGNL 表达式语言处理动态SQL,如 `if` 标签进行条件判断,`choose`、`when`、`otherwise` 实现多条件选择,`where`、`set` 管理SQL关键字,`trim` 提供通用修剪功能,`foreach` 遍历集合数据。`sql` 和 `include` 用于代码重用,`selectKey` 处理插入后的返回值。参数传递支持匿名、具名、列表、Map、Java Bean和JSON方式。注意SQL转义及使用合适的jdbcType映射Java类型。
|
SQL 分布式计算 前端开发
MaxCompute操作报错合集之SQL脚本设置参数set odps.mapred.reduce.tasks=18;没有生效,是为什么
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
476 5
|
SQL 缓存 Java
Java框架之MyBatis 07-动态SQL-缓存机制-逆向工程-分页插件
Java框架之MyBatis 07-动态SQL-缓存机制-逆向工程-分页插件
|
SQL Java 数据库连接
JavaWeb基础第三章(MyBatis的应用,基础操作与动态SQL)
JavaWeb基础第三章(MyBatis的应用,基础操作与动态SQL)
|
6月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
393 1
|
9月前
|
存储 缓存 JavaScript
Set和Map有什么区别?
Set和Map有什么区别?
616 1
|
6月前
|
存储 算法 容器
set_map的实现+set/map加持秒杀高频算法题锻炼算法思维
`set`基于红黑树实现,支持有序存储、自动去重,增删查效率为O(logN)。通过仿函数可自定义排序规则,配合空间配置器灵活管理内存。不支持修改元素值,迭代器失效需注意。`multiset`允许重复元素。常用于去重、排序及查找场景。
|
10月前
|
存储 JavaScript 前端开发
for...of循环在遍历Set和Map时的注意事项有哪些?
for...of循环在遍历Set和Map时的注意事项有哪些?
677 156
|
编译器 C++ 容器
【c++丨STL】基于红黑树模拟实现set和map(附源码)
本文基于红黑树的实现,模拟了STL中的`set`和`map`容器。通过封装同一棵红黑树并进行适配修改,实现了两种容器的功能。主要步骤包括:1) 修改红黑树节点结构以支持不同数据类型;2) 使用仿函数适配键值比较逻辑;3) 实现双向迭代器支持遍历操作;4) 封装`insert`、`find`等接口,并为`map`实现`operator[]`。最终,通过测试代码验证了功能的正确性。此实现减少了代码冗余,展示了模板与仿函数的强大灵活性。
342 2