SSM框架开发web项目系列(五) Spring集成MyBatis

  前言

  在前面的MyBatis部分内容中,我们已经可以独立的基于MyBatis构建一个数据库访问层应用,但是在实际的项目开发中,我们的程序不会这么简单,层次也更加复杂,除了这里说到的持久层,还有业务逻辑层、视图层等等,随着代码量和需求复杂度逐渐增长,对象的创建、管理以及层与层之间的耦合度等等问题随之而来。Spring是目前比较流行的框架,它解决了诸多例如层次之间松耦合、帮助管理对象等问题。如果是有准备学习MyBatis的人,应该或多或少都学习过或者了解过Spring了,本篇要通过Spring集成MyBatis,首先要对Spring核心的概念IOC和AOP有个基本认识。

  首先回顾下IOC,控制反转(Inversion of Control,英文缩写为IOC),前面讲到的层与层之间的耦合问题在Spring中,即通过控制反转解决的,那么控制具体是控制什么,反转是怎样反转?我们在学习初期,创建对象用到最多的往往就是new语句,如果需要一个Person类的实例对象,我们就可以通过 Person p = new Person(); 获取我们想要的,进一步引申,在我们的开发中,如果业务逻辑Service层需要一个持久层Dao的实例,那么我们也可以在这个Service中直接new一个Dao实例,这样就相当于是我们自己在控制这个对象的创建和管理等等,但实际上项目中引入Spring后,我们无需自己去创建对象,而是交由Spring创建和管理,控制反转具体来看,应该是控制对象的创建、管理等等,这些职责的反转,原来是我们的职责,现在反转到了Spring容器那边管理。另外说道IOC,往往还伴随着一个DI(Dependency Injection)依赖注入的概念,前面为什么要在一个层的类中创建(获取)另一个类对象,是因为类与类之间的依赖,如果由我们主动在类中创建对象,会使得项目高耦合,灵活度大大降低。而通过依赖注入可以让我们轻松获取由容器创建和管理的对象,而不需要在程序中硬编码创建对象,从而达到解耦程序。依赖注入,基于Java反射,是控制反转的一种具体实现方式。

  AOP(Aspect Oriented Programming)面向切面编程,使用到Java中代理模式,是对面向对象编程的一种补充,而不是竞争或冲突,例如我们看待一段web项目访问过程,首先访问模块A,随之系统会记录访问日志,然后访问模块B,系统也会随之记录访问日志,以面向对象的思维来看,从前到后,这是两段完整的过程,每段过程中又包括我们的访问和系统的日志记录两种操作。但是换到这里的切面思维,我们每访问一个模块,系统都会随之有记录访问日志,把这个记录日志的动作以切面抽取并封装起来,可以减少系统的重复代码,降低模块之间的耦合度,提高系统的可操作性和可维护性。常见应用有例如事务管理、日志管理、安全控制等等。

  Spring集成MyBatis

  既然Spring容器能帮助我们创建和管理对象,那么在这里,不同于前面的独立MyBatis程序,我们可以把那些获取对象的过程按照Spring的方式做些修改。首先来回顾下前面我们做MyBatis单独测试的方法代码,示例如下:

@Test
public void testCore() throws IOException {
//直接实例SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//MyBatis配置文件路径
String path = "mybatis-config.xml";
//通过路径获取输入流
Reader reader = Resources.getResourceAsReader(path);
//通过reader构建sessionFactory
SqlSessionFactory sessionFactory = builder.build(reader);
//获取SqlSession对象
SqlSession sqlSession = sessionFactory.openSession();
//获取Mapper实例
DeptMapper mapper = sqlSession.getMapper(DeptMapper.class); Dept dept = mapper.selectById(10001);
Company company = dept.getCompany(); //所属公司
List<Emp> empList = dept.getEmpList(); //员工集合
System.out.println(dept);
}

  这里的SqlSessionFactory、SqlSession、Mapper实例等对象都是由我们手动去自己创建,下面正文开始通过Spring集成方式,我们可以免除这些创建对象的代码。

  数据库环境MySql,工具Navicat for MySQL,创建一张Person表如下所示,并填入几条测试数据

aaarticlea/png;base64,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" alt="" />

  新建Maven项目,可以是普通Jar项目,简单选quickstart那个,工程结构如下所示:

aaarticlea/png;base64,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" alt="" />

POM依赖可参考SSM框架开发web项目系列(一) 环境搭建篇

  实体类Person

package com.mmm.pojo;

public class Person {
private Integer id; //主键
private String name; //姓名
private String gender; //性别
private Integer age; //年龄
private String ifIT; //是否从事IT行业 public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getIfIT() {
return ifIT;
}
public void setIfIT(String ifIT) {
this.ifIT = ifIT;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", gender=" + gender
+ ", age=" + age + ", ifIT=" + ifIT + "]";
} }

  mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 这里可以定义类的别名,在mapper.xml文件中应用会方便很多 -->
<typeAliases>
<typeAlias alias="psn" type="com.mmm.pojo.Person" />
</typeAliases>
<!-- 这里的环境配置中事务管理器和数据源分别在Spring配置文件中去配置,所以原本这里的部分就可以不写了 -->
<!-- <environments default="envir">
<environment id="envir">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://192.168.0.100:3306/ssm?characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="abc123"/>
</dataSource>
</environment>
</environments> -->
<!-- 通过在Spring集成MyBatis配置文件中SqlSessionFactoryBean中的mapperLocations属性配置实现sql映射xml文件的扫描,所以下面的mappers在这里也可以不写了-->
<!-- <mappers>
<mapper resource="com/mmm/mapper/personMapper.xml"/>
</mappers> -->
</configuration>

  application-root.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"> <!-- 引入jdbc参数配置 -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- Spring会自动扫描base-package指定包下面添加了@Component @Service等注解的类并将其实例化 -->
<context:component-scan base-package="com.mmm" /> <!-- 配置数据源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean> <!-- spring和MyBatis整合 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 自动扫描mapping.xml文件 -->
<property name="mapperLocations" value="classpath:com/mmm/mapper/*.xml"></property>
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
</bean> <!-- DAO接口所在包名,Spring会自动查找其下的类 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.mmm.mapper" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean> <!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/> <!-- <bean id="personMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.mmm.mapper.PersonMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean> -->
</beans>

  jdbc.properties

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/ssm
jdbc.username=root
jdbc.password=123456

  PersonMapper.java

package com.mmm.mapper;

import java.util.List;

import com.mmm.pojo.Person;

public interface PersonMapper {

    //查找所有Person对象
List<Person> selectAll(); }

  personMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.mmm.mapper.PersonMapper">
<resultMap type="psn" id="personResultMap">
<id column="ID" property="id" />
<result column="NAME" property="name" />
<result column="GENDER" property="gender" />
<result column="AGE" property="age" />
<result column="IF_IT" property="ifIT" />
</resultMap> <select id="selectAll" resultMap="personResultMap">
select * from person
</select> </mapper>

  最后我们的测试方法就不用像之前那样创建一连串的对象,可以通过如下方式:

package com.mmm.test;

import java.util.List;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.mmm.mapper.PersonMapper;
import com.mmm.pojo.Person; public class TestSpringMbs { @SuppressWarnings("resource")
@Test
public void test() {
ApplicationContext context = new ClassPathXmlApplicationContext("application-root.xml");
PersonMapper personMapper = (PersonMapper) context.getBean("personMapper");
List<Person> list = personMapper.selectAll();
for(Person p:list) {
System.out.println(p);
} } }

  最后运行一下测试方法,可以看到如下结果,获取到数据库Person表全部记录,即成功运行

aaarticlea/png;base64,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" alt="" />

  小结

  这里通过Spring集成MyBatis的一个很基础的示例,我们能对Spring集成ORM框架的大致过程有个基本认识,不仅仅是MyBatis,类似Hibernate、JPA那块在Spring集成过程中核心步骤大致也包涵了本文中的部分。框架会变,但是有些系统的硬性需求不会变,就好比这里的持久层,你要访问数据库,无论你用MyBatis,还是Hibernate,甚至是原生的JDBC,数据库的访问账号密码,只不过一步步封装到了框架中的数据源;我们的更新提交回退等等,在框架中演化成事务管理。理清这些硬性需求并跟随者去学习,往往能更顺畅的记住和理解。而不是说你学了半天MyBatis,觉得数据库操作什么都没问题了,然后突然换个Hibernate,感觉一片迷茫,认清这些核心的概念,往往能帮助我们快速的举一反三学习新知识。

上一篇:吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring目录结构和基础JAR包介绍


下一篇:《Essential C++》读书笔记 之 基于对象编程风格