1、SqlSessionFactoryBean
创建session工厂,即SqlSessionFactory
SqlSessionFactoryBean 实现了 Spring 的 FactoryBean 接口
说明由 Spring 最终创建的 bean 不是 SqlSessionFactoryBean 本身,
而是工厂类的 getObject()返回的 SqlSessionFactory 对象
session工厂将会被注入到MapperFactoryBean或其它扩展了SqlSessionDaoSupport的DAO中
属性:
(1)dataSource
(2)configLocation
指定 MyBatis 的 XML 配置文件路径
(3)mapperLocations
配置映射器xml文件
(4)typeAliasesPackage
配置实体类别名
(5)transactionFactoryClass
(6)configuration
映射器类(接口)和Xml文件不在同一个路径下:
(1)使用session工厂配置中的 configLocation属性
mybatis配置文件中使用<mappers>指定xml路径(每一个xml都要配置)
(2)使用session工厂配置中的 mapperLocations 属性,配置xml文件路径(推荐使用)
2、SqlSession
通常不必直接使用 SqlSession
在大多数情况下 MapperFactoryBean, 将会在 bean 中注入所需要的映射器
(1)SqlSessionTemplate
SqlSessionTemplate 实现了 SqlSession 接口
这个类负责管理 MyBatis 的 SqlSession, 调用 MyBatis 的 SQL 方法, 翻译异常
SqlSessionTemplate 是线程安全的, 可以被多个 DAO 所共享使用。
(2)SqlSessionDaoSupport
SqlSessionDaoSupport 是 一 个 抽象 的支 持 类, 用来 为你 提供 SqlSession 。
调 用 getSqlSession()方法你会得到一个 SqlSessionTemplate,之后可以用于执行 SQL 方法
接口实现类需要继承SqlSessionDaoSupport
SqlSessionDaoSupport 需要一个 sqlSessionFactory 或 sqlSessionTemplate 属性来 设 置 。
这 些 被 明 确 地 设 置 或 由 Spring 来 自 动 装 配 。
如 果 两 者 都 被 设 置 了 , 那 么 SqlSessionFactory 是被忽略的
3、使用MapperFactoryBean
自动生成mapper接口对应的代理类,注册到spring中,供Service层调用
代理类创建在运行时环境中,指定的映射器类必须是一个接口,而不是具体的实现类
处理 SqlSession 的创建和关闭
如果使用 了 Spring 的事务,那么当事务完成时,session 将会提交或回滚。
任何异常都会被翻 译成 Spring 的 DataAccessException 异常。
如果xml和接口在同一个包下,MapperFactoryBean会自动解析xml
MapperFactoryBean继承了SqlSessionDaoSupport类,SqlSessionDaoSupport类继承DaoSupport抽象类,
DaoSupport抽象类实现了InitializingBean接口,因此实例化MapperFactoryBean的时候,
都会调用InitializingBean接口的afterPropertiesSet方法
4、MapperScannerConfigurer
该类通过反向代理自动生成基于接口的动态代理类
将 会 查 找 类 路 径 下 的 映 射 器 并 自 动 将 它 们 创 建 成 MapperFactoryBean
basePackage 属性是让你为映射器接口文件设置基本的包路径。
你可以使用分号或逗号 作为分隔符设置多于一个的包路径
MapperScannerConfigurer属性不支持使用了PropertyPlaceholderConfigurer的属性替换,
因为会在Spring启动之前来加载它。可以使用PropertiesFactoryBean和SpEL表达式来作为替代
注 意 , 没 有 必 要 去 指 定 SqlSessionFactory 或 SqlSessionTemplate ,
因 为 MapperScannerConfigurer 将会创建 MapperFactoryBean,之后自动装配。
但是,如果你使 用了一个 以上的 DataSource ,那 么自动 装配可 能会失效 。
此时,你可以使用sqlSessionFactoryBeanName或sqlSessionTemplateBeanName属性来设置正确的 bean 名 称来使用
annotationClass 属性指定了要寻找的注解名称。
markerInterface 属性指定了要寻找的父 接口。
如果两者都被指定了,加入到接口中的映射器会匹配两种标准
5、事务
DataSourceTransactionManager
(1)@Transactional 注解
(2)AOP(Aspect-Oriented Program,面向切面编程)样式的配置
参考资料:http://www.mybatis.org/spring/zh/index.html
让我们一起遨游在代码的海洋里!
spring整合mybatis学习笔记
最新推荐文章于 2023-10-28 13:05:10 发布