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保留了对复杂场景的完全控制能力。
相关推荐
qq_124987075311 小时前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计
Coder_Boy_11 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
2301_8187320612 小时前
前端调用控制层接口,进不去,报错415,类型不匹配
java·spring boot·spring·tomcat·intellij-idea
码字的字节12 小时前
Spring Cloud服务注册与发现(一):手把手搭建Eureka Server,详解高可用配置
spring·spring cloud·eureka
大厂资深架构师12 小时前
Spring Cloud Eureka在后端系统中的服务剔除策略
spring·spring cloud·ai·eureka
汤姆yu15 小时前
基于springboot的尿毒症健康管理系统
java·spring boot·后端
暮色妖娆丶15 小时前
Spring 源码分析 单例 Bean 的创建过程
spring boot·后端·spring
biyezuopinvip16 小时前
基于Spring Boot的企业网盘的设计与实现(任务书)
java·spring boot·后端·vue·ssm·任务书·企业网盘的设计与实现
JavaGuide17 小时前
一款悄然崛起的国产规则引擎,让业务编排效率提升 10 倍!
java·spring boot