- #{}在底层实现上使用?做占位符来生成PreparedStatement,然后将参数传入,大多数情况都应使用这个,它更快、更安全。
- ${}将传入的数据直接显示生成在sql中。使用 #{} 可以有效的防止SQL注入,提高系统安全性
-
Spring发现需要创建SqlSessionFactory实例,会在classpath下找到MyBatis的核心配置文件,使用它来初始化一个SqlSessionFactory实例。当然,这一步完全可以使用代码来完成,或者使用注解,就更加清晰明了。
-
往往mapper类也会作为bean注入到代码中去的,那么Spring会使用上一步中的SqlSessionFactory实例来创建SqlSession的实例。 然后再使用SqlSession尝试创建各个mapper对象。
-
于此同时,MyBatis会扫描classpath下的mapper映射XML文件(此路径可以自定义),对于每一个mapper接口,它的「类全名」会作为命名空间,来和映射文件中的mapper标签进行匹配。 对于每一个映射文件中的一个执行语句标签(如select、delete),MyBatis会把他们映射到SqlSession的方法上,创建mapper接口的一个实现类。 如果mapper接口和其映射文件一一匹配,则bean创建成功。