Mapper映射文件中的#{}与${}
来源:互联网 发布:linux ps和netstat 编辑:程序博客网 时间:2024/06/10 11:53
#{}实现的是向prepareStatement中的预处理语句中设置参数值,sql语句中#{}表示一个占位符即?。
- <!--根据id查询用户信息 -->
- <select id="findUserById"parameterType="int"resultType="user">
- select * from user where id =#{id}
- </select>
使用占位符#{}可以有效防止sql注入,在使用时不需要关心参数值的类型,mybatis会自动进行Java类型和jdbc类型的转换。#{}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。说得再通俗一点,当我们使用#{}的时候,发出的sql中,#{}代表的内容会自动被加上“”,而${}是直接把东西取出来直接用举个例子:
id="liweizhong",#{id}输出后是"liweizhong",而${value}输出是liweizhong
${}和#{}不同,通过${}可以将parameterType传入的内容拼接在sql中且不进行jdbc类型转换, ${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${}括号中只能是value。使用${}不能防止sql注入,但是有时用${}会非常方便,如下的例子:
- <!--根据名称模糊查询用户信息 -->
- <select id="selectUserByName"parameterType="string"resultType="user">
- select * from user whereusername like '%${value}%'
- </select>
如果本例子使用#{}则传入的字符串中必须有%号,而%是人为拼接在参数中,显然有点麻烦,如果采用${}在sql中拼接为%的方式则在调用mapper接口传递参数就方便很多。
如果使用占位符号则必须人为在传参数中加%
List<User> list =userMapper.selectUserByName("%管理员%");
如果使用${}原始符号则不用人为在参数中加%,直接在mapper配置文件里面接受这个参数就可以了,显得更加的方便,可是sql注入问题?
List<User>list = userMapper.selectUserByName("管理员");
再比如order by排序,如果将列名通过参数传入sql,根据传的列名进行排序,应该写为:
- ORDER BY ${columnName}
这样要执行的sql是:
- ORDER BY columnName
如果使用#{}将无法实现此功能,因为如果这样的话,执行的sql就变成了
- ORDER BY "columnName"
- Mapper映射文件中的#{}与${}
- 【Mybatis架构】Mapper映射文件中的#{}与${}
- Mybatis写mapper映射文件中的注意事项
- Mapper.xml映射文件
- Mapper.xml映射文件
- Mapper映射文件配置
- 加载Mapper映射文件
- mybatis mapper映射文件中的 clob类型注册
- SQL映射文件mapper.xml
- 3、XML映射文件Mapper
- MyBatis03--Mapper XML映射文件
- Mapper中的文件信息
- Mybatis映射文件中的#{}与${}
- MyBatis mapper文件中的变量引用方式#{}与${}的差别
- MyBatis mapper文件中的变量引用方式#{}与${}的差别
- MyBatis mapper文件中的变量引用方式#{}与${}的差别
- MyBatis mapper文件中的变量引用方式#{}与${}的差别
- MyBatis mapper文件中的变量引用方式#{}与${}的差别
- Linux后台运行命令
- 阻止putty变成inactive
- 关于Oracle误操作--数据被Commit后的数据回退恢复(闪回)
- Android 获取前台应用的方法总结
- Android 测试支持库 1.0 现已发布!
- Mapper映射文件中的#{}与${}
- MySQL不支持事务处理的解决方法
- 毛主席失传多年的救世奇文《心之力》
- 数位DP——HDU6148 Valley Number
- Data Structures and algorithm analysis—1.3. A Brief Introduction to Recursion(数据结构—1.3 递归的简介)(之二)
- Kettle安装和配置
- 扫描--不是网传雷达
- 机器人操作系统ros ———一个月的学习历程
- 2015ccpc——H