Spring学习总结(五)——Spring整合MyBatis(Maven+MySQL)

在现代Java企业级开发中,Spring框架和MyBatis框架都是非常常用的技术。Spring提供了强大的依赖注入、面向切面编程等功能,而MyBatis则是优秀的持久层框架,能方便地进行数据库操作。将它们整合在一起,可以充分发挥两者的优势,提升开发效率和代码质量。本文将详细介绍如何使用Maven构建项目,并整合Spring与MyBatis操作MySQL数据库。

二、目录#

  1. 项目环境搭建
  2. 引入依赖
  3. 配置MyBatis
  4. 配置Spring
  5. 整合Spring与MyBatis
  6. 编写DAO接口与Mapper文件
  7. 测试整合效果

三、项目环境搭建#

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&amp;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&amp;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与MyBatis基于Maven和MySQL的整合,实现了高效的数据库操作与Spring的依赖管理。在实际项目中,可以根据具体需求进一步优化配置和代码逻辑。