MyBatis中 #{} 与 ${} 的区别
#{} 在一定程度上防止了SQL注入 使用#{}入参,MyBatis会生成PrepareStatement并且可以安全地设置参数(=?)的值。因为sql语句已经预编译好了,传入参数的时候,不会重新生产sql语句。安全性高。 JDBC中PreparedStatement是我们很熟悉的Statement的子类,它的对象包含了编译好的SQL语句。这种“准备好”的方式不仅能提高安全性,而且在多次执行同一个SQL时,能够提高效率。原因是SQL已编译好,再次执行时无需再编译。 //PreparedStatement预编译 Connection conn = getConn ( ) ; //获得连接 String sql = "select username, password from user where username=? and password=?" ; //执行sql前会预编译号该条语句 PreparedStatement pstmt = conn . prepareStatement ( sql ) ; pstmt . setString ( 1 , "username" ) ; pstmt . setString ( 2 , "password" ) ; ResultSet rs = pstmt . executeUpdate ( ) ; #将传入的数据都当成一个字符串