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的项目,现在的项目结构为:

MyBatis3.x和Spring3.x的整合_第1张图片

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。如下

MyBatis3.x和Spring3.x的整合_第2张图片

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

2.4.applicationContext.xml

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

MyBatis3.x和Spring3.x的整合_第3张图片

MyBatis3.x和Spring3.x的整合_第4张图片

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

3.整合开发原始dao接口

3.1配置SqlSessionFactory

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

MyBatis3.x和Spring3.x的整合_第5张图片

3.2开发原始dao

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

MyBatis3.x和Spring3.x的整合_第6张图片

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


测试:

MyBatis3.x和Spring3.x的整合_第7张图片

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


4.整合开发mapper代理方法

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

4.1使用MapperFactoryBean

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

MyBatis3.x和Spring3.x的整合_第8张图片

然后便可以进行测试:

MyBatis3.x和Spring3.x的整合_第9张图片


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

4.2使用MapperScannerConfigurer(扫描mapper)

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

MyBatis3.x和Spring3.x的整合_第10张图片

然后进行测试:

MyBatis3.x和Spring3.x的整合_第11张图片

同样正常运行。

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

5.出现异常总结

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

出现这个异常的原因你不用多想,绝对是因为你的spring 版本与开发工具的jdk版本不兼容!之前在单独开发spring框架中使用到注解扫描声明整个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进行了配置。




你可能感兴趣的:(Java)