5.1 
Spring整合MyBatis开发
Spring整合MyBatis可以实现让数据库连接、事务管理、实例化对象的创建与依赖
关系等都统一由Spring负责,以及数据库的增、删、改、查操作由spring-mybatis整合包
提供的SQLSesionTemplate对象来操作,或者利用整合包扫描接口,依据Mapper映射
文件直接创建代理实现类,无须程序员手工实现接口,大大简化了开发流程。SpringMVC本来就是Spring框架的一部分,这两者无须再做整合,因此,SSM整合的关键是
Spring对MyBatis的整合,三大框架整合完成后,将以Spring为核心,调用有关资源,高
效运作。

5.1 
Spig整合MyBts开发环境
1.rnai

除了需要Spring的jar包和MyBatis的jar包,还需要Spring与MyBatis整合的中
间件mybai-pig1.1.a此外还需要数据库驱动jr包mySQLcnetrJv-1. 

37.ar。
tssrn-3.jr, a-onco-aa5.
j

5.2 
DAO 
接口实现类开发整合
1.
项目案例:Spring+MyBatis实现Prom数据库的增、删、改、查
。
实现步骤如下
。
(1)新建项目,导入Spring整合MyBatis开发所需的jar包,如图5-1所示。
(2)创建实体类Prom 。
(3)创建DAO接口IPromDao。
(4)创建DAO接口的实现类PromDaoImpl。
(5)创建业务层接口IPromService。
(6)创建业务层接口的实现类PromServiceImpl。
(7)创建SQL映射文件PromMapprxml。
e.
aiai-ofg.l。

(8)创建MyBts配置文件mybtscnixm
(9)创建Sprig配置文件appiainotx.l。
(10)测试类。
nlctoCnetxm

SSM 开58 发技术
图5-1 Spring整合MyBatis开发所需的jar包
5.1.3 DAO 接口无实现类开发整合
由于MyBatis可以通过代理实现接口,无需DAO 的实现类,但如果没有DAO 的实
现类,业务层Service类中的DAO 属性该如何注入? 通过下面这个案例可以得到答案。
项目案例:改造上述项目,去掉DAO 的实现类,但能实现同样的功能。
复制项目springmybatis1为springmybatis2,删除PromDaoImpl类。
修改Spring 配置文件,删除SQLSessionTemplate的配置,修改DAO 层的配置
如下。 
<bean id="PromDao" class="org.mybatis.spring.mapper.MapperFactoryBean"> 
<property name="mapperInterface" value="com.fqy.dao.IPromDao"/> 
<property name="SQLSessionFactory" ref="SQLSessionFactory"/> 
</bean> 
这里其实使用了MapperFactoryBean类来代理实现接口,假定项目还有其他DAO 
层,则依照这个模板再添加一条bean。但如果一个项目有太多的DAO 层,则需要添加太
多的bean,可以进行简化,配置批量扫描包,将包下的所有接口自动创建代理实现类,只
需下面一条配置就可以,无须再一一创建DAO 层的bean。 
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 
<property name="SQLSessionFactory" ref="SQLSessionFactory"/>

第5章 SSM 三大框架整合 59 
<property name="basePackage" value="com.fqy.dao"/> 
</bean> 
MapperScannerConfigurer将扫描basePackage属性指定的包下的所有接口类,如果
这些接口都有对应的映射文件,则会将它们动态地定义一个bean,这样就无须一个个定
义bean了。
但问题在于Service层,之前有手工创建DAO 层的bean,Service层再一个个进行手
工注入这些DAO 层的bean,类似下面的配置。 
<!-- 配置DAO 层,注入SQLSessionTemplate 属性值--> 
<bean id="PromDao" class="com.fqy.dao.PromDaoImpl"> 
<property name="SQLSessionTemplate" ref="SQLSessionTemplate"/> 
</bean> 
<!-- 配置Service 层,注入PromDao 属性值--> 
<bean id="PromService" class="com.fqy.service.PromServiceImpl"> 
<property name="PromDao" ref="PromDao"/> 
</bean> 
之前这种配置,Service层注入PromDao属性值,关系很清晰,每一个业务bean都能
配置具体名称的DAO 层的bean。但现在PromDao这个bean配置已经没有了(bean由
代理动态的自动生成),这样运行的话,程序会报错: 
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: 
No bean named 'PromDao' available… 
提示业务层找不到PromDao这个bean。解决方案是让业务层按类型自动配置就行
了,业务层的配置代码修改如下: 
<!-- 配置Service 层,注入PromDao 属性值--> 
<bean id ="PromService" class ="com.fqy.service.PromServiceImpl" autowire = 
"byType"/> 
当然,在Service层用注解@Autowired也可以,但要在Spring配置文件中开启扫
描,具体如下: 
<context:component-scan base-package="com.fqy.service"/> 
其他不变,测试结果同前。本案例的最大特点就是没有DAO 的实现类,但一样可以
实现程序的所有功能。
5.2 SSM 整合案例
项目案例:SSM 整合Web项目,实现学生信息的基本管理。实现步骤如下。
新建项目ssmfqy,在5.1节整合所需jar包的基础上,再把SpringMVC有关jar包导
入项目即可,总的jar包如图5-2所示。

6
0 
SSM开发技术

(1)配置wb.l文件, rn
exm指定Spig配置文件的位置。

(2)注册ServletContext监听器。
(3)注册字符集过滤器,解决请求参数的中文乱码问题。
(4)配置
rspring-mvcrin
核心控制器。
pplicationContext.xmataSourc
(5)在sc下创建Spg配置文件al。注册数据源De,注
册事务,注册MyBatis配置文件,这样配置无须创建DAO层接口的实现类,项目会自动生成
DAO层接口的代理实现类。
(6)配置注解扫描Service,以注解的形式创建bean。
(7)在sraiai-ofg.l。
c下创建MyBts配置文件mybtscnixm

(8)在src下创建Sprng配置文件SpigMVC.l。
(9)创建数据库表。
irnxm
(10)新建包com.qy.niy,创建实体类Prom 。
fett

(11)创建包cfqy.a创建接口IPomDo。
om.do, ra

(12)在包cfqy.ararer.l。
om.do下创建接口IPomDo对应的映射文件PomMappxm

(13)创建包com.qy.evc创建接口IPomSrie。
fsrie, revc

(14)创建接口IPromService的实现类PromServiceImpl,添加注解。
(15)创建包com.qy.otor,创建控制器类。
fcnrle
在目录WebContent/WEB-INF下新建文件夹jsp,创建以下jsp页面
。
运行测试效果如图5-3~图5-5所示
。



图5-
2 
SpringMVC有关jar包图5-
3 
运行测试效果图-学生列表


第5章SSM 三大框架整合61 


图5-
4 
运行测试效果图-添加学生


图5-
5 
运行测试效果图-修改学生