#{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{}可以有效防止sql注入。初步编译后的sql语句是" select * from tbl_employee where id = ? and last_name =?  ";说明, #{} 是以预编译的形式,直接将参数设置到sql语句中; 使用PreparedStatement的sql封装方法:设置了占位符为"?",可以有效地防止sql注入. #{}可以接收简单类型值或pojo属性值。 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。

使用#传入参数是,sql语句解析是会加上"",比如  select * from table where name = #{name} ,传入的name为小李,那么最后打印出来的就是

select * from table where name = ‘小李’,就是会当成字符串来解析,这样相比于$的好处是比较明显对的吧,#{}传参能防止sql注入,如果你传入的参数为 单引号‘,那么如果使用${},这种方式 那么是会报错的。

在"EmployeeMapper.xml"中select语句将第一个#{}符号替换成了${}符号;

再次运行测试类,初步编译后的sql语句是" select * from tbl_employee where id = 4 and last_name =? ";在这里,我们可以看到使用了${}获取参数后,id=" 4 ",没有占位符"?".

因为, ${}的作用: 取出的参数值会直接封装在sql语句中,不能防止sql注入,会有安全问题.

配置文件中的SQL语句使用#{value}代表参数则语句在预编译时由占位符代替(?),后由DBMS转换为带单引号的参数;而用${value}代表参数则其在预编译阶段就已被编译成SQL的一部分,且不带引号,这会引发所谓的“SQL注入”的问题。
 
像如下SQL语句:
select * from user where username like '%${value}%'
就需要使用${},它是将value字符串进行拼接
 
(在单引号、双引号之内的,用${})

mybatis的xml中#{}和${}区别的更多相关文章

  1. mybatis的xml中也可以通过传入标记参数然后用 choose写选择语句【我】

    mybatis的xml中也可以通过传入标记参数然后用 choose写选择语句

  2. 【转】 Android xml中 @和?区别,style和attr小结

    引用资源时,使用@还是?的区别,例如在设置style的时候既可以使用@也可以使用? style="?android:attr/progressBarStyleHorizontal" ...

  3. 关于mybatis mapper.xml中的if判断

    场景: 页面上有搜索框进行调节查询,不同搜索框中的内容可以为空. 过程: 点击搜索,前端把参数传给后台,这是后台要把为空的参数过滤掉. 做法: 通常我们在dao层即mapper.xml中进行过滤判断操 ...

  4. 转载:MyBatis mapper.xml中使用静态常量或者静态方法

    转自:https://my.oschina.net/wtslh/blog/682704 今天偶然之间刷到了这样一篇博客,有点意外 mybatis 还可以这样使用ONGL常量的方式,该方式针对 xml的 ...

  5. mybatis配置文件xml中插入新数据

    初用mybatis,发现很好的一个操作数据库的框架,里面有一些小技巧,挺简单,很实用,记录一下: mybatis的插入语句: <insert id="insertAsset" ...

  6. mybatis在XML中大于号转义字符

    mybatis在编写sql时不能在XML里直接使用‘<’ 或者是 ‘>’ 在这里需要使用转义字符替换 下面列举常用的xml转义对应: * <           <       ...

  7. MyBatis mapper.xml中SQL处理小于号与大于号

    这种问题在xml处理sql的程序中经常需要我们来进行特殊处理. 其实很简单,我们只需作如下替换即可避免上述的错误: < <= > >= & ' " < ...

  8. mybatis的XML中注释需谨慎

    报错内容: java.sql.SQLException: Parameter index out of range (3 > number of parameters, which is 2) ...

  9. mybatis的xml中特殊转义字符和模糊查询like的写法

    做个备忘: xml特殊符号转义写法 <          < >          > <>   <> &      & &ap ...

  10. mybatis的xml中sql语句中in的写法(迭代遍历)

    这里使用 foreach标签 <foreach  item="item" collection="listTag" index="index&q ...

随机推荐

  1. Django Cannot assign "A1": "B1" must be a "C1" instance.

    Django Cannot assign "A1": "B1" must be a "C1" instance. 原因:使用了外键 说明:如 ...

  2. J V M(三)沙箱安全机制

    沙箱安全机制 Java安全模型的核心就是Java沙箱(sandbox)什么是沙箱? 沙箱是一个限制程序运行的环境.沙箱机制就是将Java代码限定在虚拟机(JVM)特定的运行范围中,并且严格限制代码对本 ...

  3. k8s入门_label标签、nodeSelector

    什么是label Label以key/value键值对的形式附加到任何对象上,如Pod,Service,Node, RC(ReplicationController)/RS(ReplicaSet)等. ...

  4. TS 之 reduce

    一.函数介绍 Array.reduce()方法是对数组进行遍历,返回一个计算后的值 使用方法: Array.reduce((acc, cur, idx, src) => { }, initial ...

  5. Django中logging的设置

    1.日志基础知识 日志与我们的软件程序密不可分.它记录了程序的运行情况,可以给我们调试程序和故障排查提供非常有用的信息.每一条日志信息记录了一个事件的发生.具体而言,它包括了: 事件发生时间 事件发生 ...

  6. [BOM]实现页面loading效果,在图片资源加载完之前显示loading

    使用到jquery. 判断整个页面是否加载完: // 这是根据js判断,页面加载完毕就显示 window.onload = function () { // console.log('load com ...

  7. mybati之sql集合

    mybatis 详解(五)------动态SQL - YSOcean - 博客园 (cnblogs.com) mybatis参数注入: 根据参数名称 使用#{} 注入参数 <insert id= ...

  8. jmeter参数化时最常用随机函数

    邮箱类: ${__RandomString(8,abcdefghijklmnopqrstuvwxyz,)}@126.com 手机号类: ${__Random(18000000000,189999999 ...

  9. echart一个框里放三个饼图案例

    效果图: 代码: function(chartOption){ chartOption = $nps$.deepCopyTo({}, chartOption); var chartDataList_r ...

  10. setState 更新

    同步逻辑中,setState异步更新,同步更新会合并为一次更新 异步逻辑中,setState同步更新 this.setState({ data:data,()=>{ } }) 在回调函数里面了解 ...