MyBatis3.x和Spring3.x的整合

MyBatis3.x和Spring3.x的整合

1.mybatis和spring整合的思路

1.让spring管理SqlSessionFactory
2.让spring管理mapper对象和dao

使用spring和mybatis整合开发mapper代理及原始dao接口。
自动开启事务,自动管理sqlsession

3.让spring管理数据源(即数据库连接池)

2.准备工作

2.1创建整合工程

新建项目,拷贝前一天所建mybatis的项目,现在的项目结构为:


2.2.导入jar包

1.mybatis3.x本身的jar包
2.数据库驱动包
3.spring3.xjar包
4.spring和mybatis的整合包:从mybatis官方下载mybatis-spring-1.2.2.jar

2.3.SqlMapConfig.xml

mybatis的配置文件:设置别名、mappers。如下


mybatis和spring整合后,mybatis配置文件中的<mappers>标签便可以去掉,因为我们在spring配置文件中进行对mapper的配置;别名配置标签<typeAliases>也可以去掉,因为我们也可以在spring配置文件中对pojo全限定性类名的别名进行配置。

2.4.applicationContext.xml

spring配置文件中需要配置的内容有:1.数据源(用的是dbcp连接池,数据库的连接配置写在src路径下的db.properties文件中)。2.SqlSessionFactory。3.mapper或dao。如下:



到此处,我们便完成了mybatis与spring的整合,接下来便可以进行测试了。从整合后的mybatis配置文件和spring的配置文件来来,整合后的mybatis配置文件中的内容基本都被移到了spring的配置文件中。

3.整合开发原始dao接口

3.1配置SqlSessionFactory

在applicationContext.xml中配置SqlSessionFactory,为上图的:


3.2开发原始dao

将dao接口的实现类UserDaoImpl.java继承SqlSessionDaoSupport.java,该父类中有属性的set方法并已经声明SqlSessionFactory对象,所以我们在UserDaoImpl.java中只需要写如下代码:


然后需要在spring配置文件中配置dao:


测试:


控制台中成功打印出结果:


4.整合开发mapper代理方法

首先在mapper包下创建UserMapper.java和UserMapper.xml文件,利用mybatis和spring整合开发mapper的方式有两种。

4.1使用MapperFactoryBean

该类是整合jar包下的一个类,它的内部已经继承SqlSessionDaoSupport类,首先我们需要在spring配置文件中进行Mapper对象的配置:


然后便可以进行测试:



这样就完成了对mapper的开发,使用这种方式的缺点就是对于项目中的每个mapper我们都需要配置上述内容,比较繁琐。接下来看看下面这种开发mapper代理的方式。

4.2使用MapperScannerConfigurer(扫描mapper)

该类同样是整合jar包中的一个类。在spring配置文件中加入如下配置:


然后进行测试:


同样正常运行。

使用这种方式的优点:使用扫描器自动扫描mapper,生成代理对象比较方便。

5.出现异常总结

使用MapperFactoryBean的方式不会报错,但是使用这样扫描包的方式,上述代码我完全是照搬的教程代码,可是运行时会出现org.springframework.beans.factory.BeanDefinitionStoreException的报错。

出现这个异常的原因你不用多想,绝对是因为你的spring 版本与开发工具的jdk版本不兼容!之前在单独开发spring框架中使用到<content:component-scan base-package="包名"注解扫描声明整个pojo包下的类时也出现了这个错误,那时候我将spring3.x.jar包换成spring4.x.jar包后成功解决,因为我的开发工具IDEA默认jdk版本是1.8,所以我要升级jar包版本才能实现兼容。

整合spring和mybatis时又出现了这个错误!所以这里我决定像之前那样将spring3.x换成sring4.x,可是我已经导入的jar包太多太多实在分不清了,经过很多的轮回换jar包后又出现了更多的异常。我为这个异常真是头疼了几天几夜,经过几天的不断研究找资料才发现原因是因为我用的spring 3.x的jar包,与IDEA的jdk1.8不兼容,解决方法有两种:

  • 1.将jdk版本调为1.7,我用的开发工具为IDEA,它默认下的JDK使用1.8版本,所以我需要在三个地方将jdk的版本改过来(前提是你已经下载了jdk1.7版本),修改IDEA配置中Project的jdk版本、Modules的jdk版本、SDKs的版本,如果你用到leTomcat还需要修改Tomcat配置的jdk版本。这样jdk1.7与spring3.x才兼容。
  • 2.将spring3.x.jar换成spring4.x.jar包。这种方式比较繁琐,建议大家使用第一种方式。spring4.x与jdk1.8才兼容。

写到这里,我们便成功的完成了spring3.x与mybatis3.x的整合。整合完后我们便可以从mybatis的配置文件中删掉对mapper的配置了,因为我们已经在spring配置文件中用mapper扫描器对mapper进行了配置。




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

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

相关文章

【转载保存】匿名内部类中this的使用

转载链接&#xff1a;https://www.cnblogs.com/yaowen/p/9471389.html 代码使用模板使用&#xff1a; package test;public class A extends B {public String toString() {return "A";}public static void main(String[] args) {A a new A();a.say();A.AIn aa a…

特征选择

特征选择是特征工程中的重要问题&#xff08;另一个重要的问题是特征提取&#xff09;&#xff0c;坊间常说&#xff1a;数据和特征决定了机器学习的上限&#xff0c;而模型和算法只是逼近这个上限而已。由此可见&#xff0c;特征工程尤其是特征选择在机器学习中占有相当重要的…

交叉验证

sklearn中的交叉验证&#xff08;Cross-Validation&#xff09; sklearn是利用python进行机器学习中一个非常全面和好用的第三方库&#xff0c;用过的都说好。今天主要记录一下sklearn中关于交叉验证的各种用法&#xff0c;主要是对sklearn官方文档 Cross-validation: evaluati…

Jmater参数说明

样本数目&#xff1a;运行时得到的取样器响应结果个数 最新样本&#xff1a;最近一个取样器结果的响应时间 平均&#xff1a;所有取样器结果的响应时间平均值 偏离&#xff1a;所有取样器结果的响应时间标准差 吞吐量&#xff1a;每分钟响应的取样器结果个数 中值&#xf…

【转载保存】java静态方法继承与保存的问题

结论&#xff1a;java中静态属性和静态方法可以被继承&#xff0c;但是没有被重写(overwrite)而是被隐藏. 原因&#xff1a; 1). 静态方法和属性是属于类的&#xff0c;调用的时候直接通过类名.方法名完成对&#xff0c;不需要继承机制及可以调用。如果子类里面定义了静态方法…

机器学习名词解释

1. 损失函数 损失函数是用来估量你模型的预测值f(x)与真实值Y的不一致程度&#xff0c;它是一个非负实值函数,通常使用L(Y, f(x))来表示&#xff0c;损失函数越小&#xff0c;模型的鲁棒性就越好。损失函数是经验风险函数的核心部分&#xff0c;也是结构风险函数重要组成部分。…

【转载保存】推荐ApacheCN开源的一个机器学习路线图

转载&#xff1a;https://mp.weixin.qq.com/s/EMWFFPsaKaGc8FO1g-htzg 推荐ApacheCN开源的一个机器学习路线图 原创&#xff1a; 机器学习初学者 机器学习初学者 今天 推荐一个ApacheCN开源的一个机器学习路线图&#xff1a; https://github.com/apachecn/AiLearning 注意…

CNN(Convolutional Neural Network) 的基础

卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;简称CNN&#xff09;&#xff0c;是一种前馈神经网络&#xff0c;人工神经元可以响应周围单元&#xff0c;可以进行大型图像处理。卷积神经网络包括卷积层和池化层。 卷积神经网络是受到生物思考方式启发的ML…

【转载保存】java 23种设计模式 深入理解

以下是学习过程中查询的资料,别人总结的资料,比较容易理解(站在各位巨人的肩膀上,望博主勿究) 创建型 抽象工厂模式 http://www.cnblogs.com/java-my-life/archive/2012/03/28/2418836.html 工厂方法 http://www.cnblogs.com/java-my-life/archive/2012/03/25/2416227.html 建…

语音识别学习日志 2019-7-13 语音识别基础知识准备 1{语音基础知识}

线性预测 线性预测(linear prediction)根据随机信号过去的p个已知抽样值序列为Sn-1&#xff0c;Sn-2&#xff0c;…Sn-p&#xff0c;预测现时样值Sn的估计值的方法。预测公式是一个线性方程&#xff0c;所以这种预测称为线性预测。 声音的构成 声音频率决定音调&#xff1b;声…

【转载保存】mysql不设置主键使用自增长ID方法

MySQL 每张表只能有1个自动增长字段&#xff0c;这个自动增长字段即可作为主键&#xff0c;也可以用作非主键使用&#xff0c;但是请注意将自动增长字段当做非主键使用时必须必须为其添加唯一索引&#xff0c;否则系统将会报错。例如&#xff1a; 1.将自动增长字段设置为主键。…

【工作】python识别不同国家语言类型

优秀文章推荐&#xff1a; 地址&#xff1a;Python使用谷歌langdetect检测语言 地址&#xff1a;Python3&#xff1a;语言探测工具langdetect和langid 支持的语言类型&#xff1a; 支持检测55种语言&#xff1a; af, ar, bg, bn, ca, cs, cy, da, de, el, en, es, et, fa, f…

语音识别学习日志 2019-7-14 语音识别基础知识准备2 {EM算法与混合高斯模型(Gaussian mixture model, GMM)}

https://blog.csdn.net/lin_limin/article/details/81048411会对GMM和EM做详细介绍 本文参考&#xff1a; http://www.ituring.com.cn/article/497545(GMM模型) https://blog.csdn.net/xmu_jupiter/article/details/50889023(GMM模型) http://www.cnblogs.com/wjy-lulu/p/7…

【爬虫】爬取带有cookie才能获取网页内容的新闻网站

工作任务&#xff1a; 今天老大让我跑取一个新闻网站&#xff1a;https://www.yidaiyilu.gov.cn/ 采坑记录&#xff1a; https协议&#xff0c;如果利用http协议去请求会报出如下信息&#xff1a; 错误&#xff1a;SSLHandshake错误就知道了&#xff0c;客户端与服务端进行连…

语音识别学习日志 2019-7-14 语音识别基础知识准备3 {Kmean算法分析与HMM(Hidden Markov Model)模型}

Kmean算法 聚类算法 对于"监督学习"(supervised learning)&#xff0c;其训练样本是带有标记信息的&#xff0c;并且监督学习的目的是&#xff1a;对带有标记的数据集进行模型学习&#xff0c;从而便于对新的样本进行分类。而在“无监督学习”(unsupervised learni…

【使用注意】Boolean是final类型,值初始化后不能被更改

由于服务代码逻辑需要在map中的value存储Boolean&#xff0c;后面的代码逻辑 中我想更改Boolean的值发现更改不了&#xff0c;后来查找资料才发现原来Boolean实现类是定义为final&#xff0c;还是对原理不了解呀&#xff0c;以后多注重原理。 测试代码&#xff08;final类&…

语音识别学习日志 2019-7-15 语音识别基础知识准备4 {Baun-Welch算法}

HMM 前向算法(Forward Algorithm)详细解释参考: http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-1 http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-2 http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-3…

【转载保存】B+树索引原理以及应用案例

地址&#xff1a;https://www.jianshu.com/p/486a514b0ded 利用c/c实现基于b树小型关系型数据库&#xff1a;https://github.com/enpeizhao/duck_db 利用java实现的基于b树的数据库案例&#xff1a;https://github.com/liumengjun/BPlusTreeIndex 1.什么是索引&#xff1f; …

语音识别学习日志 2019-7-16 语音识别基础知识准备5 {决策树算法(ID3、 C4.5、 CART)}

决策树算法(ID3、 C4.5、 CART) 决策树的定义 决策树学习采用的是自顶向下的递归方法&#xff0c;其基本思想是以信息熵为度量构造一颗熵值下降最快的树&#xff0c;到叶子节点处&#xff0c;熵值为0。其具有可读性、分类速度快的优点&#xff0c;是一种有监督学习。 决策树呈…

【使用注意】文件内容突然消失

最近在写一个搜索&#xff0c;然后做单元测试时候发现只要启动搜索模块&#xff0c;文件内容就会全部消失了。 然后检查是不是文件流的问题&#xff0c;最后定位到是因为利用BufferedWriter中的FileWriter默认是文件覆盖操作&#xff0c;因此在初始化FileWriter的时候会先将文…