Spring Boot 3.3 + MyBatis 基础教程:从入门到实践

Spring Boot 3.3 + MyBatis 基础教程:从入门到实践_第1张图片

Spring Boot 3.3 + MyBatis 基础教程:从入门到实践

在当今的Java开发领域,Spring Boot和MyBatis是构建高效、可维护的后端应用的两个强大工具。Spring Boot简化了Spring应用的初始搭建和开发过程,而MyBatis则提供了一种灵活的ORM(对象关系映射)解决方案。本文将介绍如何在Spring Boot 3.3中集成MyBatis,并通过一个简单的用户管理系统示例来展示其基本用法。同时,我们也会深入探讨MyBatis的实现原理,并通过类图来帮助理解其内部机制。

一、项目搭建

1. 创建Spring Boot项目

首先,使用Spring Initializr(https://start.spring.io/)创建一个Spring Boot项目,选择以下依赖:

  • Spring Web
  • MyBatis Framework
  • MySQL Driver

生成项目后,将项目导入到你的IDE中(如IntelliJ IDEA或Eclipse)。

2. 添加依赖

pom.xml文件中,确保添加了以下依赖:

<dependencies>
    
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-webartifactId>
    dependency>

    
    <dependency>
        <groupId>org.mybatis.spring.bootgroupId>
        <artifactId>mybatis-spring-boot-starterartifactId>
        <version>3.0.4version>
    dependency>

    
    <dependency>
        <groupId>com.mysqlgroupId>
        <artifactId>mysql-connector-jartifactId>
        <scope>runtimescope>
    dependency>

    
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-testartifactId>
        <scope>testscope>
    dependency>
dependencies>

3. 配置数据源和MyBatis

application.yml文件中,配置数据源和MyBatis的相关信息:

spring:
  application:
    name: spring-boot-demo
  datasource:
    url: jdbc:mysql://localhost:3306/db_spring_boot_demo?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis:
  mapper-locations: classpath:mapper/*.xml
  • spring.datasource.*:配置数据库连接信息。
  • mybatis.mapper-locations:指定MyBatis映射文件的位置。

二、创建实体类

创建一个简单的User实体类,用于表示用户信息:

package com.example.demo.model;

import lombok.Data;

@Data
public class User {
    private Long id;
    private String username;
    private String password;
}
  • 使用@Data注解来自动生成getter和setter方法。

三、创建Mapper接口

MyBatis通过Mapper接口来定义数据库操作。创建UserMapper接口:

package com.example.demo.mapper;

import com.example.demo.model.User;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface UserMapper {
	// 也可以用@Select @Update等注解来定义相关的sql语句,不用xml配图
    User selectById(Long id);
    void insert(User user);
    void update(User user);
    void deleteById(Long id);
    List<User> getAll();
}

直接代码定义SQL语句

@Mapper
public interface UserMapper {
    @Select("SELECT * FROM users WHERE id = #{id}")
    User selectById(Long id);

    @Insert("INSERT INTO users(username, password) VALUES(#{username}, #{password})")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    void insert(User user);

    @Update("UPDATE users SET username = #{username}, password = #{password} WHERE id = #{id}")
    void update(User user);

    @Delete("DELETE FROM users WHERE id = #{id}")
    void deleteById(Long id);

    @Select("SELECT * FROM users")
    List getAll();
}

使用XML配置SQL

src/main/resources/mapper目录下创建UserMapper.xml文件,定义SQL语句:


DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper">

    <select id="selectById" parameterType="long" resultType="com.example.demo.model.User">
        SELECT * FROM users WHERE id = #{id}
    select>

    <insert id="insert" parameterType="com.example.demo.model.User" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO users(username, password) VALUES(#{username}, #{password})
    insert>

    <update id="update" parameterType="com.example.demo.model.User">
        UPDATE users SET username = #{username}, password = #{password} WHERE id = #{id}
    update>

    <delete id="deleteById" parameterType="long">
        DELETE FROM users WHERE id = #{id}
    delete>

    <select id="getAll" resultType="com.example.demo.model.User">
        SELECT * FROM users
    select>

mapper>
  • namespace:指定Mapper接口的全限定名。
  • 每个SQL语句通过