【Mybatis架构】Mapper映射文件中的#{}与${}
前言
还记得当初从北京回来的时候,跟着倪文杰师姐做Java ITOO的一卡通模块,我亲姐贾梦洁带着我一块做,期间,我遇到了一个特别奇葩的问题,就死我要实现Mybatis的模糊查询,根据当时亲姐教给我方法 select * from table where contions like #{something},就是解决不了问题,一点东西都查不出来,还报错。后来,我终于明白,世界上还有${}这个东西。只不过等到今天才去把它发出来,有点亡羊补牢的感觉,希望还能帮到一些像我一样的新手。
#{}实现的是向prepareStatement中的预处理语句中设置参数值,sql语句中#{}表示一个占位符即?。
[html] view plain copy print?
- <!–根据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注入,但是有时用{}会非常方便,如下的例子:
[html] view plain copy print?
- <!–根据名称模糊查询用户信息 –>
- <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,根据传的列名进行排序,应该写为:
[sql] view plain copy print?
- ORDER BY ${columnName}
这样要执行的sql是:
[sql] view plain copy print?
- ORDER BY columnName
如果使用#{}将无法实现此功能,因为如果这样的话,执行的sql就变成了
[sql] view plain copy print?
- ORDER BY ”columnName”
那样,你可以试一下,会报错的,无效列名,sql语句报错:
关注 - 1
粉丝 - 11
currentDiggType = 0;
» 下一篇:【Hibernate框架】对象的三种持久化状态
</div>
转载于:https://www.cnblogs.com/flyingcr/p/10326930.html
【Mybatis架构】Mapper映射文件中的#{}与${}相关推荐
- Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件
封面:洛小汐 作者:潘潘 若不是生活所迫,谁愿意背负一身才华. 前言 上节我们介绍了 < Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 >,内容很详细( ...
- myBatis的xml映射文件中传入list集合与数组做条件
mybatis的xml映射文件中传入list集合与数组做条件 1.传list集合参数 1.1sql映射: <select id="queryDeptListByBankLevelAnd ...
- mapper命名规范_Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件
封面:洛小汐 作者:潘潘 若不是生活所迫,谁愿意背负一身才华. 前言 上节我们介绍了 < Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 >,内容很详细( ...
- mysql映射mapper_这下够清楚了吧!详解Mybatis的Mapper映射文件
前言 上节我们介绍了 < Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 >,内容很详细( 也很枯燥),由于篇幅实在过于冗长,我预计大家想看完得花上两段上 ...
- mybatis的mapper.xml文件中含有中文注释时运行出错,mybatis配置优化和别名优化 mybatis配置之映射器说明
记录一个发现的小问题,刚刚在UserMapper.xml文件中有一段中文注释掉的内容: <!-- <resultMap id="Usermap" type=" ...
- 【Mybatis】 mapper XML 文件中使用 association 实现一对一关联
前言 Mybatis 一对一,使用 association 标签 Mybatis 一对多,使用 collection 标签 本文主要说明 association 标签. collection 标签与之 ...
- 【Mybatis】 mapper XML 文件中使用 collection实现一对多关联
前言 Mybatis 一对一,使用 association 标签 Mybatis 一对多,使用 collection 标签 本文主要说明 collection 实现一对多关联.使用 associati ...
- mybatis(mapper映射文件)
<!-- parameterType:参数类型,可以省略, 获取自增主键的值:mysql支持自增主键,自增主键值的获取useGeneratedKeys="true":使用自增 ...
- 关于Mybatis的SQL映射文件中in关键字的用法
有一个需求是可以选择多个设备进行删除,于是想到将多个设备id拼成字符串作为参数,以逗号隔开,如:"123,234,456". SQL如下: <delete id=" ...
- Mybatis中Mapper映射文件详解(默认值)
Mapper映射文件是一个xml格式文件,必须遵循相应的dtd文件规范,如ibatis-3-mapper.dtd.我们先大体上看看支持哪些配置?如下所示,从Eclipse里截了个屏: 从上图可以看出, ...
最新文章
- 各大IT公司笔试真题汇总开发人员一定要加入收藏夹的网站(收藏)
- python下载图片、已知url_python实现通过URL下载图片到本地服务器
- java xml 变量替换_Java JAXB如何将XmlElements重新定义为现有变量
- 常见算法:C语言求最小公倍数和最大公约数三种算法
- redis - 基础
- FIS.js前端开发的使用说明文档
- HttpServletRequest中getAttribute()和getParameter()的区别
- python安全攻防---信息收集---ICMP主机探测 以及optionparser的使用
- F#简明教程二:F#类型系统和类型推断机制
- java linux runtime 正则表达式_Java学习之正则表达式
- python typing optional_python类型检测最终指南--Typing模块的使用
- visual studio 2019 Intel Parallel Studio XE2020下FORTRAN安装及MPI并行配置计算
- 在计算机上配置超级终端,解决办法:如何在XP系统中设置超级终端? xp超级终端设置方法...
- 游戏十五大基本游戏类型介绍
- 服务器启动时创建文件夹,技术|entr:文件更改时重新运行构建
- 深度学习平台-百度飞桨
- 南京邮电大学嵌入式系统开发实验5:嵌入式Linux下LED报警灯驱动设计及编程
- 股市大涨该买吗?教你用算法量化交易行为!
- DJ9-3 DMA 方式
- LOJ 1070 Algebraic Problem