mybatis的xml中#{}和${}区别
#{}表示一个占位符号,通过#{}可以实现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注入,会有安全问题.
select * from user where username like '%${value}%'
mybatis的xml中#{}和${}区别的更多相关文章
- mybatis的xml中也可以通过传入标记参数然后用 choose写选择语句【我】
mybatis的xml中也可以通过传入标记参数然后用 choose写选择语句
- 【转】 Android xml中 @和?区别,style和attr小结
引用资源时,使用@还是?的区别,例如在设置style的时候既可以使用@也可以使用? style="?android:attr/progressBarStyleHorizontal" ...
- 关于mybatis mapper.xml中的if判断
场景: 页面上有搜索框进行调节查询,不同搜索框中的内容可以为空. 过程: 点击搜索,前端把参数传给后台,这是后台要把为空的参数过滤掉. 做法: 通常我们在dao层即mapper.xml中进行过滤判断操 ...
- 转载:MyBatis mapper.xml中使用静态常量或者静态方法
转自:https://my.oschina.net/wtslh/blog/682704 今天偶然之间刷到了这样一篇博客,有点意外 mybatis 还可以这样使用ONGL常量的方式,该方式针对 xml的 ...
- mybatis配置文件xml中插入新数据
初用mybatis,发现很好的一个操作数据库的框架,里面有一些小技巧,挺简单,很实用,记录一下: mybatis的插入语句: <insert id="insertAsset" ...
- mybatis在XML中大于号转义字符
mybatis在编写sql时不能在XML里直接使用‘<’ 或者是 ‘>’ 在这里需要使用转义字符替换 下面列举常用的xml转义对应: * < < ...
- MyBatis mapper.xml中SQL处理小于号与大于号
这种问题在xml处理sql的程序中经常需要我们来进行特殊处理. 其实很简单,我们只需作如下替换即可避免上述的错误: < <= > >= & ' " < ...
- mybatis的XML中注释需谨慎
报错内容: java.sql.SQLException: Parameter index out of range (3 > number of parameters, which is 2) ...
- mybatis的xml中特殊转义字符和模糊查询like的写法
做个备忘: xml特殊符号转义写法 < < > > <> <> & & &ap ...
- mybatis的xml中sql语句中in的写法(迭代遍历)
这里使用 foreach标签 <foreach item="item" collection="listTag" index="index&q ...
随机推荐
- 前后端分离--token过期策略方案1
https://blog.csdn.net/weixin_38827340/article/details/86287496?utm_medium=distribute.pc_aggpage_sear ...
- 阻止form表单默认跳转
form表单提交后,会默认跳转
- Hyperledger fabric 2.2.0 环境搭建
基础环境搭建 ### docker 安装 如果服务器上有旧版的docker,需要先执行卸载操作. $ sudo yum remove docker \ docker-common \ docker-s ...
- 多线程学习(第一天)java语言的线程
一.并发与并行 并发:处理器不停的切换有操作的线程. 并行:多个处理器同时执行有操作线程. 二.启动线程 无论是A,B哪种方式实现多线程,都需要通过Thread.start方法启动线程. A.Thre ...
- Flutter 中的普通路由、普通路由传值、 命名路由、命名路由传值
一.Flutter 中的路由 Flutter 中的路由通俗的讲就是页面跳转.在 Flutter 中通过 Navigator 组件管理路由导航.并提供了管理堆栈的方法.如:Navigator.push ...
- C#动态创建对象和其属性
dynamic contact = new ExpandoObject(); contact.Name = "Patrick Hines"; contact.Phone = &qu ...
- 044_Schedule Job 间隔时间自动执行
需求:系统上的标准功能是能够设置间隔一天的执行,或者是写完代码着急测试我们写个5分钟后执行的: 但是遇到要求没间隔一小时或者十分钟执行,该怎么处理呢? global class **_Retrieve ...
- C#定时任务(Timer)
新建Timer类 using BaseAsset.Data.Infrastructure; using BaseAsset.Data.Repositories; using BaseAsset.Ent ...
- memoのVIM
必须给今天看到的vim相关的东西记录一下! vim文档中文化 https://github.com/yianwillis/vimcdoc 速查表 https://github.com/skywind3 ...
- Leetcode 二维数组周游 54
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ...