MyBatis占位符#和$的区别

一、#{}

//MyBatis创建出PreparedStatement对象,执行SQL语句

Conncection conn = JDBCUtils.getConnection();

String sql = "select * from users where id=?";

PreparedStatement pst = conn.preparedStatement(sql);

pstm.setInt(1,101);//传递参数

ResultSet rs = pst.executeQuery();//执行SQL语句

#{}特点:

1.使用PreparedStatement对象执行SQL,效率高。

2.使用PreparedStatement对象,能够避免SQL注入,SQL语句执行更安全。

3.#{}常常作为列值使用,位于等号的右侧。

二、${}

${}表示字符串连接,把SQL语句其他内容和${}里的内容使用 "+" 连接

假设传入参数 "101"

String sql ="select * from users where id="+"101";

MyBatis创建Statement对象执行SQL语句

Statement stmt = conn.createStatement(sql);

ResultSet rs = stmt.executeQuery();

${}特点:

1.使用Statement对象执行SQL,执行效率低。

2.${}占位符的值,使用的是字符串连接的方式,有SQL注入的风险。

3.${}数据是原样使用的,不会区分数据类型。

4.${}常用作表明或者列名,在能保证数据安全的情况下使用${}

你可能感兴趣的:(java-ee)