Mybatis源码之与Spring集成包

这次讲讲Mybatis与Spring的整合,作为两款优秀的开源框架,被大众广泛使用,自然是需要强强联合的。

使用示例

先看一下怎么使用,首先需要引用这两款框架的jar包:

<dependency>//spring-webmvc会自动去引入其他Spring的核心包<groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-jcl</artifactId><version>${spring.version}</version>
</dependency>
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version>
</dependency>
<dependency>//集成包,是Mybatis和Spring的中间桥梁<groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.2</version>
</dependency>

在Spring的配置文件中需引入集成包的两个类:

org.mybatis.spring.SqlSessionFactoryBean:将Mybatis的SqlSessionFactory注入到Spring的IOC容器中;

org.mybatis.spring.mapper.MapperScannerConfigurer:配置Mybatis接口以及Spring容器中的SqlSessionFactory引用;

配置示例:

<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">//配置数据源的引用<property name="dataSource" ref="dataSource"></property>//配置Mybatis对的配置所在类路径(可不配)<property name="configLocation" value="classpath:mybatis-config.xml"></property>//配置Mapper文件所在位置<property name="mapperLocations"><list><value>classpath:com/test/mybatis/dao/*.xml</value></list></property>
</bean>	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">//配置DAO层接口所在位置,多个DAO路径可用,隔开<property name="basePackage" value="com.test.mybatis.dao"></property>//配置SqlSessionFactoryBean引用名称<property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"></property>
</bean>

源码分析

Spring集成了Mybatis之后Mybatis的配置文件中的标签配置基本可以不需要配置,都可以在Spring中的配置;

先谈谈这两个类:

SqlSessionFactoryBean

Mybatis中任何属性均在在这个类中可配置:

我们可以发现这个实现了三个接口:

FactoryBean<SqlSessionFactory>:Spring中Bean存在的一种形式;

InitializingBean:Bean的初始化方法;

ApplicationListener<ApplicationEvent>:Spring IOC容器监听方法,分别在容器创建、关闭、刷新、停止时执行;

Bean的初始化方法:

在buildSqlSessionFactory方法中就是将Mybatis的流程加载一遍。

容器的监听方法:

MapperScannerConfigurer

该类实现了:

BeanDefinitionRegistryPostProcessor: BeanDefinitionRegistry的后置处理器,即在Spring容器创建时加载,可以修改Bean一些相关的信息;

InitializingBean:Bean的初始化方法:

ApplicationContextAware:上下文接口的Aware接口,可将容器中上下文对象开放;

BeanNameAware:Bean名称Aware接口,可以修改Bean的名称;

重点谈一下以下两个方法:

过滤器,在Spring当中能够指定过滤某些类或注解等等,在之前的Spring的文章好像没有谈到,那就下次在说吧:

在扫描的方法中,会将扫描接口的一些Bean的属性进行改变:

到了这里会发现将所有的接口Bean中的Class替换成MapperFactoryBean,那么这些接口所有的Class类型都是MapperFactoryBean了。

其实集成包中除了之前的两个类之外,还有一个MapperFactoryBean对象。

MapperFactoryBean

在MapperScannerConfigurer当中将所有的接口类型全部替换成MapperFactoryBean,所以在Spring的配置文件也可以这样配置单个接口:

<bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean"><property name="mapperInterface" value="com。test。mybatis。dao。UserDao"></property><property name="SqlSessionFactory" ref="sqlSessionFactoryBean"></property>
</bean>

如果接口过多,就需要配置很多MapperFactoryBean,不方便,所以一般在企业级应用中都是配置MapperScannerConfigurer。

这样我们调用DAO的接口对象就是MapperProxy的代理对象了,就可以操作数据库了

示例:

&将FactoryBean本身的类获取到,之前谈Spring的时候提到过。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/537121.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hadoop主节点切换_hadoop2.0 HA的主备自动切换

在《hadoop2.0 QJM方式的HA的配置》一文中介绍了HA的配置&#xff0c;是通过手工进行主备切换的。本文在这基础上&#xff0c;继续介绍HA的主备自动切换(automatic failover)的配置。自动切换是通过配置zookeeper来实现的&#xff0c;关于zookeeper的安装和配置&#xff0c;在这…

Mybatis源码之插件模块分析

总结完这个Mybatis的整体主要功能基本上就差不多完&#xff0c;还有一些细节的部分&#xff0c;后续都会记录补充。 插件这个东西一般用的比较少&#xff0c;就算用的多的插件也算是PageHelper分页插件&#xff1b; PageHelper官网&#xff1a;https://github.com/pagehelper…

AMD推出7nm高端显卡Radeon VII,直指英伟达RTX 2080

显卡战争已经发展到了2019年&#xff0c;并且变得比任何人预想的都要激烈。 CES 2019大会上&#xff0c;AMD发布了第一款消费级的 7nm GPU&#xff0c;取名&#xff1a;Radeon VII。据了解&#xff0c;这不是 AMD 的第一颗 7nm 处理器&#xff08;早期以 AI 运算为主的 Radeon …

电子绘本pdf_【孩子必看的】20本世界著名英文绘本 | PDF电子版+MP3音频

原标题&#xff1a;【孩子必看的】20本世界著名英文绘本 | PDF电子版MP3音频2 —6岁年龄段的孩子&#xff0c;自我意识逐渐萌芽&#xff0c;已经明白书是一种“特殊”的玩具&#xff0c;不在撕书、咬书、把书搬来搬去。这个阶段他们记忆力超强&#xff0c;唐诗、三字经啥的&…

Spring集成Mybatis多数据源配置

既然在整理Mybatis那就把经常用的这个多数据源的笔记也整一下吧。 Spring集成Mybatis在之前就已经提到了。Spring集成Mybatis 集成Mybatis多数据源有两种方式&#xff1a; 1、创建多个SqlSessionFactory&#xff0c;扫描每个SqlSessionFactoryBean对应的包&#xff0c;形成了…

Spring文件上传

2019独角兽企业重金招聘Python工程师标准>>> Spring文件上传 1、所需依赖包&#xff1a;commons-fileupload-1.3.1.jar2、Maven配置文件pom.xml文件中加入依赖Jar包<dependency><groupId>commons-fileupload</groupId><artifactId>commons-…

中英离线翻译mac_Instant Translate for Mac-即时翻译Mac版下载 V1.3.0-PC6苹果网

即时翻译(Instant Translate)Mac版是一款Mac平台的翻译及辞典软件&#xff0c;Instant Translate支持90的语言互翻译&#xff0c;通过ControlS切换语言&#xff0c;并且支持发音功能&#xff0c;并且支持自动检测语言并进行翻译。软件特色Instant Translate的主要特点&#xff…

基于Zookeeper使用ZkClient实现分布式锁

有段时间没写博客了&#xff0c;在整理之前写过的一套自定义框架&#xff0c;并且整理好上传值github上了&#xff0c;也有一些新功能还在开发&#xff0c;欢迎大家使用&#xff1a;一个好用的Http接口请求工具组件 可能今天这篇文章跟之前的比有些跳跃性&#xff0c;一下子就…

算法题学到的一些小语言细节

1.要学会用i&#xff1b;可以简化很多代码&#xff1a;i&#xff1b;copyFromMe(i)&#xff1b;可以写成&#xff1a;copyFromeMe(i) 2.StringBuffer也跟列表一样有append函数&#xff1b; 3.if语句是分支不能进行循环&#xff0c;要写成while才能替代循环里面的判断 4. 这里的…

android 按钮带图标 阴影_android中带图标的按钮(ImageButton)怎么用

展开全部除了Android系统自带的Button按钮以外&#xff0c;还提供了带图标的按钮ImageButton要制作带图标的按钮&#xff0c;首先要在布局62616964757a686964616fe58685e5aeb931333337613163文件中定义ImageButton&#xff0c;然后通过setImageDrawable方法来设置要显示的图标。…

Zookeeper基础常用操作以及ACL权限

这次将Zookeeper的一些基础用法以及权限这块的都补充一下在这篇博客中。 上篇博客介绍了基于ZooKeeper实现的分布式锁&#xff0c;也介绍了一些ZooKeeper的节点类型以及监听机制&#xff0c;今天这里就不作过多的介绍了&#xff0c;大家也可以自行的去官方文档上看看更具体的介…

[中医经络学习一]足阳明胃经

人体有六脏&#xff08;心、肝、脾、肺、肾五脏&#xff0c;再加心包&#xff09;六腑&#xff08;胃、小肠、大肠、膀胱、胆、三焦&#xff09;&#xff0c;每个脏腑都联接着一条经络&#xff0c;一共12条经络&#xff0c;称“十二正经”&#xff0c;经络的走向在四肢两侧基本…

ThreadLocal原理解析以及是否需要调用remove方法

平常的开发过程中&#xff0c;如果有个类不是线程安全的&#xff0c;比如SimpleDateFormat&#xff0c;要使这个类在并发的过程中是线程安全的&#xff0c;那么可以将变量设置位局部变量&#xff0c;不过存在的问题就是频繁的创建对象&#xff0c;对性能和资源会有一定降低和消…

Maven基础及概念

前言 今天就来聊聊Maven的基础和一些比较概念性的东西&#xff0c;还有一些常用的Maven命令啥的&#xff0c;主要是某人脑子记不住&#xff0c;记在博客中让她自己看吧&#xff0c;省的费心给她找。 后续的文章会聊到Maven的一些比较高级用法&#xff0c;像自定义插件&#x…

织梦缩略图自动补齐绝对路径_织梦生成文章内容缩略图时自动加上域名绝对路径...

今天又接了个织梦CMS的有偿服务,客户想要后台添加文章内容的时候,缩略图自动变成带上绝对路径的格式.比如我们默认的缩略图是这样的 /uploads/allimg/150814/123P2NB-0-lp.png 他想要的效果是这样的 http://www.youwujun.com.cn/uploads/allimg/150814/123P2NB-0-lp.png大家懂我…

BUAA 436 孟竹的复习计划(二维树状数组)

题目链接&#xff1a;http://acm.buaa.edu.cn/problem/436/ 题意&#xff1a;一个数列两种操作&#xff1a;&#xff08;1&#xff09;将某个位置的数字改成另一个数字&#xff1b;&#xff08;2&#xff09;交换两个位置的数字。每次操作之后输出逆序数的个数。 思路&#xff…

Maven之pom.xml常用标签解析及镜像配置

前言 Maven仅仅是个打包工具而已&#xff0c;个人觉得没有太大必要花费在打包工具上&#xff0c;这里就列举一下个人觉得会常用标签的使用就好了&#xff0c;原理啥的基本就不太会去深度了解了&#xff0c;如果以后遇到需了解Maven工作原理的工作的话&#xff0c;到时候一定分…

idea 导入svn代码_idea导入svn项目

起初和导入git项目一样&#xff0c;file - new - project from version control - &#xff0c;这后面选 subversion。在打开的 checkout from subversion对话框中&#xff0c;输入svn地址&#xff0c;比如 svn://11.22.33.44/demo。添加一个后&#xff0c;展开新加项&#xff…

由mysql8降级到mysql5

最近在研究liferay的使用。liferay可以连接mysql数据库。电脑中装的mysql的最新版本是mysql8。于是开始按照liferay的要求进行连接。但是多番尝试后&#xff0c;均报错&#xff1a;java.sql.SQLException: java.lang.ClassCastException: java.math.BigInteger cannot be cast …

tf计算矩阵维度_tensorflow中关于 多维tensor的运算(tf.multiply, tf.matmul, tf.tensordot)...

multiply 等同与* &#xff0c;用于计算矩阵之间的element-wise 乘法&#xff0c;要求矩阵的形状必须一致(或者是其中一个维度为1)&#xff0c;否则会报错&#xff1a;import tensorflow as tfa tf.constant([1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12], shape[2, 3, 2])b tf.con…