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进行了配置。
MyBatis3.x和Spring3.x的整合相关推荐
- 使用Maven搭建Struts2+Spring3+Hibernate4的整合开发环境
做了三年多的JavaEE开发了,在平时的JavaEE开发中,为了能够用最快的速度开发项目,一般都会选择使用Struts2,SpringMVC,Spring,Hibernate,MyBatis这些开源框 ...
- MyBatis3.1.1+Spring3.1.2+Struts2.3.4.1
地址:http://takeme.iteye.com/blog/1736320 MyBatis3.1.1+Spring3.1.2+Struts2.3.4.1 先来看目录结构 来看配置文件 appl ...
- SpringMVC+Spring3.2+Hibernate4整合实例
近日抽时间学习了一下SpringMVC,总体感觉还不错,相对于Struts2来说,感觉SpringMVC更加的灵活,由于现在很多公司都在用SpringMVC,所以也学习一下,希望接下来的项目可以使用, ...
- 开发基础框架:mybatis-3.2.8 +hibernate4.0+spring3.0+struts2.3
一:项目下载地址(点击 Source code(zip)) https://github.com/fzxblgong/frame_2014-12-15/releases 版本:v1.2 大小:20M ...
- struts2+ibatis+spring框架整合(二)
MyBatis3.1.1+Spring3.1.2+Struts2.3.4.1框架整合 先来看目录结构 来看配置文件 applicationContext.xml <?xml version=&q ...
- spring mybatis 整合jar 包冲突问题
使用mybatis3.1.1+spring3.2.0+spring-mybatis+1.3.0(或者1.1.1)在 使用<bean class="org.mybatis.spring. ...
- spring整合大全
使用Maven搭建Struts2+Spring3+Hibernate4的整合开发环境做了三年多的JavaEE开发了,在平时的JavaEE开发中,为了能够用最快的速度开发项目,一般都会选择使用Strut ...
- 基于ssm整合的网上书城
基于ssm整合的网上书城 采用当前最流行的框架Spring-SpringMVC-MyBatis设计,分为前后台,前台用户可以购买书籍,后台管理员可以对书籍进行分类,增删改查 注意:本系统不支持jdk1 ...
- CXF3.0.2+Spring3.2.14 Web Service入门实例二
离上次学习CXF的时间比较长了,最近一直在忙别的项目,没有时间再继续学习CXF,也就没有再写博客了!今天有点时间,再写一篇,把CXF3.0.7与spring3.2.14整合写出来.本来应该写apach ...
最新文章
- 网站的最大并发连接数
- 使用VMware VSphere WebService SDK进行开发 (二)——获取虚拟机cpu的使用情况
- 【C语言】一元二次方程(求实根和虚根)
- Luogu P1407 [国家集训队]稳定婚姻 (二分图写法)
- 威斯康星大学计算机案例,美国威斯康星大学麦迪逊分校CS硕士录取
- 国三计算机考试难度大吗,报考计算机技术在职研考试科目多吗考试难度大吗需要有计算机国三基础吗...
- Atitit 提升效率 界面gui方面的前后端分离与cbb体系建设 规范推荐标准
- 奥本大学计算机专业GRE成绩,美国大学GRE分数要求汇总贴,你的目标学校要求多少分?...
- 干货!图像集分类大杀器--混合黎曼度量学习
- WiFi穿墙完全指南
- 动态规划——背包问题九解(01背包)
- 织梦data搬家后后台打开空白的解决方法
- Windows下bat脚本(cmd命令学习)
- 计算机对逻辑算符的运算次序,逻辑运算符的优先顺序
- 三国演义中最具个性的名言
- 【Eelectron-vue】构建桌面应用(20)-electron的退出quit和exit
- 计算机都学什么数学,数学在计算机起到什么作用
- Windows 10 Excel批量导入打印条形码标签免费工具介绍
- 灰色关联分析——供应商选择
- [统计学教程] 第七章 假设检验
热门文章
- java post请求返回500错误信息_Retrofit API Post call 返回错误 500,适用于 Postman
- 检测到磁盘可能为uefi引导_在本地硬盘安装WinPE系统,实现UEFI引导,摆脱U盘
- mysql存储过程中as_mysql - 存储过程mySQL语法错误意外“ AS” - 堆栈内存溢出
- uploadify插件html5,免费的HTML5版uploadify送上
- java resources 目录_[Java] 在 jar 文件中读取 resources 目录下的文件
- 傲梦python笔试题_python笔试题
- python基本概念_python基本概念-关键要素
- python读取大文件性能_强悍的Python读取大文件的解决方案
- python的open函数百度百科,open函数
- 301.inc.php,DeDeCMS默认首页及WWW域的301跳转