MyBatis需要注意的一些问题

1.使用mybatis二级缓存的时候需要注意的问题

二级缓存中存放的数据量不能过大。二级缓存是基于命名空间的,当多个命名空间同时操作同一张表的时候,不推荐使用二级缓存。因为当一个命名空间对表中的数据进行update、insert或delete的时候,不会刷新另一个命名空间中的缓存。此时用另一个命名空间进行select还是会查询到缓存数据。

2.resultType和resultMap的区别

在MyBatis参考文档中(版本3.5.1)中是这样描述的

个人理解和总结

resultType

当我们从数据库查询出一个结果,该结果能够与Java中的对象相匹配的时候,使用resultType。比如查询数据总量此时resultType="Integer"、查询出一个人的名字,此时resultType="String"

resultMap

当我们查询出的结果无法找到相对应的类型进行匹配的时候,我们可以使用resultMap对查询出的结果进行包装。例:一个人的姓名和薪水存储在两个表中,name,salary我们可以自定义resultMap

<resultMap id="自定义" type="查询时关联的主表">
   <result .... />
   ...
</resultMap>

3.collection和association的区别

collection

一对多,比如老师和学生就是一对多的关系。我们在定义MyBatis从数据库查询的得到的结果集的时候,我们可以使用collection标签包装出相应的resultMap使之能够与java对象能够相互对应。

例如老师和学生一对多的关系就可以使用collection进行遍历,包装出对应的resultMap.

在进行批量删除,更新,插入的时候同样可以使用collection标签进行遍历。

association

同理,当我们遇到一对一地情况就可以使用association标签对结果集进行包装了

4.Statement和PreparedStatement的区别

Statement对象用于将需要执行的SQL语句发送到数据库中,数据库每次都要执行SQL语句的编译。
PreparedStatement会对将要执行的SQL语句进行预编译,安全性和效率方面较好。

5.在MyBatis的Mapper.xml配置文件中#{}和¥{}的区别?

#{}会将传入的数据解析成一个字符串,对数据加一个双引号,#{}方式能够很大程度防止sql注入

${}则将传入的数据是直接显示生成在sql中,${}无法防止sql注入,使用需谨慎

6.

发布了14 篇原创文章 · 获赞 2 · 访问量 1029

猜你喜欢

转载自blog.csdn.net/GoNewWay/article/details/103994251