Spring Boot 整合 MyBatis 快速入门超详教程

目标:

为了快速入门,我这里演示创建一个简单的用户管理,包含用户列表的增删改查功能。

准备工作:

1 环境搭建: 确保已安装 JDK 1.8+、Maven 3.3+、MySQL 数据库以及 IntelliJ IDEA 。

2 数据库准备: 在 MySQL 中创建名为 user_db 的数据库,并在其中创建名为 user 的表,包含以下字段:

a) id: 用户 ID,主键,自增

b) name: 用户名,字符串类型

c) age: 年龄,整数类型

建表SQL语句:

sql 复制代码
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    age INT NOT NULL
);

3 创建 Spring Boot 项目: 使用 IDEA 创建一个名为 mybatis-demo 的 Spring Boot 项目,并添加以下依赖:

**a)**Spring Web

**b)**MyBatis Framework

**c)**MySQL Driver

相关教程:

JDK安装教程及Java环境配置

MySql安装教程

MySql基础语法详解

IDEA安装教程

快速创建Spring Boot教程


详细步骤:

1. 项目结构:

XML 复制代码
mybatis-demo
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── example
│   │   │           └── mybatisdemo
│   │   │               ├── MybatisDemoApplication.java
│   │   │               ├── controller
│   │   │               │   └── UserController.java
│   │   │               ├── entity
│   │   │               │   └── User.java
│   │   │               ├── mapper
│   │   │               │   └── UserMapper.java
│   │   │               └── service
│   │   │                   ├── UserServiceImpl.java
│   │   │                   └── UserService.java
│   │   └── resources
│   │       ├── application.properties
│   │       └── mapper
│   │           └── UserMapper.xml
│   └── test
│       └── java
│           └── com
│               └── example
│                   └── mybatisdemo
│                       └── MybatisDemoApplicationTests.java
└── pom.xml

2. 引入依赖 (pom.xml):

XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>2.7.2</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <scope>runtime</scope>
    </dependency>
  </dependencies>
</project>

3. 配置数据源 (application.properties):

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

4. 创建实体类 (User.java):

java 复制代码
package com.example.mybatisdemo.entity;

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

    // Getters and Setters 省略
}

5. 创建 Mapper 接口 (UserMapper.java):

java 复制代码
package com.example.mybatisdemo.mapper;

import com.example.mybatisdemo.entity.User;
import org.apache.ibatis.annotations.*;

@Mapper
public interface UserMapper {

    @Select("SELECT * FROM user WHERE id = #{id}")
    User selectById(@Param("id") Long id);

    @Insert("INSERT INTO user(name, age) VALUES (#{name}, #{age})")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    int insert(User user);

    @Update("UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}")
    int update(User user);

    @Delete("DELETE FROM user WHERE id = #{id}")
    int deleteById(@Param("id") Long id);

    @Select("SELECT * FROM user")
    List<User> selectAllUsers();
}

@Mapper 注解告诉 MyBatis 创建这个接口的实现类。

  • @Select、@Insert、@Update 和 @Delete 注解分别对应 SQL 语句的查询、插入、更新和删除操作。

  • @Param("id") 将方法参数 id 绑定到 SQL 语句中的占位符 #{id}。

  • @Options 配置插入操作,useGeneratedKeys = true 表示使用数据库生成的主键,keyProperty = "id" 表示将生成的主键赋值给实体类 User 的 id 属性。

6. 创建 Mapper XML 文件 (UserMapper.xml):

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

    <!-- 根据 ID 查询用户 -->
    <select id="selectById" resultType="com.example.mybatisdemo.entity.User">
        SELECT * FROM user WHERE id = #{id}
    </select>

    <!-- 新增用户 -->
    <insert id="insert" keyProperty="id" useGeneratedKeys="true">
        INSERT INTO user(name, age) VALUES (#{name}, #{age})
    </insert>

    <!-- 更新用户信息 -->
    <update id="update">
        UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}
    </update>

    <!-- 根据 ID 删除用户 -->
    <delete id="deleteById">
        DELETE FROM user WHERE id = #{id}
    </delete>

    <!-- 查询所有用户 -->
    <select id="selectAllUsers" resultType="com.example.mybatisdemo.entity.User">
        SELECT * FROM user
    </select>

</mapper>

解释:

  • <mapper namespace="com.example.mybatisdemo.mapper.UserMapper">: 定义了这个 Mapper XML 文件对应的 Mapper 接口的全限定名。

  • <select>, <insert>, <update>, <delete>: 分别对应 SQL 语句的查询、插入、更新和删除操作。

  • id 属性: 与 Mapper 接口中定义的方法名一致。

  • resultType 属性: 定义查询结果的类型,这里对应 com.example.mybatisdemo.entity.User。

  • #{id}: 使用占位符传入参数。

  • keyProperty="id" 和 useGeneratedKeys="true": 用于获取插入操作后自动生成的主键,并将主键值赋值给实体类的 id 属性。

注意:

  • Mapper XML 文件需要放在 resources/mapper 目录下。

  • Mapper XML 文件名建议与 Mapper 接口名一致,例如 UserMapper.xml。

7. 创建 Service 接口 (UserService.java):

java 复制代码
package com.example.mybatisdemo.service;

import com.example.mybatisdemo.entity.User;

import java.util.List;

public interface UserService {
    User getUserById(Long id);

    int createUser(User user);

    int updateUser(User user);

    int deleteUser(Long id);

    List<User> getAllUsers();
}

8. 实现 Service 接口 (UserServiceImpl.java):

java 复制代码
package com.example.mybatisdemo.service;

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

import java.util.List;

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public User getUserById(Long id) {
        return userMapper.selectById(id);
    }

    @Override
    public int createUser(User user) {
        return userMapper.insert(user);
    }

    @Override
    public int updateUser(User user) {
        return userMapper.update(user);
    }

    @Override
    public int deleteUser(Long id) {
        return userMapper.deleteById(id);
    }

    @Override
    public List<User> getAllUsers() {
        return userMapper.selectAllUsers();
    }
}

@Service 注解将该类标记为 Spring Bean。

  • @Autowired 注解自动注入 UserMapper 实例。

9. 创建 Controller (UserController.java):

java 复制代码
package com.example.mybatisdemo.controller;

import com.example.mybatisdemo.entity.User;
import com.example.mybatisdemo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        return userService.getUserById(id);
    }

    @PostMapping
    public int createUser(@RequestBody User user) {
        return userService.createUser(user);
    }

    @PutMapping("/{id}")
    public int updateUser(@PathVariable Long id, @RequestBody User user) {
        user.setId(id);
        return userService.updateUser(user);
    }

    @DeleteMapping("/{id}")
    public int deleteUser(@PathVariable Long id) {
        return userService.deleteUser(id);
    }

    @GetMapping
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }
}

@RestController 注解将该类标记为 RESTful 风格的控制器。

  • @RequestMapping("/users") 定义接口路径前缀。

  • @GetMapping、@PostMapping、@PutMapping、@DeleteMapping 分别对应 GET、POST、PUT、DELETE 请求。

10. 运行项目:

  • 运行 MybatisDemoApplication.java 启动 Spring Boot 应用。

11. 测试接口:

  • 使用 Postman 或浏览器测试以下接口:

    • GET /users: 获取所有用户

    • GET /users/1: 获取 ID 为 1 的用户

    • POST /users: 创建新用户 (请求体: {"name": "John Doe", "age": 30})

    • PUT /users/1: 更新 ID 为 1 的用户信息 (请求体: {"name": "Jane Doe", "age": 25})

    • DELETE /users/1: 删除 ID 为 1 的用户

通过以上步骤,你已经成功创建了一个使用 Spring Boot 和 MyBatis 实现的简单用户管理。

进阶学习:

  • MyBatis 动态 SQL

  • MyBatis 缓存机制

  • MyBatis 一对一、一对多、多对多关联查询

希望这个超详细的教程能够帮助各位看官快速入门 Spring Boot 和 MyBatis!感谢各位看官的观看,下期见,谢谢~

相关推荐
Watermelo617几秒前
详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用
开发语言·前端·javascript·算法·数据挖掘·数据分析·ecmascript
乐之者v6 分钟前
leetCode43.字符串相乘
java·数据结构·算法
半盏茶香1 小时前
在21世纪的我用C语言探寻世界本质 ——编译和链接(编译环境和运行环境)
c语言·开发语言·c++·算法
Evand J2 小时前
LOS/NLOS环境建模与三维TOA定位,MATLAB仿真程序,可自定义锚点数量和轨迹点长度
开发语言·matlab
LucianaiB2 小时前
探索CSDN博客数据:使用Python爬虫技术
开发语言·爬虫·python
Ronin3052 小时前
11.vector的介绍及模拟实现
开发语言·c++
计算机学长大白3 小时前
C中设计不允许继承的类的实现方法是什么?
c语言·开发语言
suweijie7683 小时前
SpringCloudAlibaba | Sentinel从基础到进阶
java·大数据·sentinel
公贵买其鹿4 小时前
List深拷贝后,数据还是被串改
java
PieroPc4 小时前
Python 写的 智慧记 进销存 辅助 程序 导入导出 excel 可打印
开发语言·python·excel