Spring Boot 与 MyBatis 数据库操作

devtools/2025/3/4 0:14:07/

一、核心原理

  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 {@Autowiredprivate UserMapper userMapper;  // 注入动态代理对象// 通过注解 SQL 查询public User getUserById(int id) {return userMapper.getUserById(id);}// 通过 XML SQL 查询public User getUserByName(String name) {return userMapper.getUserByName(name);}// 事务管理示例@Transactionalpublic 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 和业务逻辑,框架自动处理底层连接、事务和映射。


http://www.ppmy.cn/devtools/164318.html

相关文章

3.【基于深度学习YOLOV11的车辆类型检测系统】

文章目录 研究背景主要工作内容一、系统核心功能介绍及效果演示演示&#xff1a;软件主要功能&#xff1a;检测界面各大板块说明&#xff1a;检测区域&#xff1a;结果显示&#xff1a;主要功能说明:&#xff08;1&#xff09;图片检测说明&#xff08;2&#xff09;图片批量检…

变电站蓄电池在线监测系统(论文+源码)

1系统方案设计 本次课题为变电站蓄电池在线监测系统的设计&#xff0c;其系统架构如图3.1所示&#xff0c;包括了主控制器STC89C52单片机&#xff0c;液晶显示器LCD1602,模数转换器ADC0832&#xff0c;电流传感器ACS712&#xff0c;分压电阻&#xff0c;蜂鸣器以及温度传感器。…

一周掌握Flutter开发--5、网络请求

文章目录 5. 网络请求核心库5.1 http5.2 dio 必须掌握5.3 GET/POST 请求5.4 JSON 序列化与反序列化&#xff08;json_serializable&#xff09;5.5 错误处理与加载状态管理 总结 5. 网络请求 网络请求是移动应用开发中不可或缺的一部分&#xff0c;Flutter 提供了多种方式来实…

智能AI替代专家系统(ES)、决策支持系统(DSS)?

文章目录 前言一、专家系统&#xff08;ES&#xff09;是什么&#xff1f;二、决策支持系统&#xff08;DSS&#xff09;是什么&#xff1f;1.决策支持系统定义2.决策系统的功能与特点3.决策支持系统的组成 三、专家系统&#xff08;ES&#xff09;与决策支持系统&#xff08;D…

Java—初始多线程

多线程的理解 进程&#xff1a; 进程是程序的基本执行实体 每一个运行的软件都是一个进程 线程&#xff1a; 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中&#xff0c;是进程中的实际运作单位。 简单理解&#xff1a;应用软件中互相独立&#xff0c;可以…

SQL 基础 BETWEEN 的常见用法

在SQL中&#xff0c;BETWEEN是一个操作符&#xff0c;用于选取介于两个值之间的数据。 它包含这两个边界值。BETWEEN操作符常用于WHERE子句中&#xff0c;以便选取某个范围内的值。 以下是BETWEEN的一些常见用法&#xff1a; 选取介于两个值之间的值&#xff1a; 使用 BETWE…

华为OD机试真题:租车骑绿道(E卷、C++)

华为OD机试(E卷+D卷+C卷)最新题库【超值优惠】Java/Python/C++合集 题目描述 部门组织绿道骑行团建活动。租用公共双人自行车骑行,每辆自行车最多坐两人、做大载重M。 给出部门每个人的体重,请问最多需要租用多少双人自行车。 输入描述 第一行两个数字m、n,自行车限重…

Redis和MySQL的实时数据同步方案

针对 Redis 和 MySQL 的实时数据同步&#xff0c;需根据业务场景选择不同的技术方案&#xff0c;核心目标是保障数据一致性、降低延迟、提升系统可靠性。以下是几种典型方案及其适用场景&#xff1a; 方案一&#xff1a;基于 MySQL Binlog 的异步同步 原理 监听 MySQL 的 Bin…