Spring整合Mybatis详解
spring整合Mybatis目的替换spring提供的Mybatis配置文件核心流程Spring 容器通过 SqlSessionFactoryBean 构建 MyBatis 核心工厂再通过 MapperScannerConfigurer/MapperScan 扫描并注册 Mapper 动态代理 Bean最终实现 Service 层注入 Mapper 并执行数据库操作全程由 Spring 托管生命周期与事务。配置依赖核心配置类DataSource的配置public class MybatisConfig { /**定义beanSqlSessionFactoryBean用于产生SqlSessionFactory对象 *构建Mybatis核心工厂 * DataSource数据源,Spring创建好多管理数据库连接的Bean对象 **/ Bean public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){ //创建SqlSessionFactoryBean对象 SqlSessionFactoryBean ssfb new SqlSessionFactoryBean(); //扫描包下的所有实体类同时配置别名在xml文件中resultTypeuser不用全类名了 ssfb.setTypeAliasesPackage(com.itheima.domain); //给Mybatis设置数据库连接信息 ssfb.setDataSource(dataSource); return ssfb; } /** * 通过 MapperScannerConfigurer/MapperScan 扫描并注册 Mapper 动态代理 Bean */ Bean public MapperScannerConfigurer mapperScannerConfigurer(){ //创建扫描器对象 MapperScannerConfigurer msc new MapperScannerConfigurer(); //设置扫描的包名这样的话包下的所有接口都会被扫描到自动当成Mapper接口不用Mapper //如果不做这个配置可以在启动类中使用MapperScan注解指定扫描的包名 msc.setBasePackage(com.itheima.dao); return msc; } }Spring 注入 MyBatis 核心流程4 大阶段阶段 1Spring 容器启动初始化核心组件和代码有什么关系Spring 启动 → 自动找配置类MybatisConfig执行第一个BeanSpring 在这里做了 3 件事创建 SqlSessionFactoryBean注入 dataSource连接池生成 MyBatis 的核心SqlSessionFactory阶段 2扫描 Mapper 接口注册动态代理 Bean通过MapperScan(com.itheima.dao)或MapperScannerConfigurer实现扫描触发Spring 启动时MapperScan会触发MapperScannerRegistrar扫描指定包下所有标注Mapper的接口。动态代理注册阶段 3Service 层注入 Mapper建立依赖关系Service 层通过 Autowired/Resource 注入 Mapper 接口阶段 4执行数据库操作核心交互逻辑调用 Mapper 方法时底层由SqlSessionTemplate完成线程安全的数据库操作代理拦截Mapper 代理对象MapperProxy拦截方法调用将请求封装为MapperMethod。获取 SqlSessionMapperProxy依赖SqlSessionTemplate线程安全的SqlSession封装类通过ThreadLocal绑定当前线程的SqlSession若当前线程存在 Spring 事务复用已绑定的SqlSession保证事务一致性。若无事务临时创建新的SqlSession操作完成后自动关闭。执行 SQL 并返回SqlSessionTemplate调用 MyBatis 底层Executor执行 SQL处理结果映射最终返回数据。事务管理若方法标注TransactionalSpring 事务管理器会自动控制事务提交 / 回滚无事务时SqlSessionTemplate自动提交并关闭连接避免资源泄漏。整合 MyBatis 到 Spring 的核心价值资源管理自动化- 避免资源泄漏声明式事务- 简化事务控制资源管理自动化- 避免资源泄漏声明式事务- 简化事务控制依赖注入- 解耦组件关系---可以通过Autowired注入mapper不再需要手动创建统一配置- 集中管理配置异常统一处理- 简化错误处理---spring自动将Mybatis异常转换为DataAccessException生态集成- 无缝使用 Spring 全家桶--直接通过注解进行缓存事务定时任务等测试友好- 便于单元测试和集成测试使用sqlSessionFactoryBean转化 Configuration //添加Bean扫描路径 ComponentScan(com.itheima) // PropertySource加载类路径jdbc.properties文件 //可以使用Value(${属性名})使用其中的属性值 // Value可以在配置文件中找key PropertySource(classpath:jdbc.properties) Import({JdbcConfig.class,MybatisConfig.class})//导入JdbcConfig和MybatisConfig配置类 //也可以在相应配置类加Configuration注解 public class SpringConfig { }
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2521710.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!