在开发Java项目时,常常会使用到Spring框架的特性来简化开发过程。Spring框架提供了许多功能强大的模块,其中整合Mybatis和提供声明式事务管理是非常常见的需求。
1. 搭建开发环境
首先,我们需要确保已经安装了以下工具和软件:
- JDK
- Maven
- MySQL
- IntelliJ IDEA(或其他Java开发IDE)
2. 创建Spring项目
使用IDEA创建一个新的Maven项目,并添加以下依赖:
<dependencies>
<!-- Spring 相关依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.5</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.5</version>
</dependency>
<!-- Mybatis 相关依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<!-- 数据库连接池依赖 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.7</version>
</dependency>
<!-- MySQL 驱动依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
</dependencies>
3. 配置数据库连接和Mybatis
在src/main/resources
目录下创建一个名为applicationContext.xml
的配置文件,并添加以下内容:
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatisdb?useSSL=false&serverTimezone=UTC&characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="password" />
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath*:mapper/*.xml" />
</bean>
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
4. 创建Mapper接口和对应的XML文件
创建一个Mapper接口,定义数据库操作的方法。例如,创建一个名为UserMapper
的接口:
public interface UserMapper {
User getUserById(Long id);
List<User> getAllUsers();
void addUser(User user);
void updateUser(User user);
void deleteUser(Long id);
}
然后,在src/main/resources/mapper
目录下创建一个UserMapper.xml
文件,并添加SQL语句,如下所示:
<?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.example.mapper.UserMapper">
<resultMap id="userResultMap" type="com.example.model.User">
<id property="id" column="id" />
<result property="name" column="name" />
<result property="email" column="email" />
</resultMap>
<select id="getUserById" resultMap="userResultMap">
SELECT * FROM user WHERE id = #{id}
</select>
<select id="getAllUsers" resultMap="userResultMap">
SELECT * FROM user
</select>
<insert id="addUser">
INSERT INTO user (name, email) VALUES (#{name}, #{email})
</insert>
<update id="updateUser">
UPDATE user SET name = #{name}, email = #{email} WHERE id = #{id}
</update>
<delete id="deleteUser">
DELETE FROM user WHERE id = #{id}
</delete>
</mapper>
5. 编写逻辑代码和声明式事务
创建一个名为UserService
的Service类,用于处理业务逻辑并调用Mapper接口。例如:
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User getUserById(Long id) {
return userMapper.getUserById(id);
}
public List<User> getAllUsers() {
return userMapper.getAllUsers();
}
@Transactional
public void addUser(User user) {
userMapper.addUser(user);
}
@Transactional
public void updateUser(User user) {
userMapper.updateUser(user);
}
@Transactional
public void deleteUser(Long id) {
userMapper.deleteUser(id);
}
}
在上面的代码中,我们使用了@Transactional
注解来提供声明式事务管理。通过在方法上添加该注解,Spring会自动为该方法启用事务,并在方法执行之前开启事务,在方法执行之后提交或回滚事务。
6. 编写测试代码
在src/test/java
目录下创建一个测试类,用于测试上述代码。
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserServiceTests {
@Autowired
private UserService userService;
@Test
public void testGetUserById() {
User user = userService.getUserById(1L);
assertNotNull(user);
assertEquals("John Doe", user.getName());
}
@Test
public void testGetAllUsers() {
List<User> userList = userService.getAllUsers();
assertNotNull(userList);
assertFalse(userList.isEmpty());
}
@Test
public void testAddUser() {
User user = new User();
user.setName("Jane Smith");
user.setEmail("jane@example.com");
userService.addUser(user);
assertNotNull(user.getId());
}
@Test
public void testUpdateUser() {
User user = userService.getUserById(2L);
assertNotNull(user);
user.setEmail("updated@example.com");
userService.updateUser(user);
User updatedUser = userService.getUserById(2L);
assertEquals("updated@example.com", updatedUser.getEmail());
}
@Test
public void testDeleteUser() {
Long id = 3L;
User user = userService.getUserById(id);
assertNotNull(user);
userService.deleteUser(id);
User deletedUser = userService.getUserById(id);
assertNull(deletedUser);
}
}
7. 运行测试
运行测试代码,并确保所有测试用例通过。
结语
通过上述步骤,我们成功地整合了Spring、Mybatis和声明式事务。通过使用Spring的依赖注入和声明式事务管理,我们可以更加方便地开发和管理数据库相关的操作,提高开发效率。同时,Mybatis提供了强大的SQL映射功能,让我们可以轻松地与数据库进行交互。希望本篇文章能对你在Spring整合Mybatis和声明式事务方面有所帮助。
本文来自极简博客,作者:星辰漫步,转载请注明原文链接:Spring整合Mybatis和声明式事务