spring整合mybatis学习笔记

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

让我们一起遨游在代码的海洋里!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值