Spring和Spring Boot集成MyBatis的完整对比示例,包含从项目创建到测试的全流程代码

以下是Spring和Spring Boot集成MyBatis的完整对比示例,包含从项目创建到测试的全流程代码:


一、Spring集成MyBatis示例

1. 项目结构
复制代码
spring-mybatis-demo/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com.example/
│   │   │       ├── config/
│   │   │       ├── mapper/
│   │   │       ├── service/
│   │   │       └── web/
│   │   └── resources/
│   │       ├── mybatis-config.xml
│   │       ├── applicationContext.xml
│   │       └── mapper/
│   │           └── UserMapper.xml
│   └── test/
│       └── java/
│           └── com.example/
│               └── UserTest.java
├── pom.xml
└── schema.sql
2. Maven依赖(pom.xml)
xml 复制代码
<!-- Spring核心 -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.3.20</version>
</dependency>
<!-- MyBatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.10</version>
</dependency>
<!-- MyBatis-Spring整合 -->
<dependency>
    <groupId>org.mybatis.spring</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.6</version>
</dependency>
<!-- 数据库驱动 -->
<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <version>8.0.30</version>
</dependency>
<!-- 测试 -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13.2</version>
    <scope>test</scope>
</dependency>
3. 数据库表(schema.sql)
sql 复制代码
CREATE TABLE user (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(255) NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL
);
4. MyBatis全局配置(mybatis-config.xml)
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>
    <settings>
        <setting name="cacheEnabled" value="true"/>
    </settings>
</configuration>
5. Spring配置(applicationContext.xml)
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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
                           http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- 数据源 -->
    <bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource">
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
    </bean>

    <!-- MyBatis工厂 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
    </bean>

    <!-- 扫描Mapper接口 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.example.mapper"/>
    </bean>

</beans>
6. Mapper接口(UserMapper.java)
java 复制代码
package com.example.mapper;

import com.example.entity.User;

public interface UserMapper {
    User selectById(Long id); // 对应XML中的SQL
}
7. Mapper XML(UserMapper.xml)
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.mapper.UserMapper">
    <select id="selectById" resultType="com.example.entity.User">
        SELECT * FROM user WHERE id = #{id}
    </select>
</mapper>
8. Service层(UserService.java)
java 复制代码
package com.example.service;

import org.springframework.beans.factory.annotation.Autowired;
import com.example.mapper.UserMapper;
import com.example.entity.User;

public class UserService {
    @Autowired
    private UserMapper userMapper;

    public User getUser(Long id) {
        return userMapper.selectById(id);
    }
}
9. 测试类(UserTest.java)
java 复制代码
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserTest {
    @Test
    public void testGetUser() {
        ApplicationContext context = 
            new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService userService = context.getBean(UserService.class);
        User user = userService.getUser(1L);
        System.out.println(user.getName());
    }
}

二、Spring Boot集成MyBatis示例

1. 项目结构
复制代码
springboot-mybatis-demo/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com.example/
│   │   │       ├── config/
│   │   │       ├── mapper/
│   │   │       ├── service/
│   │   │       └── Application.java
│   │   └── resources/
│   │       ├── application.properties
│   │       └── mapper/
│   │           └── UserMapper.xml
│   └── test/
│       └── java/
│           └── com.example/
│               └── UserTest.java
├── pom.xml
└── schema.sql
2. Maven依赖(pom.xml)
xml 复制代码
<dependencies>
    <!-- Spring Boot Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <!-- MyBatis Starter -->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.2.0</version>
    </dependency>
    <!-- 数据库驱动 -->
    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>mysql-connector-j</artifactId>
        <version>8.0.30</version>
    </dependency>
    <!-- 测试 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
3. 数据库表(schema.sql)
sql 复制代码
// 与Spring示例相同
4. 配置文件(application.properties)
properties 复制代码
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.example.entity
5. 启动类(Application.java)
java 复制代码
package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication // 自动扫描组件
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
6. Mapper接口(UserMapper.java)
java 复制代码
package com.example.mapper;

import org.apache.ibatis.annotations.Mapper; // 非必需,但显式标注
import com.example.entity.User;

@Mapper
public interface UserMapper {
    User selectById(Long id);
}
7. Mapper XML(UserMapper.xml)
xml 复制代码
// 与Spring示例相同
8. Service层(UserService.java)
java 复制代码
package com.example.service;

import org.springframework.beans.factory.annotation.Autowired;
import com.example.mapper.UserMapper;
import com.example.entity.User;

@Service // Spring Boot自动扫描组件
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public User getUser(Long id) {
        return userMapper.selectById(id);
    }
}
9. 测试类(UserTest.java)
java 复制代码
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class UserTest {
    @Autowired
    private UserService userService;

    @Test
    public void testGetUser() {
        User user = userService.getUser(1L);
        System.out.println(user.getName());
    }
}

三、核心差异对比表

特性 Spring集成 Spring Boot集成
依赖管理 需显式声明所有依赖(如MyBatis、Spring模块) 通过starter自动引入依赖,减少配置
配置方式 XML/Java Config手动配置Bean 属性文件(application.properties)+ 注解
数据源配置 手动定义dataSource Bean 通过spring.datasource前缀自动配置
Mapper扫描 MapperScannerConfigurer配置 通过@Mapper注解或mybatis.mapper-locations
启动方式 ClassPathXmlApplicationContext加载配置 单一入口类加@SpringBootApplication注解
测试框架 需JUnit4和Spring Test支持 Spring Boot Test简化测试配置
环境兼容性 兼容传统Spring应用服务器(如Tomcat) 内置嵌入式Tomcat,直接运行JAR
代码量 配置复杂,需定义多个Bean 配置简洁,依赖约定优于配置原则
扩展性 手动控制所有配置细节 通过@EnableAutoConfiguration禁用自动配置

四、关键差异总结

  1. 依赖简化 :Spring Boot通过starter自动管理依赖版本,避免冲突。
  2. 配置自动化 :Spring Boot的application.properties替代了大量XML配置,如数据源和Mapper扫描。
  3. 启动便捷性 :Spring Boot通过@SpringBootApplication简化了应用启动流程。
  4. 测试效率 :Spring Boot的测试框架(如@SpringBootTest)减少了测试代码的复杂性。
  5. 开发模式:Spring Boot遵循"约定优于配置",适合快速开发;Spring保留了对复杂场景的完全控制能力。
相关推荐
他҈姓҈林҈3 小时前
使用 Spring Boot 进行开发
spring boot
Java&Develop5 小时前
onloyoffice历史版本功能实现,版本恢复功能,编辑器功能实现 springboot+vue2
前端·spring boot·编辑器
yuren_xia5 小时前
IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤
spring·mvc·intellij-idea
颇有几分姿色6 小时前
Spring Boot 读取配置文件的几种方式
java·spring boot·后端
人生导师yxc6 小时前
Spring MVC
java·spring·mvc
@淡 定6 小时前
Spring Boot 的配置加载顺序
java·spring boot·后端
等什么君!8 小时前
springmvc-拦截器
后端·spring
MaCa .BaKa8 小时前
35-疫苗预约管理系统(微服务)
spring boot·redis·微服务·云原生·架构·springcloud
你熬夜了吗?8 小时前
spring中使用netty-socketio部署到服务器(SSL、nginx转发)
服务器·websocket·spring·netty·ssl
秋野酱8 小时前
基于 Spring Boot 的银行柜台管理系统设计与实现(源码+文档+部署讲解)
java·spring boot·后端