MyBatis系列八 MyBatis-Spring(下)
三、实例
由于MyBatis-Spring的广泛应用,所以本书给出实例,希望给大家一个参考。这里我们 采用目前使用最为广泛的Spring MVC框架,使用Eclipse+Tomcat8+MySQL作为开发环境。
1、环境准备
首先,启动MySQL数据库,新建数据库表,如代码清单8.23所示。
代码清单8-23:新建数据库表
CREATE TABLE t_role ( id int(11) NOT NULL AUTO_INCREMENT, role_name varchar(60) NOT NULL, create_date datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, note varchar(512) DEFAULT NULL, PRIMARY KEY (id) ); CREATE TABLE t_user ( id int (11) NOT NULL AUTO_INCREMENT, user_name varchar(60) NOT NULL, birthday date NOT NULL, sex varchar(2) NOT NULL, mobile varchar(20) NOT NULL, email varchar(60) DEFAULT NULL, note varchar(512) DEFAULT NULL, PRIMARY KEY (id)
);
然后,我们配置Tomcat的数据源,在Eclipse里面配置好了 Tomcat后,我们可以看到 Eclipse的Servers文件目录下的配置文件,如图8.4所示。
其中,context.xml的作用主要是配置JNDI数据源。现在我们配置一下数据源,如代 码清单8.24所示。
这样我们便注册了一个数据库的JNDI到Tomcat中。在Tomcat启动的时候会去连接这 个数据源,建立对应的数据库连接池,只是在启动前我们要保证将数据库连接的jar包放入 到Tomcat的lib目录下,它放在Tomcat对应服务器文件夹的对应路径 (tomcat_home}/lib 下。如果在Eclipse下修改它,你无需自己复制,因为Eclipse会自动放在部署的对应目录下。
2、文件目录
本次所有Spring MVC文件的目录,如图8-5所示。
文件比较多,我们用一个表格来详细介绍它们,如表8.7所示。
表8・7 Spring Web文件
文件/包名 |
功 能 |
备 注 |
com.leam.chapter8.controller |
Spring MVC的控制器包 |
■ |
com.leam. chapter8.dao |
MyBatis的映射器包,里面还包括 映射XML |
在MVC框架中常常用于 DAO层 |
com.Ieam.chapter8.pojo |
模型层的POJO包 |
|
文件/包名 |
功 能 |
备 注 |
com.leam.chapter8.service |
定义Service层的接口 |
■ |
com.leam.chapter8.service.impl |
Service层接口的实现类 |
它将实现业务 |
log4j.properties |
配置log4j的文件 |
可以从第2章看到它 |
sqlMapConfig.xml |
MyBatis的配置文件 |
— |
applicationContext.xml |
Spring的主配置文件 |
・. |
dispatcher-servlet.xml |
Spring MVC的配置文件 |
■ 1 |
web.xml |
Web工程的配置文件 |
1・ |
3、Spring配置文件
我们先看看applicationContext.xml文件,如代码清单8-25所示。
上面注释的描述比较详细,笔者就不再一一介绍了。我们再来看看Spring MVC的配置文件,如代码清单8-26所示它的配置主要服务于Spring MVC 流程。
同样在XML注解中也有比较详细地描述,我们定义了 Spring MVC的视图拦截器,然 后利用JSON转换器将其转换。最后我们看看web.xml文件,如代码清单8.27所示。
这里主要配置了 Spring的DispatcherServlet,让它拦截所有以.do结尾的请求。
4、MyBatis框架相关配置
我们配置一下MyBatis的文件。首先是sqlMapConfig.xml基础配置文件,如代码清单 8-28所示。
其次就是两个简单的POJO配置,一个是RoleBean.java,如代码清单8.29所示;一个 是UserBean.java,如代码清单8-30所示。
再次让我们分别提供这两个POJO配置的映射器,如代码清单8.31、8.32所示。
这样我们就有了两个接口。最后我们需要提供二者的映射规则——XML映射文件,如 代码清单8-33、8-34所示。
这样就配置好了映射文件。
5、配置服务层
我们首先在配置文件里面配置了注解事务,然后扫描标注Service的JavaBean到Spring 上下文中,方便以后使用。我们先给出Service接口,如代码清单8.35、8・36所示。
然后就是实现类,如代码清单8.37、8.38所示。
注意,在查询方法中,我们加入了下面这行代码。
@Transactional(isolation=Isolation.READ_COMMITTED,propagation=Propagatio n. SUPPORTS)
这便是Spring控制事务的注解,在运行它的时候,釆用隔离性为读写提交的层级,传 播行为为如果有事务就支持,如果没有就不开启。
在更新数据操作里,我们加入了下面这行代码。
@Transactional(isolation=Isolation.READ_COMMITTED,propagation=Propagatio n.REQUIRED)
当没有事务的时候就开启事务,在运行它的时候,釆用隔离性为读写提交的层级,传 播行为为如果当前已经开启了事务,就加入当前事务。
6、编写控制器
Spring MVC中是通过DispatcherServlet进行分发请求的,在自动扫描的环境中Spring 会将注解了©Controller的类注册为控制器,而将控制器中注解为@RequestMapping中的 value值作为分发路径,以确定请求哪个方法。下面让我们看看控制器,如代码清单8-39 所示。
代码清单 8-39: RoleController.java
package com.learn.chapters.controller; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping;
import org•springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import com.learn.chapters.pojo.RoleBean;
import com.learn.chapters.service•RoleService; @Controller public class RoleController ( @Autowired private RoleService roleService = null; @RequestMapping(n/role/getRole") @ResponseBody public RoleBean getRole(@RequestParam(nidn) int id) ( long start = System.currentTimeMillis(); RoleBean role = this•roleService.getRole(id); long end = System.currentTimeMillis(); System.err.printIn(end - start); return role; }
我们获取了一个角色id,通过RoleService找到角色,最后将其返回。由于方法标注了 @ResponseBody,所以返回的角色会被Spring MVC配置的JSON视图拦截器拦截,并将其 转化为JSON。
7、测试
四、总结
本章主要讲解了 MyBatis和Spring框架的结合。
从Spring的简易基础开始,主要论述了 Spring提供的IOC容器和AOP编程。我们用 动态代理分析了 AOP运行的原理和过程,在此基础上论述了 AOP是如何管理数据库事务 的。数据库事务是本章的重点。在实际编程中数据库事务和传播行为是常常遇到的情况了, 作为一个开发人员务必要掌握它们。然后,我们讨论了 Spring MVC的基本框架,这是目 前互联网最常用的框架之一,具有很高的使用价值。基于Spring的这些基础,我们讨论了 MyBatis-Spring的内容,让大家看到了如何在Spring环境中完成MyBatis的基础配置、映 射器、SqlSessionTemplate。最后,带领大家做了一个可以运行的MyBatis-Spring实例。