一.Mapper文件的补充细节

a) Xml的特殊字符

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

i.  <   <  
ii. > >

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语句所示:

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

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

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

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

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

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

如下图所示:

collection:相当于集合名,

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

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

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

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

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