Mybatis配置中#{}与${}的区别
2018-09-07 本文已影响0人
我是邱邱
**#{} **
(1)防止sql注入。使用#{}意味着使用的预编译的语句,即在使用jdbc时的preparedStatement,sql语句中如果存在参数则会使用?作占位符,我们知道这种方式可以防止sql注入。
(2)组成sql语句的时候把参数默认为字符串。在使用#{}时形成的sql语句,已经带有引号,例,select * from table1 where id=#{id} 在调用这个语句时我们可以通过后台看到打印出的sql为:select * from table1 where id='2' 加入传的值为2.也就是说在组成sql语句的时候把参数默认为字符串。
${}
(1)原样输出,即参数是什么就输出什么,在sql语句中不会当做字符串处理
例如select * from table1 where id=${id} 在调用这个语句时控制台打印的为:select * from table1 where id=2 ,假设传的参数值为2
(2)基本类型不能使用${}
对于以下情况必须使用{}查询数据库某张表中的所有数据的时候:参数为基本数据类型时也会报错,即
image image测试代码为:
image在MyBatis中,一般会优先选择#{}使用。
MyBatis中,sql语句中用到的参数,本质上会自动封装为一个map对象,所以上述代码中可以使用map,即正确的代码如下:
sql语句如下:
image测试代码如下:
// selectList查询多条语句List list =session.selectList(Person.class.getName() + ".findAll3");
public void findAll3(){SqlSession session = sessionFactory.openSession();
System.out.println(list.size());
System.out.println(list.get(0).getName());
session.commit();
session.close();
}
image