SpringBoot + MyBatis整合教程:企业级数据访问层最佳实践

博主介绍:Java、Python、js全栈开发 “多面手”,精通多种编程语言和技术,痴迷于人工智能领域。秉持着对技术的热爱与执着,持续探索创新,愿在此分享交流和学习,与大家共进步。
全栈开发环境搭建运行攻略:多语言一站式指南(环境搭建+运行+调试+发布+保姆级详解)
感兴趣的可以先收藏起来,希望帮助更多的人
在这里插入图片描述

SpringBoot + MyBatis整合教程:企业级数据访问层最佳实践

一、引言

在企业级应用开发中,数据访问层是至关重要的一环。它负责与数据库进行交互,为业务逻辑层提供数据支持。Spring Boot 作为一款快速开发框架,极大地简化了 Spring 应用的搭建过程;而 MyBatis 则是一款优秀的持久层框架,它提供了灵活的 SQL 映射机制,使得开发者可以更方便地操作数据库。本文将详细介绍如何将 Spring Boot 和 MyBatis 进行整合,为企业级数据访问层提供最佳实践。

二、环境准备

2.1 JDK 安装

确保你的系统已经安装了 JDK 8 或更高版本。你可以通过以下命令检查 JDK 版本:

java -version

如果未安装,你可以从 Oracle 官方网站或 OpenJDK 官方网站下载并安装适合你系统的 JDK 版本。

2.2 Maven 安装

Maven 是一个项目管理和构建工具,用于管理项目的依赖和构建过程。你可以从 Maven 官方网站下载并安装 Maven,安装完成后,配置好环境变量。可以通过以下命令检查 Maven 版本:

mvn -version

2.3 数据库准备

本文以 MySQL 数据库为例,你需要安装 MySQL 数据库,并创建一个新的数据库。例如,创建一个名为 test_db 的数据库:

CREATE DATABASE test_db;

三、创建 Spring Boot 项目

3.1 使用 Spring Initializr 创建项目

访问 Spring Initializr,按照以下步骤进行配置:

  • Project:选择 Maven Project
  • Language:选择 Java
  • Spring Boot:选择合适的版本,建议选择稳定版本。
  • Group:填写项目的组织名,例如 com.example
  • Artifact:填写项目的名称,例如 springboot-mybatis-demo
  • Dependencies:添加以下依赖:
    • Spring Web
    • Spring Data JPA
    • MySQL Driver
    • MyBatis Framework

点击 Generate 按钮下载项目压缩包,解压后导入到你喜欢的 IDE 中,如 IntelliJ IDEA 或 Eclipse。

3.2 项目结构介绍

导入项目后,项目的主要结构如下:

springboot-mybatis-demo
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── example
│   │   │           └── springbootmybatisdemo
│   │   │               ├── SpringbootMybatisDemoApplication.java
│   │   │               ├── controller
│   │   │               ├── dao
│   │   │               ├── entity
│   │   │               └── service
│   │   └── resources
│   │       ├── application.properties
│   │       └── mapper
│   └── test
│       └── java
│           └── com
│               └── example
│                   └── springbootmybatisdemo
│                       └── SpringbootMybatisDemoApplicationTests.java
└── pom.xml
  • SpringbootMybatisDemoApplication.java:项目的启动类。
  • controller 包:用于存放控制器类,处理 HTTP 请求。
  • dao 包:用于存放数据访问对象(DAO)接口。
  • entity 包:用于存放实体类,对应数据库表。
  • service 包:用于存放业务逻辑类。
  • application.properties:项目的配置文件。
  • mapper 目录:用于存放 MyBatis 的 SQL 映射文件。
  • pom.xml:Maven 项目的配置文件,用于管理项目的依赖。

四、配置 Spring Boot 和 MyBatis

4.1 配置数据库连接

src/main/resources/application.properties 文件中添加以下数据库连接配置:

spring.datasource.url=jdbc:mysql://localhost:3306/test_db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

请将 your_password 替换为你自己的 MySQL 数据库密码。

4.2 配置 MyBatis

application.properties 文件中添加 MyBatis 的配置:

mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.example.springbootmybatisdemo.entity
  • mybatis.mapper-locations:指定 MyBatis 的 SQL 映射文件的位置。
  • mybatis.type-aliases-package:指定实体类所在的包,这样在 SQL 映射文件中可以直接使用实体类名,而不需要使用全限定名。

4.3 启用 MyBatis 扫描

SpringbootMybatisDemoApplication.java 类上添加 @MapperScan 注解,指定 DAO 接口所在的包:

package com.example.springbootmybatisdemo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.example.springbootmybatisdemo.dao")
public class SpringbootMybatisDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootMybatisDemoApplication.class, args);
    }
}

五、创建实体类和 DAO 接口

5.1 创建实体类

com.example.springbootmybatisdemo.entity 包下创建一个实体类,例如 User.java

package com.example.springbootmybatisdemo.entity;

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

    // 构造方法、Getter 和 Setter 方法
    public User() {}

    public User(Integer id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    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;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

5.2 创建 DAO 接口

com.example.springbootmybatisdemo.dao 包下创建一个 DAO 接口,例如 UserDao.java

package com.example.springbootmybatisdemo.dao;

import com.example.springbootmybatisdemo.entity.User;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface UserDao {
    List<User> getAllUsers();
    User getUserById(Integer id);
    int insertUser(User user);
    int updateUser(User user);
    int deleteUser(Integer id);
}

@Mapper 注解用于告诉 MyBatis 这是一个数据访问接口。

六、创建 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.springbootmybatisdemo.dao.UserDao">

    <select id="getAllUsers" resultType="User">
        SELECT * FROM user
    select>

    <select id="getUserById" parameterType="int" resultType="User">
        SELECT * FROM user WHERE id = #{id}
    select>

    <insert id="insertUser" parameterType="User">
        INSERT INTO user (name, age) VALUES (#{name}, #{age})
    insert>

    <update id="updateUser" parameterType="User">
        UPDATE user SET name = #{name}, age = #{age} WHERE id = #{id}
    update>

    <delete id="deleteUser" parameterType="int">
        DELETE FROM user WHERE id = #{id}
    delete>

mapper>
  • namespace:指定对应的 DAO 接口的全限定名。
  • selectinsertupdatedelete 标签分别用于定义查询、插入、更新和删除操作。
  • resultType:指定查询结果的类型,这里使用实体类名。
  • parameterType:指定传入参数的类型。

七、创建服务层和控制器层

7.1 创建服务层

com.example.springbootmybatisdemo.service 包下创建一个服务类,例如 UserService.java

package com.example.springbootmybatisdemo.service;

import com.example.springbootmybatisdemo.dao.UserDao;
import com.example.springbootmybatisdemo.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {

    @Autowired
    private UserDao userDao;

    public List<User> getAllUsers() {
        return userDao.getAllUsers();
    }

    public User getUserById(Integer id) {
        return userDao.getUserById(id);
    }

    public int insertUser(User user) {
        return userDao.insertUser(user);
    }

    public int updateUser(User user) {
        return userDao.updateUser(user);
    }

    public int deleteUser(Integer id) {
        return userDao.deleteUser(id);
    }
}

@Service 注解用于将该类标记为服务层组件。

7.2 创建控制器层

com.example.springbootmybatisdemo.controller 包下创建一个控制器类,例如 UserController.java

package com.example.springbootmybatisdemo.controller;

import com.example.springbootmybatisdemo.entity.User;
import com.example.springbootmybatisdemo.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
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }

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

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

    @PutMapping
    public int updateUser(@RequestBody User user) {
        return userService.updateUser(user);
    }

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

@RestController 注解用于将该类标记为 RESTful 风格的控制器,@RequestMapping 注解用于指定请求的路径。

八、测试项目

8.1 启动项目

在 IDE 中运行 SpringbootMybatisDemoApplication.java 类的 main 方法,启动 Spring Boot 项目。

8.2 使用 Postman 进行测试

  • 获取所有用户:发送 GET 请求到 http://localhost:8080/users
  • 获取指定用户:发送 GET 请求到 http://localhost:8080/users/1,其中 1 为用户的 ID。
  • 插入用户:发送 POST 请求到 http://localhost:8080/users,请求体为 JSON 格式,例如:
{
    "name": "John",
    "age": 25
}
  • 更新用户:发送 PUT 请求到 http://localhost:8080/users,请求体为 JSON 格式,例如:
{
    "id": 1,
    "name": "Tom",
    "age": 30
}
  • 删除用户:发送 DELETE 请求到 http://localhost:8080/users/1,其中 1 为用户的 ID。

九、总结

通过以上步骤,我们成功地将 Spring Boot 和 MyBatis 进行了整合,实现了一个简单的企业级数据访问层。在实际开发中,我们可以根据业务需求进一步扩展和优化代码,例如添加事务管理、分页查询等功能。

你可能感兴趣的:(Web,spring,boot,mybatis,后端)