六、 Spring Framework基础:MyBatis基本用法与实践

news/2025/2/26 23:43:19

深入解析 Spring Data MyBatis:基本用法与实践

MyBatis 是一个流行的 Java 持久层框架,它通过 SQL 映射和动态 SQL 提供了灵活的数据库操作能力。在 Spring Boot 项目中,MyBatis 可以与 Spring Data 无缝集成,从而实现高效的数据访问。本文将详细介绍 Spring Data MyBatis 的基本用法,包括环境搭建、依赖配置、复杂查询以及性能优化等内容。


1. 环境搭建

1.1 添加依赖

在 Spring Boot 项目中,需要添加 MyBatis 和数据库驱动的依赖。以 MySQL 为例,pom.xml 文件中的依赖配置如下:

<dependencies>
    <!-- Spring Boot Starter Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Spring Boot Starter MyBatis -->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>3.0.3</version> <!-- 请根据需要选择合适的版本 -->
    </dependency>

    <!-- MySQL Connector -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>

    <!-- Spring Boot Starter Test -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

1.2 配置数据源

application.ymlapplication.properties 文件中配置数据源和 MyBatis 的相关信息。

application.yml
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/your_database_name?useSSL=false&serverTimezone=UTC&characterEncoding=utf-8
    username: your_username
    password: your_password
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis:
  mapper-locations: classpath:mappers/*.xml
  type-aliases-package: com.yourpackage.model
  configuration:
    map-underscore-to-camel-case: true
application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/your_database_name?useSSL=false&serverTimezone=UTC&characterEncoding=utf-8
spring.datasource.username=your_username
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

mybatis.mapper-locations=classpath:mappers/*.xml
mybatis.type-aliases-package=com.yourpackage.model
mybatis.configuration.map-underscore-to-camel-case=true

2. 基本用法

2.1 创建实体类

根据数据库表结构创建对应的实体类。例如,有一个 User 表:

java">package com.yourpackage.model;

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

    // Getters and Setters
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

2.2 创建 Mapper 接口

创建一个 Mapper 接口,定义数据库操作方法。可以使用注解或 XML 文件来定义 SQL。

使用注解
java">package com.yourpackage.mapper;

import com.yourpackage.model.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface UserMapper {
    @Select("SELECT * FROM user")
    List<User> getAllUsers();
}
使用 XML 文件

创建一个 UserMapper.xml 文件,定义 SQL 映射:

<?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.yourpackage.mapper.UserMapper">

    <select id="getAllUsers" resultType="com.yourpackage.model.User">
        SELECT * FROM user
    </select>

    <insert id="insertUser" parameterType="com.yourpackage.model.User">
        INSERT INTO user (name, age) VALUES (#{name}, #{age})
    </insert>
</mapper>

3. 复杂查询与动态 SQL

MyBatis 支持复杂的查询和动态 SQL,这使得它在处理复杂业务逻辑时非常灵活。

3.1 动态 SQL

MyBatis 提供了 <if><foreach> 等标签,用于构建动态 SQL:

<select id="findUsersByNameAndAge" resultType="com.yourpackage.model.User">
    SELECT * FROM user
    <where>
        <if test="name != null">
            AND name = #{name}
        </if>
        <if test="age != null">
            AND age = #{age}
        </if>
    </where>
</select>

3.2 复杂查询

MyBatis 支持一对一、一对多关系的映射,但需要手动配置。


4. 性能优化

MyBatis 的性能优化主要依赖于 SQL 的编写和缓存机制。

4.1 SQL 优化

MyBatis 允许开发者手动编写 SQL,因此可以通过优化 SQL 语句来提升性能。

4.2 缓存机制

MyBatis 提供了一级缓存和二级缓存机制,可以通过配置文件或注解启用。


5. 数据库操作示例

以下是一些常见的数据库操作示例:

5.1 查询操作

java">@Select("SELECT * FROM user WHERE id = #{id}")
User getUserById(int id);

5.2 插入操作

java">@Insert("INSERT INTO user (name, age) VALUES (#{name}, #{age})")
void insertUser(User user);

5.3 更新操作

java">@Update("UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}")
void updateUser(User user);

5.4 删除操作

java">@Delete("DELETE FROM user WHERE id = #{id}")
void deleteUser(int id);

6. 总结

Spring Data MyBatis 是一个灵活且强大的持久层框架,它通过注解和 XML 映射提供了对 SQL 的精细控制,适合复杂查询和性能优化的场景。本文详细介绍了 Spring Data MyBatis 的基本用法,包括环境搭建、依赖配置、复杂查询以及性能优化等内容。

希望本文的内容能帮助你在实际开发中更好地使用 Spring Data MyBatis。如果你对某个部分有更多问题,欢迎随时交流!


http://www.niftyadmin.cn/n/5869279.html

相关文章

本地大模型编程实战(22)用langchain实现基于SQL数据构建问答系统(1)

使 LLM(大语言模型) 系统能够查询结构化数据与非结构化文本数据在性质上可能不同。后者通常生成可在向量数据库中搜索的文本&#xff0c;而结构化数据的方法通常是让 LLM 编写和执行 DSL&#xff08;例如 SQL&#xff09;中的查询。 我们将演练在使用基于 langchain 链 &#x…

C++ 正则表达式分组捕获入门指南

在 C 中&#xff0c;正则表达式&#xff08;regex&#xff09;是一种用于匹配字符串模式的强大工具。正则表达式不仅能帮助你查找符合特定模式的字符&#xff0c;还能捕获匹配的子字符串&#xff08;即分组捕获&#xff09;。这篇文章将介绍 C 正则表达式中的分组捕获机制&…

一文2500字从0到1实现压测自动化!

大家好&#xff0c;我是小码哥&#xff0c;最近工作有点忙&#xff0c;一直在实现压测自动化的功能&#xff0c;今天来分享一下实现思路 我所在的业务线现在项目比较少了&#xff0c;所以最近一个月我都没有做业务测试&#xff0c;需求开发完后RD直接走免测就上线&#xff0c;…

腾讯SQL面试题变体实现:最长连续天数与允许1天中断的进阶解法

腾讯SQL面试题变体实现:最长连续天数与允许1天中断的进阶解法 作者:某七年数据开发工程师 | 2025年02月23日 关键词:滑动窗口、容错机制、连续区间优化 一、变体题型需求分析 在原题如何找出连续5天涨幅超过5%的股票基础上,需实现两个扩展场景: 最长连续天数:输出每只股…

物联网智能终端-低成本方案(HC32L196+EC800G+BLE+2.8寸串口屏)

背景介绍 公司前几年搞了一些基于Linux系统的网关和智能终端的开发工作&#xff0c;产品已经量产&#xff0c;投放市场后发现有几个问题&#xff0c;第一个问题是成本&#xff0c;能跑Linux系统的处理器成本都比较高&#xff0c;当然了它的性能也是比较强。第二个问题是功耗&am…

【Java项目】基于Spring Boot的旧物置换系统

【Java项目】基于Spring Boot的旧物置换系统 技术简介&#xff1a;采用Java技术、Spring Boot框架、MySQL数据库等实现。 系统简介&#xff1a;旧物置换系统包括管理员、用户、卖家。其主要功能包括管理员&#xff1a;首页、个人中心、用户管理、卖家管理、旧物类型管理、旧物信…

2 Text2SQL 智能报表方案介绍

0 背景 Text2SQL智能报表方案旨在通过自然语言处理&#xff08;NLP&#xff09;技术&#xff0c;使用户能够以自然语言的形式提出问题&#xff0c;并自动生成相应的SQL查询&#xff0c;从而获取所需的数据报表&#xff0c;用户可根据得到结果展示分析从而为结论提供支撑&#…

基于AI人工智能UI自动化测试工具:Midscene

前言 随着互联网技术的飞速发展&#xff0c;Web应用越来越普及&#xff0c;前端页面也越来越复杂。为了确保产品质量&#xff0c;UI自动化测试成为了开发过程中不可或缺的一环。然而&#xff0c;传统的UI自动化测试工具往往存在学习成本高、维护困难等问题。特别是UI 自动化脚…