1 #{}与${}的区别
#{}是预编译处理,$ {}是字符串替换。
Mybatis 在处理#{}时,会将 sql 中的#{}替换为?号,调用PreparedStatement 的set 方法来赋值;
#{}语法可以对传入的参数进行自动类型转换,并且会在生成的SQL语句中将参数值转换为对应的数据库类型,但是并不是所有的参数都会被加上单引号,只有字符串类型的参数才会被加上单引号。
Mybatis 在处理
时,就是把
{}时,就是把
时,就是把{}替换成变量的值。
使用#{}可以有效的防止 SQL 注入,提高系统安全性。
2 mybatis association collection 的区别
在 MyBatis 中, 和 都是用来建立实体类之间的关联关系的标签,但它们之间的作用有所不同。
association:建立两个实体类之间的一对一关系,可以通过一个外键来关联两个表。在查询时,MyBatis 会将查询结果映射为一个包含两个实体类对象的 Java 对象。通常情况下,这个外键是存储在关联对象的表中的。
collection:建立两个实体类之间的一对多关系,可以通过一个中间表来关联两个表。在查询时,MyBatis 会将查询结果映射为一个包含一个实体类对象和一个 List 集合的 Java 对象。这个 List 集合包含的是关联对象的所有符合条件的记录。
简单来说,association 用于建立一对一的关系,而 collection 用于建立一对多的关系。