一、Mybatis-Spring源码结构

二、Myabtis交给Spring管理的组件

1. dataSource 数据源

配置一个数据源,只要是实现了javax.sql.DataSource接口就可以,可以使任意第三方数据源

 1 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
2 <property name="driverClassName">
3 <value>com.mysql.jdbc.Driver</value>
4 </property>
5 <property name="url">
6 <value>jdbc:mysql://localhost:3306:/mybatis?zeroDateTimeBehavior=convertToNull</value>
7 </property>
8 <property name="username">
9 <value>root</value>
10 </property>
11 <property name="password">
12 <value>root</value>
13 </property>
14 </bean>

2. sqlSessionFactory 生成sqlSession的工厂

  给出两个参数,一个是dataSource数据源,另一个是和Mybatis配置文件路径,classpath说明它在.class文件里面。这样Spring初始化IOC容器时区初始化SqlSessionFactoryBean,它是通过解析Myabtis配置文件得到Myabtis运行所需要的上下文。

1 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
2 <property name=dataSource" ref="dataSource" />
3 <property name=configLocation" value="classpath:sqlMapConfig.xml" />
4 </bean>

3. sqlSessionTemplate 调用sqlSession的模板类

SqlSessionTemplate是Mybatis-Spring的一个核心类。可以通过SqlSessionFactory作为参数,另一个是SqlSessionFactory和执行器类型作为参数。

<bean id="sqlSessionTemplate" calss="org.mybatis.spring.SqlSessionTemplate">
<construct-arg index="0" ref="sqlSessionFactory"/>
</bean>

或者

1 <bean id="sqlSessionTemplate" calss="org.mybatis.spring.SqlSessionTemplate">
2 <construct-arg index="0" ref="sqlSessionFactory" />
3 <construct-arg name="1" value="BATCH" />
4 </bean>

  这就意味着Spring会把之前配置好的SqlSessionFactory设置到SqlSessionTemplate中,同时使用SqlSessionTemplate和SqlSessionFactory,系统会用SqlSessionTemplate覆盖掉另外一个。它的效果等同SqlSession对象。

4. mapper 映射器

  Mapper只是一个接口,而不是一个实现类,是由Myabtis动态代理的形式生成代理对象去运行的,Spring也没有办法为其生成实现类。MapperFactoryBean类作为中介,通过配置实现为我们所想要的Mapper,它有三个参数MapperInterface 定制接口、SqlSessionFactory SqlSessionTemplate属性没有被配置时设置,SqlSessionTemplate 设置后SqlSessionFactory作废。这个效果等同于SqlSession.getMapper(UserDao.class)

1 <bean id="userDao" calss="org.mybatis.spring.mapper.MapperFactoryBean">
2 <property name="mapperInterface" value="org.wusf.dds.model.mapper" />
3 <property name="sqlSessionTemplate" ref="sqlSessionTemplate" />
4 <!-- 如果同时注入SqlSessionTemplate和SqlSessionFactory,只启用SqlSessionTemplate -->
5 </bean>

  MapperScannerConfigurer 配置自动扫描信息。basePackage,指定让Spring自动扫描什么包,会逐层深入扫描;annotationClass,表示类被这个注解标识后被扫描;sqlSessionFactoryBeanName,指定Spring中定义sqlSessionFactory的bean名称,被定义后sqlSessionFactory不起作用;sqlSessionTemplateBeanName,指定Spring中定义sqlSessionTemplate的bean名称,被定义后sqlSessionFactory不起作用;markerInterface,指定实现了什么接口就认为他是Mapper。

1 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
2 <property name="basePackage" value="org.wusf.dds.model.mapper" />
3 <property name="sqlSessionTemplateBeanName" value="sqlSessionTemplate" />
4 <property name="annotationClass" value="org.springframework.stereotype.Repository" />
5 </bean>

5. transactionManager 事务管理器

Myabtis和Spring结合后是使用Spring AOP去管理事务的,分为 声明式事务(比较方便,大部分场景下适用,主流) 和 编程式事务 两种

配置配置Spring声明式事务

1 <bean id="txManager" class="org.springframework.jdbc.dataSource.DataSourceTransactionManager">
2 <property name="dataSource" ref="dataSource" />
3 </bean>
4 <!-- 使用声明式事务管理方式(注解) -->
5 <tx:annotation-driven transation-manager="txManager" />

业务层是处理业务的地方,也是处理数据库事务的地方。Spring配置业务层,使用@Service表示哪个类是业务层的类,也可以同自动扫描的方法读取Service对象到Spring上下文中

1 <context:component-scans base-package="org" use-default-filters="false">
2 <context:include-filter type="annotation" expression="org.springframework.stereotype.Service" />
3 </context:component-scan>

最新文章

  1. 编译带有PROJ4和GEOS模块的GDAL
  2. PHP实现文件上传
  3. 选择排序java代码
  4. bootstrap-select去除蓝色边框outline
  5. yarn map failed
  6. 获取Ad用户信息
  7. 【未完待补充】linux 设置So动态库链接路径
  8. ASP.NET在删除掉数据库文件后报错处理
  9. systemd的原理和适用方法
  10. app打包流程
  11. MyEclipse2015 编写js报 &#39;Calculating completion proposals..&#39; has encountered a problem.
  12. SqlServer之代码块相关
  13. PHP与MySQL交互
  14. powerdesigner数据建模
  15. 使用JustDecompile修改程序集
  16. Huginn实现自动通过slack推送豆瓣高分电影
  17. Chapter 3 Protecting the Data(1):理解权限
  18. Web.Config加密与解密
  19. 软件-集成开发环境:IDEA(Java 语言开发的集成环境)
  20. Go Code Review Comments 译文(截止2018年7月27日)

热门文章

  1. Weblogic Coherence组件漏洞初探CVE-2020-2555
  2. Android通过WebView实现新闻界面的加载
  3. CentOS7下编译安装redis-5.0.9
  4. ThinkPHP5通过composer安装Workerman安装失败问题
  5. 判断手机浏览器还是微信浏览器(PHP)
  6. centos linux服务器apache+mysql环境访问慢优化方法
  7. 试玩Aid Learning
  8. Microfacet模型采样下的brdf
  9. T183637-变异距离(2021 CoE III C)【单调栈】
  10. P3309-[SDOI2014]向量集【线段树,凸壳】