1.MyBatis获取参数值的两种方式
MyBatis获取参数值的两种方式:
${}和#{}
${}
的本质就是字符串拼接
#{}
的本质就是占位符赋值
,能用#{}的时候,就不用${}
2.两种方式的不同点:
- 1.
${}
使用字符串拼接
的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号
; - 2.
#{}
使用占位符赋值
的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时,可以自动添加单引号
3.案例理解两种方式:
1.定义mapper接口,面向接口编程:
2.映射sql
#{}
形式:
3.映射sql-
${}
形式:
4.测试:
5.测试结果是:
#{}形式可以正常查询结果
,${}
形式报错提示了
4.选择两种参数处理方式的标准:
4.1.优先使用#{}
1.使用
#{}
可以避免一些SQL注入的情况
4.2.传参中具有SQL关键字时:只能使用${}
注意事项:当需要SQL语句的关键字放到SQL语句中,
只能使用${}来进行处理,因为${}会把值直接放在了SQL语句中
a.案例举例:
1.定义接口:
2.书写映射的SQL:
3.测试排序:
4.3.解析的SQL中需要拼接表名称时:使用${}
a.概述:
- 1.向SQL语句中拼接表名的时候,就需要使用${}:
- 2.在实际业务中,可能会存在分表存储数据的情况,因为一张表存的话,数据量大,查询效率低,然后我们就可以
将这些数据有规律的分表存储
,这样在查询的时候效率就比较高了。因为扫描的数据量少了 - 3.日志表:专门存储日志信息。如过只有t_log一张表,那么就会产生很多log,慢慢的这个表中国的数据就很大很大,那我们如果要解决,
就可以每天生成一张表,然后每张表以当天的日期为名称,如t_log_20220401、t_log_20220402、......,然后需要要查询某天的日志信息的时候,就可以直接查t_log_日期那张表就可以了
。当前台传给我们具体的日期,后台进行拼接建表查询就可以了
b.编码实现:
1.定义实体类POJO:
2.新建Logxml文件及其对应的Mapper接口文件:
3.接口中定义方法:
4.映射sql:
5.测试:
4.4.批量删除数据:
a. 批量删除:一次可以删除多条数据,SQL有两种写法:
- 第1种:
delete from t_car where id =1 or id=2 or id=3;
(动态SQL方式实现) - 第2种:
deelete from t_car where id in (1,2,3)
b.案例理解:
- 1.定义接口:
- 2.映射sql:如果使用
#{}的时候,那么就会拼接的是字符串
,这就导致sql报错
4.5.模糊查询:
a.SQL语句:
1.模糊查询其sql就是:
select * from t_car where brand like '%奔驰%'
b.案例理解:
1.定义接口:
2.映射sql:
3.上述方式错误原因分析:上述方式解析后的SQL没有发现占位符号,然后变量值就不知道给谁,导致了错误产生。
4.解决办法:
5.测试: