Spring学习总结(五)——Spring整合MyBatis(Maven+MySQL)
在现代Java企业级开发中,Spring框架和MyBatis框架都是非常常用的技术。Spring提供了强大的依赖注入、面向切面编程等功能,而MyBatis则是优秀的持久层框架,能方便地进行数据库操作。将它们整合在一起,可以充分发挥两者的优势,提升开发效率和代码质量。本文将详细介绍如何使用Maven构建项目,并整合Spring与MyBatis操作MySQL数据库。
二、目录#
- 项目环境搭建
- 引入依赖
- 配置MyBatis
- 配置Spring
- 整合Spring与MyBatis
- 编写DAO接口与Mapper文件
- 测试整合效果
三、项目环境搭建#
3.1 创建Maven项目#
使用IDE(如IntelliJ IDEA)创建一个Maven项目,选择合适的项目模板(如Maven - Quickstart)。
3.2 目录结构规划#
src/main/java:存放Java源代码,包括Spring配置类、MyBatis的Mapper接口等。src/main/resources:存放配置文件,如MyBatis的mybatis - config.xml、Spring的applicationContext.xml等。src/test/java:存放测试代码。
四、引入依赖#
在pom.xml文件中添加以下依赖:
4.1 Spring相关依赖#
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring - context</artifactId>
<version>5.3.23</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring - jdbc</artifactId>
<version>5.3.23</version>
</dependency>4.2 MyBatis相关依赖#
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis - spring</artifactId>
<version>2.0.7</version>
</dependency>4.3 MySQL驱动依赖#
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql - connector - java</artifactId>
<version>8.0.29</version>
</dependency>4.4 其他依赖(如测试依赖)#
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>五、配置MyBatis#
5.1 创建mybatis - config.xml#
在src/main/resources目录下创建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>
<typeAliases>
<!-- 可以在这里定义类型别名,方便在Mapper文件中使用 -->
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC"/>
<property name="username" value="your_username"/>
<property name="password" value="your_password"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 可以扫描Mapper文件所在目录,自动加载Mapper -->
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>最佳实践:尽量使用类型别名简化Mapper文件中的类型引用;合理配置数据源连接参数,确保数据库连接的稳定性。
六、配置Spring#
6.1 创建applicationContext.xml#
在src/main/resources目录下创建applicationContext.xml文件。
6.2 配置数据源(使用Spring的DriverManagerDataSource示例)#
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC"/>
<property name="username" value="your_username"/>
<property name="password" value="your_password"/>
</bean>常见实践:也可以使用连接池(如HikariCP)来提高数据库连接的性能和管理效率。
6.3 配置MyBatis的SqlSessionFactory#
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis - config.xml"/>
</bean>6.4 配置MyBatis的MapperScannerConfigurer(自动扫描Mapper接口)#
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example.dao"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>最佳实践:合理设置basePackage,确保能准确扫描到所有的Mapper接口。
七、整合Spring与MyBatis#
7.1 原理#
通过SqlSessionFactoryBean将Spring的数据源与MyBatis的SqlSessionFactory关联起来,再利用MapperScannerConfigurer自动将Mapper接口注册为Spring的Bean,实现Spring对MyBatis的管理和整合。
八、编写DAO接口与Mapper文件#
8.1 编写DAO接口(以UserDao为例)#
package com.example.dao;
import com.example.entity.User;
import java.util.List;
public interface UserDao {
List<User> selectAllUsers();
User selectUserById(int id);
void insertUser(User user);
void updateUser(User user);
void deleteUser(int id);
}8.2 编写Mapper文件(以UserMapper.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.example.dao.UserDao">
<select id="selectAllUsers" resultType="com.example.entity.User">
SELECT * FROM user
</select>
<select id="selectUserById" resultType="com.example.entity.User">
SELECT * FROM user WHERE id = #{id}
</select>
<insert id="insertUser" parameterType="com.example.entity.User">
INSERT INTO user (username, password) VALUES (#{username}, #{password})
</insert>
<update id="updateUser" parameterType="com.example.entity.User">
UPDATE user SET username = #{username}, password = #{password} WHERE id = #{id}
</update>
<delete id="deleteUser">
DELETE FROM user WHERE id = #{id}
</delete>
</mapper>常见实践:注意SQL语句的书写规范和参数映射,确保数据操作的准确性。
九、测试整合效果#
9.1 编写测试类(使用JUnit示例)#
package com.example.test;
import com.example.dao.UserDao;
import com.example.entity.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;
public class UserDaoTest {
@Test
public void testSelectAllUsers() {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = context.getBean(UserDao.class);
List<User> users = userDao.selectAllUsers();
for (User user : users) {
System.out.println(user);
}
}
}9.2 运行测试#
执行测试方法,观察控制台输出,检查是否能正确从数据库获取数据,验证Spring与MyBatis整合是否成功。
十、参考#
- [Spring官方文档](https://spring.io/projects/spring - framework)
- [MyBatis官方文档](https://mybatis.org/mybatis - 3/zh/index.html)
- Maven官方文档
通过以上步骤,我们完成了Spring与MyBatis基于Maven和MySQL的整合,实现了高效的数据库操作与Spring的依赖管理。在实际项目中,可以根据具体需求进一步优化配置和代码逻辑。