Spring Boot 整合 MyBatis

一、什么是 MyBatis

1.概述

MyBatis 是一个优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。

2.MyBatis 的结构图:

3.MyBatis 的优点:

  • 简单性:MyBatis 避免了使用复杂的 JDBC 代码,使得数据库的操作变得简单。

  • 类型安全:MyBatis 提供了完整的映射规则,能够保证类型的安全。

  • 灵活性:MyBatis允许自由的 SQL 语句,能满足各种查询需求。

  • 易于学习和使用:MyBatis 的配置和使用相对简单,容易上手。

  • 高性能:MyBatis 可以进行轻量级的数据库操作,并且它的缓存机制能够提高查询速度。

  • 插件支持:MyBatis 提供了插件接口,用户可以通过插件定制化 MyBatis 的功能。

二、整合 MyBatis

1.添加 MyBatis 依赖

XML 复制代码
        <!-- MySQL数据库连接器依赖 -->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
        </dependency>

        <!-- MyBatis-Spring Boot启动器依赖 -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>3.0.3</version>
        </dependency>

2.application.yml的配置

连接数据库的基本数据

XML 复制代码
spring:
  datasource:
    name: big_event
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/big_event?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=utf-8&autoReconnect=true&useSSL=false&allowMultiQueries=true&useAffectedRows=true
    username: root  #自己的数据库名称
    password: 123456  #数据库密码

代码配置了Spring Boot应用的数据源信息,具体功能如下:
name: 数据源名称为 big_event。
driver-class-name: 使用MySQL的JDBC驱动 com.mysql.cj.jdbc.Driver。
url: 数据库连接URL,连接到本地的 big_event 数据库,指定了字符编码、时区、自动重连等参数。
username: 数据库用户名为 root。
password: 数据库密码为 123456。

3.新建数据表

XML 复制代码
create table user
(
    id          int unsigned auto_increment comment 'ID'
        primary key,
    username    varchar(20)             not null comment '用户名',
    password    varchar(32)             null comment '密码',
    nickname    varchar(10)  default '' null comment '昵称',
    email       varchar(128) default '' null comment '邮箱',
    user_pic    varchar(128) default '' null comment '头像',
    create_time datetime                not null comment '创建时间',
    update_time datetime                not null comment '修改时间',
    constraint username
        unique (username)
)
    comment '用户表';

4.新建实体类

新建 entity 包,并在此包中新建 User 类,将 user 数据表中的字段映射到实体类中,代码如下:

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

import java.time.LocalDateTime;

public class User {
    private Integer id;//主键ID
    private String username;//用户名
    private String password;//密码
    private String nickname;//呢称
    private String email;//邮箱
    private String userPic;//用户头像地址
    private LocalDateTime createTime;//创建时间
    private LocalDateTime updateTime;//更新时间

    public User() {
    }

    public User(Integer id, String username, String password, String nickname, String email, String userPic, LocalDateTime createTime, LocalDateTime updateTime) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.nickname = nickname;
        this.email = email;
        this.userPic = userPic;
        this.createTime = createTime;
        this.updateTime = updateTime;

    }
    
    public Integer getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getUserPic() {
        return userPic;
    }

    public void setUserPic(String userPic) {
        this.userPic = userPic;
    }

    public LocalDateTime getCreateTime() {
        return createTime;
    }

    public void setCreateTime(LocalDateTime createTime) {
        this.createTime = createTime;
    }

    public LocalDateTime getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(LocalDateTime updateTime) {
        this.updateTime = updateTime;
    }
}

5.创建 Mapper 接口

新建 mapper 包,并在此包中新建 UserMapper 接口,然后定义对对数据的操作,代码如下:

java 复制代码
/**
 * UserMapper接口定义了用户数据访问层的方法
 * 它提供了对用户信息进行基本操作的功能,如查询、添加、更新和删除用户
 */
package com.example.demo.mapper;

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

import java.util.List;

@Mapper
public interface UserMapper {
    /**
     * 查询所有用户信息
     *
     * @return 用户列表如果数据库中没有用户,则返回空列表
     */
    @Select("SELECT * FROM user")
    List<User> findAllUser();

    /**
     * 添加新用户
     *
     * @param user 待添加的用户对象必须包含必要的用户信息
     * @return 添加成功返回1,否则返回0
     */
    @Insert("insert into user(username,password) values(#{username},#{password})")
    int addUser(User user);

    /**
     * 更新用户信息
     *
     * @param user 包含更新信息的用户对象必须包含用户ID以确定要更新的记录
     * @return 更新成功返回1,否则返回0
     */
    @Update("UPDATE user SET username=#{username} WHERE id=#{id}")
    int updUser(User user);

    /**
     * 删除指定用户
     *
     * @param id 要删除的用户的ID不能为null
     * @return 删除成功返回1,否则返回0
     */
    @Delete("DELETE FROM user WHERE id=#{id}")
    int delUser(Integer id);
}

4.创建 service 业务逻辑

新建 service 包,并在此包中新建 UserService 接口,用于处理 SQL 语句查询。代码如下:

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

import com.example.demo.entity.User;
import java.util.List;

public interface UserService {
    /**
     * 获取所有用户信息
     *
     * @return 用户列表,如果数据库中没有用户,则返回空列表
     */
    List<User> getAllUsers();

    /**
     * 添加新用户
     *
     * @param user 待添加的用户对象,必须包含必要的用户信息
     * @return 添加成功返回true,否则返回false
     */
    boolean addUser(User user);

    /**
     * 更新用户信息
     *
     * @param user 包含更新信息的用户对象,必须包含用户ID以确定要更新的记录
     * @return 更新成功返回true,否则返回false
     */
    boolean updateUser(User user);

    /**
     * 删除指定用户
     *
     * @param id 要删除的用户的ID,不能为null
     * @return 删除成功返回true,否则返回false
     */
    boolean deleteUser(Integer id);
}

在 service 包中新建impl 包,并在此包中新建 UserServiceImpl 实现接口,代码如下:

java 复制代码
package com.example.demo.service.impl;

import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import com.example.demo.service.UserService;
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;

    /**
     * 获取所有用户信息
     *
     * @return 用户列表,如果数据库中没有用户,则返回空列表
     */
    @Override
    public List<User> getAllUsers() {
        return userMapper.findAllUser();
    }

    /**
     * 添加新用户
     *
     * @param user 待添加的用户对象,必须包含必要的用户信息
     * @return 添加成功返回true,否则返回false
     */
    @Override
    public boolean addUser(User user) {
        return userMapper.addUser(user) == 1;
    }

    /**
     * 更新用户信息
     *
     * @param user 包含更新信息的用户对象,必须包含用户ID以确定要更新的记录
     * @return 更新成功返回true,否则返回false
     */
    @Override
    public boolean updateUser(User user) {
        return userMapper.updUser(user) == 1;
    }

    /**
     * 删除指定用户
     *
     * @param id 要删除的用户的ID,不能为null
     * @return 删除成功返回true,否则返回false
     */
    @Override
    public boolean deleteUser(Integer id) {
        return userMapper.delUser(id) == 1;
    }
}

5.新建 controller

新建 controller 包,并在此包中新建 MybatisController 控制类。代码如下:

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

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

import java.util.List;

@RestController
@RequestMapping("/user")
public class MybatisController {
    @Autowired
    private UserService userService;

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

    @PostMapping("/add")
    public boolean addUser(@RequestBody User user) {
        return userService.addUser(user);
    }

    @PutMapping("/update")
    public boolean updateUser(@RequestBody User user) {
        return userService.updateUser(user);
    }

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

6.总结

逻辑包

entity:定义了用户实体类 User。

mapper:定义了数据访问层接口 UserMapper,并使用 MyBatis 注解来映射 SQL 语句。

service:定义了业务逻辑接口 UserService 及其实现类 UserServiceImpl。

controller:定义了 RESTful API 控制器 UserController,处理 HTTP 请求。

通过以上步骤,您可以在 Spring Boot 应用中成功整合 MyBatis,并实现用户管理的基本功能。

三、验证

在浏览器中输入端口号,即可看到信息:

相关推荐
xlsw_2 小时前
java全栈day20--Web后端实战(Mybatis基础2)
java·开发语言·mybatis
神仙别闹3 小时前
基于java的改良版超级玛丽小游戏
java
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭3 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
暮湫4 小时前
泛型(2)
java
超爱吃士力架4 小时前
邀请逻辑
java·linux·后端
南宫生4 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
转码的小石4 小时前
12/21java基础
java
李小白664 小时前
Spring MVC(上)
java·spring·mvc
GoodStudyAndDayDayUp4 小时前
IDEA能够从mapper跳转到xml的插件
xml·java·intellij-idea
装不满的克莱因瓶5 小时前
【Redis经典面试题六】Redis的持久化机制是怎样的?
java·数据库·redis·持久化·aof·rdb