赞
踩
#{}
是预编译处理,${}
是字符串替换。#{}
时,会将sql中的#{}
替换为?号,调用PreparedStatement的set方法来赋值;${}
时,就是把${}
替换成变量的值。#{}
可以有效的防止SQL注入,提高系统安全性。、、、
标签,都会被解析为一个MapperStatement对象。 Mapper接口里的方法,是不能重载的,因为是使用 全限名+方法名 的保存和寻找策略。Mapper 接口的工作原理是JDK动态代理,Mybatis运行时会使用JDK动态代理为Mapper接口生成代理对象proxy,代理对象会拦截接口方法,转而执行MapperStatement所代表的sql,然后将sql执行结果返回。缓存就是内存中的数据,常常来自对数据库查询结果的保存。使用缓存,我们可以避免频繁与数据库进行交互,从而提高响应速度。
MyBatis 也提供了对缓存的支持,分为一级缓存和二级缓存,来看下下面这张图:
1)一级缓存 Mybatis的一级缓存是指SQLSession,一级缓存的作用域是SQlSession, Myabits默认开启一级缓存。
在同一个SqlSession中,执行相同的SQL查询时;第一次会去查询数据库,并写在缓存中,第二次会直接从缓存中取。 当执行SQL时候两次查询中间发生了增删改的操作,则SQLSession的缓存会被清空。
每次查询会先去缓存中找,如果找不到,再去数据库查询,然后把结果写到缓存中。 Mybatis的内部缓存使用一个HashMap,key为hashcode+statementId+sql语句。Value为查询出来的结果集映射成的java对象。 SqlSession执行insert、update、delete等操作commit后会清空该SQLSession缓存。
2) Mybatis二级缓存是默认不开启的,作用于一个Application,是Mapper级别的,多个SqlSession使用同一个Mapper的sql能够使用二级缓存。
- <select id="selectByNameAndPassword" parameterType="java.util.Map" resultMap="BaseResultMap">
- select id, username, password
- from user
- where username = #{username,jdbcType=VARCHAR} and
- password = #{password,jdbcType=VARCHAR}
- </select>
- <select id="selectByNameAndPassword" parameterType="java.util.Map" resultMap="BaseResultMap">
- select id, username, password,
- from user
- where username = ${username,jdbcType=VARCHAR} and
- password = ${password,jdbcType=VARCHAR}
- </select>
mybatis中的#和$的区别:
#
将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。 如:where username=#{username}
,如果传入的值是111,那么解析成sql时的值为where username="111"
, 如果传入的值是id,则解析成的sql为where username="id"
.$
将传入的数据直接显示生成在sql中。如:where username=${username}
,如果传入的值是111,那么解析成sql时的值为where username=111
;如果传入的值是:drop table user;
,则解析成的sql为:select id, username, password, role from user where username=;drop table user
;#
方式能够很大程度防止sql注入,$
方式无法防止Sql注入。$
方式一般用于传入数据库对象,例如传入表名.#
的就别用$
,若不得不使用“${xxx}”
这样的参数,要手工地做好过滤工作,来防止sql注入攻击。“${xxx}”
这样格式的参数会直接参与SQL编译,从而不能避免注入攻击。但涉及到动态表名和列名时,只能使用“${xxx}”
这样的参数格式。所以,这样的参数需要我们在代码中手工进行处理来防止注入。select id, username, password from user where username=? and password=?
#{}:相当于JDBC中的PreparedStatement
${}:是输出变量的值
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。