回顾当前配置下的加载顺序
1. MyBatis的主配置文件mybatis-config.xml 和 工具类MyBatisUtil
2. Mapper文件
3. Dao接口
4. Service接口
5. Service实现
6. 测试端
Spring集成MyBatis+MyBatisUtil
步骤
1. 添加Spring,MyBatis相关jar包 共计24个
2. 复制主配置文件applicationContext.xml,部分命名空间
3. 测试一个UserService例子
替代mybatis-config.xml 主配置文件的功能
使用Spring来集成该功能,Spring的IOC来替MyBatis生成工厂的特殊对象
创建数据连接,即数据源取代标签组
创建工厂 取代标签组和MyBatisUtil 工具类
加载JDBC的配置文件 独立配置文件
修改为动态参数
测试打印 SqlSessionFactory
完成MyBatis对象的引入
版本1:IOC创建,管理Dao,Service 层
使用Spring IOC 获得dao对象,同时注入sqlSession配置
使用Spring IOC 创建service对象,并持有dao对象的引用
service层的实现类,持有dao对象的引用,并创建对应的set和get方法
完成ProductService的查询例子
1. 检查原 MyBatisUtil工具类,依靠代理创建的对象
2. 对比Spring IOC创建的对象
3. 两者类型一致,说明Spring IOC创建的dao 对象
底层实现:SqlSession的MapperProxy代理实现
4. Spring-IOC 创建的sqlSessionFactory对象,会自动完成事务的提交和流的关闭
移除mybatis-config.xml 配置文件,MyBatisUtil工具类,及相关配置
版本2:dao层的动态代理
1. 特殊类MapperScannerConfigurer根据value值,找到接口的包
2.将该包下所有的接口类名,改为 标准的对象引用命名(驼峰命名)
3. 通过自动装配byType,实现自动注入SqlSession对象
4.spring 容器中拥有这些 标准的对象引用名,可以直接被引用
5.底层实现:SqlSession的MapperProxy代理实现
Service层的自动装配
开启注解扫描,扫描Service的接口层
Service实现类标注注解
@Autowired 底层实现: 反射+无参构造方法
Service自动装配Dao对象,默认按照id自动装配productDao
不再需要productService的bean标签和set/get方法了
Spring的专属Junit
总结:
1. Dao层的对象创建的底层实现,是MyBatis框架下的SqlSession对象,依靠MapperProxy动态代理技术实现 byName
2.Service层的对象创建的底层实现,是由注解@Service发起,依赖Spring-IOC 的bean-type来创建。再底层细致,就是反射+无参构造方法 byType
3. 层与层之间都必须有需要有Spring bean 的定义(不管是显示定义,还是隐藏定义)
4.类与类之间的依赖 :
原始是通过在配置文件里写明ref实现;
升级后,靠注释自动装配@Autowired实现,但是底层还是靠ref实现
集成web
web.xml添加监听,用来加载Spring的主配置文件