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 运行测试效果图-修改学生