洞察探讨小游戏SDK接入的最佳实践以及对企业跨平台开发的优势
1041
2023-05-09
详解mybatis #{}和${}的区别、传参、基本语法
1 #{}和${}的区别、及注入问题
(1) 区别:
首先清楚一点,动态 SQL 是 mybatis 的强大特性之一,在 mapper 中定义的参数传到 xml 中之后,在查询之前 mybatis 会对其进行动态解析,#{} 和 ${} 在预编译中的处理是不一样的:
例如:select * from t_user where userName = #{name};
#{}预编译:用一个占位符 ? 代替参数:select * from t_user where userName = ?
#{}预编译:会将参数值一起进行编译:select * from t_user where userName = 'zhangsan'
(2) 使用场景:
一般情况首选#{},因为这样能避免sql注入;如果需要传参 动态表名、动态字段名时,需要使用${}
比如:select * from ${tableName} where id > #{id};
(3) SQL注入问题:
举个例子,如果使用${}出现的注入问题:
select * from ${tableName};
如果传参 t_user;delete from t_user,则预编译后的sql如下,将会导致系统不可用:
select * from t_user;delete from t_user;
(4) like 语句防注入:
使用concat函数:
select * from t_user where name like concat('%', #{name}, '%')
2 mybatis几种传参方式
非注解:
(1)单参数:
public User getUserByUuid(String uuid);
SELECT * FROM t_user WHERE uuid = #{uuid}
(2)多参数
public User getUserByNameAndPass(String name,String pass);
SELECT * FROM t_user WHERE t_name = #{0} and t_pass = #{1}
(3)Map参数
public User getUserByMap(Map
SELECT * FROM t_user WHERE t_name = #{name} and t_pass = #{pass}
(4)实体对象参数
public int updateUser(User user);
update t_user set t_name = #{name}, t_pass = #{pass} where uuid=#{uuid}
(4)List集合参数
public int batchDelUser(List
DELETE FROM t_user WHERE uuid IN
#{uuid}
注解:
public List
SELECT * from t_user where createTime >= #{startTime} and createTime <= #{endTime}
2 choose when otherwise
public List
//SQL
SELECT * from user_role where groupUuid=#{groupUuid}
AND roleUuid IN
#{roleUuid}
AND roleUuid IN ('')
3 判断字符串相等
//JAVA 代码
public int getOrderCountByParams(Map
//SQL
SELECT count(*) FROM itil_publish_order where 1=1
AND create_time >= #{timeStr}
AND end_time <= #{timeStr}
或者
4 CONCAT函数实现 模糊匹配
SELECT count(*) FROM
itil_publish_order
WHERE serial_code LIKE CONCAT('%',#{codeStr},'%')
ORDER BY serial_code DESC LIMIT 1
5 大于等于、小于等于
//JAVA代码
public List
//SQL
SELECT * FROM itil_publish_order
WHERE createTime >= #{startTime} and <= #{startTime}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~