关于spring整合mybatis的bean标签概念问题

图片说明

有几个问题想问下:

1. 为什么扫描实体类包entity要在sqlSessionFactory的bean标签里?
扫描entity包下的实体类不应该在最外层写各种bean吗?

<property name = "typeAliasesPackage"  value = "com.imooc.entity" />

2. 为什么mapper.xml要在sqlSessionFactory加载呢?这个我是知道要这么写,但是不太明白原因。

3. 我之前扫描dao接口包,都是以dao接口的类名称为bean的id,直接写在最外层。我那种写法和图片中的写法有什么区别吗?

谢谢。

1.看SqlSessionFactoryBean的源码可以知道typeHandlersPackage是这个类的一个成员变量,配置的是entity的包路径,
spring启动时,会装载这个包路径下的所有实体,效果等同于给每个类加上注解让spring管理,也等同于在spring ctx.xml文件中配置各类bean
2方便通过sqlSessionFactory来读取mapper文件,spring启动时会读取这些mapper文件
3.底层没啥区别,只是按包扫描,当DAO的文件多时,不需要挨个bean配置,优势就体现出来了

推荐看下 https://blog.csdn.net/qq_38094271/article/details/80308404

再看看源码,就容易理解了

spring启动就会创建factory,将扫描放到sqlsessionfactory加载的时候,不用每次都加载,一次加载就可以了。