什么是MyBatis
MyBatis是一款优秀的持久层框架,特别是在国内(国外据说还是 Hibernate 的天下)非常的流行,我们常说的SSM组合中的M指的就是#mybatis#。
MyBatis支持定制化SQL、存储过程以及高级映射等多种特性,单纯从代码上来看,MyBatis避免了几乎所有的JDBC代码和手动设置参数以及手动处理结果集。而且MyBatis的使用也非常方便,可以通过简单的XML或注解来配置和映射数据信息。
`#` 和 ` 1.# 会进行预编译,而且会进行类型匹配,参数是在编译之后填充进去的,所以不需要加上单引号; 2.$ 不会进行数据类型匹配,只是一种单纯的字符串拼接,所以要自己手动加上单引号,否则最终拼接出来的 SQL语句会有问题。不过也要看具体的使用场景,如果参数是列名,就不用加单引号; 3.`#` 能够预防 SQL 注入问题,$ 不能; 4.当需要遇到将数据库的字段名作为参数传递时,应该使用用 $。 基本用法 我们先来了解一下 `#`和 ` 我们先来看 `#` 的用法: select * from t_user where name = #{param} 如果想执行相同的 SQL,用 $ 写法如下: select * from t_user where name = '${param}' 眼尖的小伙伴可能已经发现,使用 ` # 会进行预编译,而且会进行类型匹配,参数是在编译之后填充进去的,所以不需要加上单引号; $ 不会进行数据类型的匹配,只是单纯地进行字符串的拼接,所以要自己手动加上单引号,否则最终拼接出来的SQL语句就不对了。 用过JDBC的小伙伴可能会知道,这就跟JDBC中的PrepareStatement和Statement的区别是一样的,使用 `#` 就相当于使用 PrepareStatement,而使用 ` 相比于 $ ,#有一个重要的作用,那就是可以防止SQL注入! 变量传递时,必须使用#。使用 #{} 就等于使用了JDBC 中 PrepareStatement 这种占位符的形式,既可以提高SQL的执行效率,又可以防止SQL注入等问题。 $ 只是一种简单的字符串拼接,要特别小心 SQL注入的问题。如果我们在项目中使用了$,那么可以自定义过滤器或者通过Druid等工具,来防止SQL注入。 如果在一个场景中,既能使用 # 又能使用 $,那么建议首选 #。 想要了解更多精彩内容,欢迎关注千锋IT教育!