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

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 和业务逻辑,框架自动处理底层连接、事务和映射。


http://www.kler.cn/a/569367.html

相关文章:

  • 2025年企业网络安全实战指南:常见漏洞解析与全方位防御策略
  • ​PDF 工具箱 软件无需安装绿色版
  • linux(2)用户管理
  • 【Java项目】基于Spring Boot的论坛管理系统
  • 8. Nginx 配合 + Keepalived 搭建高可用集群
  • P2P 下载科普:原理与应用
  • JavaScript 进阶A(作用域、闭包、变量和函数提升、函数相关只是、数组解构、对象解构、构造函数
  • 2025年2月最新SCI-鹰鱼优化算法HawkFish Optimization Algorithm-附Matlab免费代码
  • 合合信息在视觉内容安全领域的创新与应用-应对伪造挑战的前沿进展
  • 游戏分组王者荣耀
  • DeepSeek-R1 论文笔记:通过强化学习提升大语言模型的推理能力
  • 【Zinx】Day1:初始 Zinx 框架
  • Pandas使用教程 - Pandas 与 Web API 交互
  • 什么是 MGX:MetaGPT
  • C++11特性(笔记一)
  • C++:vector的push_back时间复杂度分析
  • Qt的坐标
  • 手机打电话时如何识别对方按下的DTMF按键的字符-安卓AI电话机器人
  • Java中用Map<String,Object>存储层次结构
  • 力扣1584. 连接所有点的最小费用