当前位置: 首页 > news >正文

Spring Boot 与 MyBatis 数据库操作

一、核心原理

  1. Spring Boot 的自动配置

    • 通过 mybatis-spring-boot-starter 自动配置 DataSource(连接池)、SqlSessionFactory 和 SqlSessionTemplate

    • 扫描 @Mapper 接口或指定包路径,生成动态代理实现类。

  2. MyBatis 的核心组件

    • SqlSessionFactory:生产 SqlSession 的工厂,负责加载 MyBatis 配置和映射文件。

    • SqlSession:封装了 JDBC 操作,通过 Executor 执行 SQL。

    • Mapper 接口:通过动态代理将 Java 方法调用绑定到 XML 或注解中的 SQL。

二、Java 示例

1. 项目依赖 (pom.xml)

<dependencies>
    <!-- Spring Boot Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- MyBatis + Spring Boot 整合 -->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>3.0.3</version>
    </dependency>
    <!-- MySQL 驱动 -->
    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>mysql-connector-j</artifactId>
        <version>8.0.33</version>
    </dependency>
</dependencies>

2. 数据源配置 (application.properties)

# 数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# MyBatis 配置
mybatis.mapper-locations=classpath:mapper/*.xml  # XML 映射文件路径
mybatis.type-aliases-package=com.example.entity   # 实体类包别名

3. 实体类 (User.java)
package com.example.entity;

public class User {
    private Integer id;
    private String name;
    private String email;

    // Getters and Setters
}
4. Mapper 接口 (UserMapper.java)
package com.example.mapper;

import com.example.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

@Mapper  // 标记为 MyBatis Mapper 接口
public interface UserMapper {
    // 注解方式定义 SQL
    @Select("SELECT * FROM user WHERE id = #{id}")
    User getUserById(int id);

    // XML 方式定义 SQL(见下方 UserMapper.xml)
    User getUserByName(String name);
}
5. XML 映射文件 (resources/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.mapper.UserMapper">
    <select id="getUserByName" resultType="User">
        SELECT * FROM user WHERE name = #{name}
    </select>
</mapper>

运行 HTML

6. Service 层 (UserService.java)
package com.example.service;

import com.example.entity.User;
import com.example.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;  // 注入动态代理对象

    // 通过注解 SQL 查询
    public User getUserById(int id) {
        return userMapper.getUserById(id);
    }

    // 通过 XML SQL 查询
    public User getUserByName(String name) {
        return userMapper.getUserByName(name);
    }

    // 事务管理示例
    @Transactional
    public void updateUser(User user) {
        // 更新操作(需在 Mapper 中定义 SQL)
    }
}
7. 启动类 (Application.java)
package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@SpringBootApplication
@EnableTransactionManagement  // 启用事务管理
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

三、执行流程

  1. 启动应用

    • Spring Boot 自动配置 DataSource 和 SqlSessionFactory

    • 扫描 @Mapper 接口,生成动态代理对象。

  2. 方法调用

    • 调用 userMapper.getUserById(1) 时,动态代理对象通过 SqlSession 执行注解中的 SQL。

    • 调用 userMapper.getUserByName("Alice") 时,查找 UserMapper.xml 中对应的 SQL。

  3. 事务管理

    • 使用 @Transactional 注解的方法由 Spring AOP 代理管理事务。


四、关键机制

  1. 动态代理
    MyBatis 通过 MapperProxy 为接口生成代理对象,将方法调用映射到 SQL 执行。

  2. SQL 解析

    • #{} 使用预编译(防止 SQL 注入),${} 直接拼接 SQL(需谨慎使用)。

  3. 事务整合
    Spring 的 DataSourceTransactionManager 管理 MyBatis 的数据库操作,确保事务一致性。


五、常见问题

  1. Mapper 接口未找到

    • 确保使用 @Mapper 或 @MapperScan("com.example.mapper") 扫描接口。

  2. XML 文件未加载

    • 检查 mybatis.mapper-locations 配置路径是否匹配。

  3. 事务不生效

    • 确保启动类添加 @EnableTransactionManagement,并在方法上使用 @Transactional


通过上述示例和原理,Spring Boot 与 MyBatis 实现了简洁高效的数据库操作,开发者只需关注 SQL 和业务逻辑,框架自动处理底层连接、事务和映射。

相关文章:

  • 【Java】I/O 流篇 —— 缓冲流
  • 什么是以知识为中心的服务(KCS)?最佳实践是什么?
  • STM32+ESP8266局域网通信
  • 【Java项目】基于Spring Boot的交流互动系统
  • 【工欲善其事】2025 年实现听书自由——基于 Kokoro-82M 的开源 TTS 工具 audiblez 本地部署实战
  • AI多模态梳理与应用思考|从单文本到多视觉的生成式AI的AGI关键路径
  • msc2n修改物料有效期
  • 【算法】 ‘abb‘ 型子序列问题——前后缀分解 python
  • 【红队利器】单文件一键结束火绒6.0
  • 2025最新最全【大模型学习路线规划】零基础入门到精通_大模型 开发 学习路线
  • C语言 —— 此去经年 应是良辰好景虚设 - 函数
  • Deepseek 实战全攻略,领航科技应用的深度探索之旅
  • R Excel 文件:高效数据处理的利器
  • 基于SpringBoot+mybatisplus+vueJS的高校选课系统设计和实现
  • [AI]【Comfyui】 生成基本流程图的步骤保姆记录
  • 华为2025年技术发布会:智能汽车核心技术大爆发
  • Go 之 语言基本类型
  • 从0-1学习Mysql第三章: 数据类型
  • 基于Spring Boot的健康医院门诊在线挂号系统设与实现(LW+源码+讲解)
  • angular新闻列表分页
  • 个体户查询系统官网/seo上排名
  • 做英语陪同翻译兼职的网站/什么是整合营销并举例说明
  • 奇趣网做网站/抖音推广渠道有哪些
  • 企业如何选择网站/百度的官方网站
  • 如何把网站转网站/做网络推广怎么收费
  • 网站建设合同书保密条款/sem代运营托管公司