第六章中已经学习了MyBatis框架和Spring框架,还讲到Spring框架是一个超级黏合平台,能够以高度的开放整合其他优秀的框架。(如果没有了解可以去我主页看看 第一至六章 的内容来学习)本章将带同学们学习使用Spring框架整合MyBatis框架的方法。
7.1基本整合方式
Spring框架整合其他框架的本质其实就是把其他框架交给Spring框架管理。Spring框架通过IOC、AOP等机制实现与其他框架的连接,最终建立一个低耦合的应用架构,这大大增强了系统的灵活性,便于功能扩展。在本章中,我们将利用Spring框架对MyBatis框架进行整合,在对组件实现解耦的同时,还能使MyBatis框架的使用变得更加方便和简单。
7.1.1 整合思路梳理
MyBatis框架主要是通过SqlSession实例实现对数据的操作,而SqlSession实例是通过SqlSessionFactory创建的,SqlSessionFactory实例又是由SqlSessionFactoryBuilder依据MyBatis配置文件中的数据源、SQL映射文件等信息构建的,这些对象之间的关系。
7.1.2 整合所需的依赖及配置
在Java项目中整合数据库事务管理通常涉及使用Spring框架的@Transactional注解以及配置数据源和事务管理器。这里,我将提供一个基本的示例,展示如何在Spring Boot项目中整合JPA(Java Persistence API)和Hibernate作为JPA的实现,并配置事务管理。
- 添加依赖
首先,你需要在你的pom.xml(如果你使用的是Maven)中添加Spring Boot的起步依赖以及JPA和数据库的依赖。以下是一个示例,它包含了Spring Boot的Web、JPA和H2数据库的依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<!-- 其他依赖 -->
</dependencies>
- 配置数据源和JPA
在Spring Boot中,你可以通过application.properties或application.yml文件来配置数据源和JPA。以下是一个application.properties的示例:
# 数据源配置
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
# JPA配置
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
这里配置了内存中的H2数据库,并设置了Hibernate的DDL生成策略为update(在启动时自动更新数据库结构),以及显示SQL语句。
- 实体类和仓库
你需要定义实体类和对应的JPA仓库。这里是一个简单的实体类示例:
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// 构造器、getter和setter省略
}
仓库接口:
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
// 你可以在这里定义查询方法,但JpaRepository已经提供了很多基本方法
}
- 服务层和事务管理
在服务层中,你可以使用@Transactional注解来声明事务的边界。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
@Transactional
public void addUser(User user) {
userRepository.save(user);
// 这里可以添加更多的数据库操作,它们都将在同一个事务中执行
}
}
- 控制器
最后,你可以创建一个控制器来触发服务层的方法。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/users")
public String addUser(@RequestBody User user) {
userService.addUser(user);
return "User added successfully";
}
}
这个简单的例子展示了如何在Spring Boot项目中整合JPA和事务管理。Spring Boot会自动配置数据源、JPA和事务管理器,你只需要关注你的业务逻辑即可。
7.1.3 使用Spring配置文件配置数据源
在Spring中,使用配置文件(如XML配置文件)来配置数据源是一种常见的做法,特别是在不使用Spring Boot的项目中。以下是一个简单的示例,展示了如何在Spring的XML配置文件中配置一个数据源(例如,使用HikariCP作为连接池),并配置JPA或Hibernate的SessionFactory(如果你使用的是Hibernate作为JPA实现)。
-
添加依赖
首先,确保你的项目中包含了数据库驱动、HikariCP连接池以及Hibernate(如果你使用Hibernate)的依赖。如果你使用Maven,可以在pom.xml中添加这些依赖。但请注意,下面的示例主要关注于Spring配置部分。 -
Spring XML配置文件
下面是一个Spring XML配置文件的示例,它配置了数据源和Hibernate的SessionFactory。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 数据源配置 -->
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"
init-method="init" destroy-method="close">
<property name="d