Mybatis中#{}和${}代表什么含义,有什么区别?

先来看一下#{},在mybatis中:
<mapper namespace="cn.xh.dao">
<select id="getCount" parameterType="String" resultType="int">
select count() from user where age = #{value}
</select>
</mapper>
#{value}会被传入的内容替换,替换的时候将传入的内容当成字符串,加上引号:例如传入的内容为23,sql语句会变为select count(
) from user where age= ‘23’
这里是运行日志:

从日志可以看出实际上是相当于执行了这段代码:
String sql = "select count(*) from user where age = ?";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, “23”);
通过调用preparedStatement的setString方法传入参数可以防止sql注入,安全性更高。如果只传入一个参数该参数的名字可以随意取。

再来看一下${}:

<mapper namespace="cn.xh.dao">
<select id="getCount" parameterType="String" resultType="int">
select count() from ${value}
</select>
</mapper>
${value}会被传入的内容替换,注意此处是直接替换,不会加上引号。例如传入的内容为 user 则sql语句变为:select count(
) from user
看运行日志:

从运行日志可以看出这里是直接拼接字符串。
总结一下#{}和${}之间的区别:
#{}:传入的内容会被作为字符串,被加上引号,以预编译的方式传入,安全性高,可以防止sql注入。
${}:传入的内容会直接拼接,不会加上引号,可能存在sql注入的安全隐患。
所以能用#{}的地方就用#{},但是诸如传入表名,需要排序的时候order by 字段 的 “字段名”的时候可以用${}.

原文地址:https://blog.51cto.com/11583017/2468411

时间: 2024-10-10 14:30:12

Mybatis中#{}和${}代表什么含义,有什么区别?的相关文章

Mybatis中输出映射resultType与resultMap的区别

(原文地址:http://blog.csdn.net/acmman/article/details/46509375) 1.resultType 使用resultType进行输出映射,只有查询出来的列名和pojo(实体bean)中的属性名一致,该列才可以映射成功. 如果查询出来的列名和pojo中的属性名全部不一致,没有创建pojo对象.只要查询出来的列名和pojo中的属性有一个一致,就会创建pojo对象. 1.1输出pojo对象和pojo列表 不管是输出的pojo单个对象还是一个列表(list中

C#中&lt;%%&gt;&lt;%#%&gt;&lt;%=%&gt; 分别代表的含义

1.<%%> 可以执行服务器代码,通俗讲就是可以写像后台一样的代码,例如: 1 <% 2 int a = 2; 3 int b = 3; 4 int c = a + b; 5 Response.Write(c); 6 %> 2.<%=%>服务端语言的表达式可以为有返回值的方法,但返回值不能太大,注意一定要有返回值.它其实也可以看成是一种绑定.例如 aspx.cs代码: 1 public string DisplayStr()//注意这里必须要有返回值,否则将会发生运行时

linux中不同颜色代表的含义

下面是linux约定不同类型文件默认的颜色 白色:表示普通文件 蓝色:表示目录 绿色:表示可执行文件 红色:表示压缩文件 浅蓝色:链接文件 红色闪烁:表示链接的文件有问题 黄色:表示设备文件 灰色:表示其它文件 原文地址:https://www.cnblogs.com/wbl001/p/11343233.html

MyBatis中井号与美元符号的区别

#{变量名}可以进行预编译.类型匹配等操作,#{变量名}会转化为jdbc的类型. select * from tablename where id = #{id}假设id的值为12,其中如果数据库字段id为字符型,那么#{id}表示的就是'12',如果id为整型,那么id就是12,并且MyBatis会将上面SQL语句转化为jdbc的select * from tablename where id=?,把?参数设置为id的值. ${变量名}不进行数据类型匹配,直接替换. select * from

[转]MyBatis中resultType与resultMap区别

MyBatis中关于resultType和resultMap的具体区别如下: MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap.resultType是直接表示返回类型的(对应着我们的model对象中的实体):resultMap则是对外部ResultMap的引用(提前定义了db和model之间的隐射key-->value关系):resultType跟resultMap不能同时存在. 在MyBatis进行查询映射时,其实查询出来的每一个

man page里面函数后面的括号中的数字代表的含义。

Linux下最通用的领域及其名称及说明如下:领域 名称 说明 1 用户命令, 可由任何人启动的. 2 系统调用, 即由内核提供的函数. 3 例程, 即库函数. 4 设备, 即/dev目录下的特殊文件. 5 文件格式描述, 例如/etc/passwd. 6 游戏, 不用解释啦! 7 杂项, 例如宏命令包.惯例等. 8 系统管理员工具, 只能由root启动. 9 其他(Linux特定的), 用来存放内核例行程序的文档. n 新文档, 可能要移到更适合的领域. o 老文档, 可能会在一段期限内保留.

大神带你重新认识Mybatis中强大的resultMap

前言在Mybatis中,有一个强大的功能元素resultMap.当我们希望将JDBC ResultSets中的数据,转化为合理的Java对象时,你就能感受到它的非凡之处.正如其官方所述的那样: resultMap元素是 MyBatis 中最重要最强大的元素.它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出来,并在一些情形下允许你进行一些 JDBC 不支持的操作.实际上,在为一些比如连接的复杂语句编写映射代码的时候,一份 resultMap 能够代替实现同等功能的长达

远程桌面Default.rdp 中各个参数的含义

存储在 Default.rdp 文件中的设置 默认情况下,将在“我的文档”文件夹中创建 Default.rdp 文件.以下 RDP 设置存储在 Desktop.rdp 文件中: desktopwidth:i 此设置对应于您在远程桌面连接“选项”中的“显示”选项卡上选择的桌面宽度. 注意:基于 Microsoft Windows CE 的设备只支持全屏模式. desktopheight:i 此设置对应于您在远程桌面连接“选项”中的“显示”选项卡上选择的桌面高度. 注意:基于 Microsoft W

谈一下思考,关于mybatis中&lt;foreach collection=&quot;list&quot;&gt;中list得来的原因 没看到官方说明

<foreach> 是在sql语句中进行多个id查询 时用到的,因为mybatis代替jdbc和hibernate, 使用 在xml文件中编写sql语句,这是一个标签文件.然后在 dao层?,用sqlSession.来调用这个写好的sql语句. 有时候我想会不会jdbc更简单一些?? 然后,在xml中写sql语句,会碰到根据条件或者模糊查询,这个时候需要接收来自dao层的 查询条件参数.此时需要在xml文件中的sql语句中接收,并且应该没有接收,只是确定有几个占位符,等到预编译之后,再在dao