#{}和${}
项目 | #{} | ${} |
---|---|---|
执行顺序 | 动态解析 -> 预编译 -> 执行 | 动态解析 -> 编译 -> 执行 |
变量替换 | DBMS外 | DBMS内 |
加单引号 | 自动加 | 不加 |
防止sql注入 | 可以 | 不行 |
假设传入参数为1 | select * from t_user where uid = #{uid} select * from t_user where uid= ? select * from t_user where uid= '1’ | select * from t_user where uid = #{uid} select * from t_user where uid= '1’ select * from t_user where uid= ‘1’ |
单个参数 | 可任意 | 1、使用MyBatis默认值value,即${value} 2、使用自定义参数名,前提:在映射器接口方法的参数前加注解@Param("") |
多个参数 | 1、使用MyBatis 默认值 arg0、arg1、arg2 … 或 param1、param2、param3 … 2、使用自定义参数名,前提:在映射器接口方法的参数前加注解@Param("") | 1、使用MyBatis 默认值 arg0、arg1、arg2 … 或 param1、param2、param3 … 2、使用自定义参数名,前提:在映射器接口方法的参数前加注解@Param("") |
注:@Param("") 是 @Param(value="") 的简写
建议:
(1)不论是单个参数还是多多个参数,一律使用@Param("")。
(2)尽量用#{}。
(3)表名做参数,必须用
。
(
4
)
o
r
d
e
r
b
y
时
,
必
须
用
{}。 (4)order by时,必须用
。(4)orderby时,必须用{}。
(5)使用
时
要
注
意
何
时
加
或
不
加
单
引
号
,
即
{}时要注意何时加或不加单引号,即
时要注意何时加或不加单引号,即{} 和 ‘${}’。
MyBatis工作原理
1、读取MyBatis配置文件:mybatis-config.xml为MyBatis的全局配置文件,配置了MyBatis的运行环境等信息,例如数据库连接信息。
2、加载映射文件:映射文件即sql映射文件,该文件配置了操作数据库的sql语句,需要在mybatis配置文件mybatis-config.xml中加载。该文件可以加载多个映射文件,每个文件对应数据库中的一张表。
3、构造会话工厂:通过mybatis的环境等配置文件信息构建会话工厂sqlsessionfactory。
4、构建会话对象:由会话工厂构建sqlsession对象,该对象中包含了执行sql语句的所有方法。
5、Executor执行器:mybatis底层定义了一个executor接口来操作数据库,它将根据sqlsession传递的参数动态生成需要执行的sql语句,同时负责插叙缓存的维护。
6、MappedStatement对象:在Executor接口执行的方法中有一个mappedstatement类型的参数,该参数是对映射信息的封装,用于存储要映射的sql语句id、参数等信息。
7、输入参数映射:输入参数类型可以是map、list等集合类型,也可以是基本数据类型和pojo类型,输入参数映射过程类似于jdbc对preparedstatement对象设置参数的过程。
8、输出结果映射:输出结果类型可以是map、list等集合类型,也可以是基本数据类型和pojo类型。