一、Mybatis中#{}与${}的区别:
-
#{}
是占位符,预编译处理;${}
是拼接符,字符串替换,没有预编译处理。 -
Mybatis在处理
#{}
时,#{}
传入参数是以字符串传入,会将SQL中的#{}
替换为?号,调用PreparedStatement的set方法来赋值。 -
#{}
可以有效的防止SQL注入,提高系统安全性;${}
不能防止SQL注入。 -
#{}
的变量替换是在DBMS中;${}
的变量替换是在DBMS外。
模糊查询语法:
1、‘%${question}%’ 可能引起SQL注入,不推荐;
2、“%”#{question}“%” 注意:因为#{…}解析SQL语句时候,会在变量外侧自动加单引号‘ ’,所有这里%需要使用双引号“ ”,不能使用单引号‘ ’,不然会查不到任何结果。
3、concat(‘%’,#{question},‘%’)使用concat函数(推荐);
4、使用bind标签(不推荐)。
二、什么是DBMS?
DBMS (DataBase Managment System),数据库管理系统。是一种操纵和管理数据库的大型软件,用于建立、维护和使用数据库,简称dbms。
它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户通过dbms访问数据库中的数据,数据库管理员也通过dbms进行进行数据库的维护工作。它可以使用多个应用程序和用户用不同的方法在同时或不同时刻去建立、修改和询问数据库。