前言

还记得当初从北京回来的时候,跟着倪文杰师姐做Java ITOO的一卡通模块,我亲姐贾梦洁带着我一块做,期间,我遇到了一个特别奇葩的问题,就死我要实现Mybatis的模糊查询,根据当时亲姐教给我方法 select * from table where contions like #{something},就是解决不了问题,一点东西都查不出来,还报错。后来,我终于明白,世界上还有${}这个东西。只不过等到今天才去把它发出来,有点亡羊补牢的感觉,希望还能帮到一些像我一样的新手。

#{}实现的是向prepareStatement中的预处理语句中设置参数值,sql语句中#{}表示一个占位符即?。

[html] view plain copy  print?
  1. <!–根据id查询用户信息 –>
  2. <select id=”findUserById”parameterType=”int”resultType=”user”>
  3. select * from user where id =#{id}
  4. </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?
  1. <!–根据名称模糊查询用户信息 –>
  2. <select id=”selectUserByName”parameterType=”string”resultType=”user”>
  3. select * from user whereusername like ’%${value}%’
  4. </select>

如果本例子使用#{}则传入的字符串中必须有%号,而%是人为拼接在参数中,显然有点麻烦,如果采用${}在sql中拼接为%的方式则在调用mapper接口传递参数就方便很多。

如果使用占位符号则必须人为在传参数中加%

List<User> list =userMapper.selectUserByName(“%管理员%”);

如果使用${}原始符号则不用人为在参数中加%,直接在mapper配置文件里面接受这个参数就可以了,显得更加的方便,可是sql注入问题?

List<User>list = userMapper.selectUserByName(“管理员”);

再比如order by排序,如果将列名通过参数传入sql,根据传的列名进行排序,应该写为:

[sql] view plain copy  print?
  1. ORDER BY ${columnName}

这样要执行的sql是:

[sql] view plain copy  print?
  1. ORDER BY columnName

如果使用#{}将无法实现此功能,因为如果这样的话,执行的sql就变成了

[sql] view plain copy  print?
  1. ORDER BY ”columnName”

那样,你可以试一下,会报错的,无效列名,sql语句报错:

好文要顶 关注我 收藏该文

Double-Eggs
关注 - 1
粉丝 - 11

+加关注

0
0

currentDiggType = 0;

« 上一篇:IDEA快捷键+使用小技巧
» 下一篇:【Hibernate框架】对象的三种持久化状态

    </div>

转载于:https://www.cnblogs.com/flyingcr/p/10326930.html

【Mybatis架构】Mapper映射文件中的#{}与${}相关推荐

  1. Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件

    封面:洛小汐 作者:潘潘 若不是生活所迫,谁愿意背负一身才华. 前言 上节我们介绍了 < Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 >,内容很详细( ...

  2. myBatis的xml映射文件中传入list集合与数组做条件

    mybatis的xml映射文件中传入list集合与数组做条件 1.传list集合参数 1.1sql映射: <select id="queryDeptListByBankLevelAnd ...

  3. mapper命名规范_Mybatis系列全解(五):全网最全!详解Mybatis的Mapper映射文件

    封面:洛小汐 作者:潘潘 若不是生活所迫,谁愿意背负一身才华. 前言 上节我们介绍了 < Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 >,内容很详细( ...

  4. mysql映射mapper_这下够清楚了吧!详解Mybatis的Mapper映射文件

    前言 上节我们介绍了 < Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 >,内容很详细( 也很枯燥),由于篇幅实在过于冗长,我预计大家想看完得花上两段上 ...

  5. mybatis的mapper.xml文件中含有中文注释时运行出错,mybatis配置优化和别名优化 mybatis配置之映射器说明

    记录一个发现的小问题,刚刚在UserMapper.xml文件中有一段中文注释掉的内容: <!-- <resultMap id="Usermap" type=" ...

  6. 【Mybatis】 mapper XML 文件中使用 association 实现一对一关联

    前言 Mybatis 一对一,使用 association 标签 Mybatis 一对多,使用 collection 标签 本文主要说明 association 标签. collection 标签与之 ...

  7. 【Mybatis】 mapper XML 文件中使用 collection实现一对多关联

    前言 Mybatis 一对一,使用 association 标签 Mybatis 一对多,使用 collection 标签 本文主要说明 collection 实现一对多关联.使用 associati ...

  8. mybatis(mapper映射文件)

    <!-- parameterType:参数类型,可以省略, 获取自增主键的值:mysql支持自增主键,自增主键值的获取useGeneratedKeys="true":使用自增 ...

  9. 关于Mybatis的SQL映射文件中in关键字的用法

    有一个需求是可以选择多个设备进行删除,于是想到将多个设备id拼成字符串作为参数,以逗号隔开,如:"123,234,456". SQL如下: <delete id=" ...

  10. Mybatis中Mapper映射文件详解(默认值)

    Mapper映射文件是一个xml格式文件,必须遵循相应的dtd文件规范,如ibatis-3-mapper.dtd.我们先大体上看看支持哪些配置?如下所示,从Eclipse里截了个屏: 从上图可以看出, ...

最新文章

  1. 各大IT公司笔试真题汇总开发人员一定要加入收藏夹的网站(收藏)
  2. python下载图片、已知url_python实现通过URL下载图片到本地服务器
  3. java xml 变量替换_Java JAXB如何将XmlElements重新定义为现有变量
  4. 常见算法:C语言求最小公倍数和最大公约数三种算法
  5. redis - 基础
  6. FIS.js前端开发的使用说明文档
  7. HttpServletRequest中getAttribute()和getParameter()的区别
  8. python安全攻防---信息收集---ICMP主机探测 以及optionparser的使用
  9. F#简明教程二:F#类型系统和类型推断机制
  10. java linux runtime 正则表达式_Java学习之正则表达式
  11. python typing optional_python类型检测最终指南--Typing模块的使用
  12. visual studio 2019 Intel Parallel Studio XE2020下FORTRAN安装及MPI并行配置计算
  13. 在计算机上配置超级终端,解决办法:如何在XP系统中设置超级终端? xp超级终端设置方法...
  14. 游戏十五大基本游戏类型介绍
  15. 服务器启动时创建文件夹,技术|entr:文件更改时重新运行构建
  16. 深度学习平台-百度飞桨
  17. 南京邮电大学嵌入式系统开发实验5:嵌入式Linux下LED报警灯驱动设计及编程
  18. 股市大涨该买吗?教你用算法量化交易行为!
  19. DJ9-3 DMA 方式
  20. LOJ 1070 Algebraic Problem

热门文章

  1. 生产环境一次诡异的空指针问题,反转了4次
  2. delphi2006语言新特性:Record类型高级用法
  3. Kubernetes证书相关(CFSSL)
  4. python 的for与while 的i改变
  5. Struts2_01_开发过程与实例说明
  6. POJ1039 Pipe
  7. 解决fiexd和transform一起用导致的失效问题
  8. vue学习笔记-14-过滤器
  9. Eclipse打开报错解决方案
  10. 88是python语言的整数类型_python基本数据类型练习