【Mybatis架构】Mapper映射文件中的#{}与${}
来源:互联网 发布:四糸乃cos装淘宝 编辑:程序博客网 时间:2024/06/05 04:51
前言
还记得当初从北京回来的时候,跟着倪文杰师姐做Java ITOO的一卡通模块,我亲姐贾梦洁带着我一块做,期间,我遇到了一个特别奇葩的问题,就死我要实现Mybatis的模糊查询,根据当时亲姐教给我方法 select * from table where contions like #{something},就是解决不了问题,一点东西都查不出来,还报错。后来,我终于明白,世界上还有${}这个东西。只不过等到今天才去把它发出来,有点亡羊补牢的感觉,希望还能帮到一些像我一样的新手。
#{}实现的是向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"那样,你可以试一下,会报错的,无效列名,sql语句报错:
- 【Mybatis架构】Mapper映射文件中的#{}与${}
- Mapper映射文件中的#{}与${}
- Mybatis写mapper映射文件中的注意事项
- mybatis mapper映射文件中的 clob类型注册
- Mybatis映射文件中的#{}与${}
- mybatis自动生成mapper,dao,映射文件
- mybatis自动生成mapper,dao,映射文件
- mybatis自动生成mapper xml 映射 文件
- mybatis映射文件mapper.xml的写法。
- Mybatis学习总结(四).Mapper映射文件
- Mybatis中Mapper映射文件详解
- mybatis mapper映射文件参数填充原理
- MyBatis的Mapper映射文件详解
- mapper.xml映射文件配置 mybatis
- JAVA mybatis:mapper XML映射文件
- Mybatis学习--Mapper.xml映射文件demo
- MyBatis mapper文件中的变量引用方式#{}与${}的差别
- MyBatis mapper文件中的变量引用方式#{}与${}的差别
- c中的数据类型
- javascript获取html元素的几种方法
- excel文件直接导入mysql数据库的方法
- 2016-12-15 Nginx 之初学者(二)
- 四大组件之一Activity
- 【Mybatis架构】Mapper映射文件中的#{}与${}
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——3.1 全景视频是如何实现的
- 立体匹配之(三): A Deep Visual Correspondence Embedding Model for Stereo Matching Costs
- (十九)ArcGIS API For Javascript之项目真实部署
- 浙工大15新生决赛 改造字符串
- FLV视频播放代码
- sqljdbc4 与 SQL2016 连接失败的问题及解决方法
- Dubbo架构设计详解
- 解决ssh的"Write failed: Broken pipe"问题