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进行了配置。