MyBatis-Plus通用CRUD操作的实现

 更新时间:2024年10月31日 10:47:15   作者:Flying_Fish_Xuan  
MyBatis-Plus是基于MyBatis的增强工具,主要目的是简化MyBatis的使用并提升开发效率,它提供了通可以用CRUD操作、分页插件、多种插件支持、自动代码生成器等功能,感兴趣的可以了解一下

MyBatis-Plus 是在 MyBatis 的基础上开发的增强工具,旨在简化 MyBatis 的使用,提升开发效率。它为开发者提供了许多开箱即用的功能,尤其是通用 CRUD 操作,极大地减少了开发中常见的 CRUD 代码编写工作。MyBatis-Plus 通过提供一系列基于注解和模板的通用方法,简化了数据库操作。

一、MyBatis-Plus 的优势

  • 开箱即用的 CRUD 功能:MyBatis-Plus 提供了通用的 CRUD 方法,开发者无需手动编写常见的增删改查 SQL。
  • 丰富的分页功能:内置分页插件,支持数据库级别的分页查询,性能优越。
  • 多种插件支持:提供各种插件支持,如分页、性能分析、乐观锁等,开发者可以根据需要进行扩展。
  • 自动代码生成器:可以根据数据库表结构自动生成实体类、Mapper 接口、Service 和 Controller 层代码,大大提高开发效率。

二、集成 MyBatis-Plus

1. 引入依赖

在 pom.xml 文件中引入 MyBatis-Plus 的依赖:

<dependencies>
    <!-- MyBatis-Plus Starter for Spring Boot -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.4.1</version>
    </dependency>

    <!-- MySQL 数据库驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
</dependencies>

2. 配置数据库连接

在 application.yml 文件中配置数据库连接信息:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mydatabase?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
    username: root
    password: yourpassword
    driver-class-name: com.mysql.cj.jdbc.Driver

3. 启动类配置

在 Spring Boot 的启动类中,需要添加 @MapperScan 注解,指定 Mapper 接口所在的包。

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

@SpringBootApplication
@MapperScan("com.example.demo.mapper") // 扫描 Mapper 接口
public class MyBatisPlusDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyBatisPlusDemoApplication.class, args);
    }
}

三、实体类定义

首先,我们需要定义实体类,它对应数据库中的表结构。MyBatis-Plus 提供了自动生成主键的注解 @TableId,并且支持多种主键生成策略。

package com.example.demo.model;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

@Data
@TableName("users") // 对应数据库中的表名
public class User {
    @TableId(type = IdType.AUTO) // 主键自增
    private Long id;
    private String name;
    private String email;
}
  • @TableName:指定实体类对应的数据库表名。
  • @TableId:指定主键,type = IdType.AUTO 表示主键自增。

四、Mapper 接口

MyBatis-Plus 提供了通用的 BaseMapper<T> 接口,用户只需继承 BaseMapper,就可以自动拥有常见的 CRUD 操作,无需再手动编写 SQL。

package com.example.demo.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.model.User;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper extends BaseMapper<User> {
    // 这里不需要定义方法,BaseMapper 已经提供了常用的 CRUD 操作
}

BaseMapper<T> 中内置了大量的 CRUD 方法,开发者无需再重复编写增删改查的 SQL。

五、Service 层

为了进一步分离业务逻辑,我们可以在 Service 层使用 Mapper 进行数据库操作。通过继承 MyBatis-Plus 提供的 IService<T> 接口,我们可以轻松地获得常见的 CRUD 功能。

Service 接口:

package com.example.demo.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.example.demo.model.User;

public interface UserService extends IService<User> {
}

Service 实现类:

package com.example.demo.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.demo.mapper.UserMapper;
import com.example.demo.model.User;
import com.example.demo.service.UserService;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    // 这里无需编写额外代码,通用 CRUD 功能已经由 ServiceImpl 提供
}

通过继承 ServiceImpl,我们可以快速获得 CRUD 的操作,无需手动实现。

六、Controller 层

在控制器中,可以调用 Service 层的方法来处理 HTTP 请求。例如,我们可以实现用户的增删改查操作。

package com.example.demo.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.demo.model.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("/users")
public class UserController {

    @Autowired
    private UserService userService;

    // 查询所有用户
    @GetMapping
    public List<User> getAllUsers() {
        return userService.list();
    }

    // 根据 ID 查询用户
    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        return userService.getById(id);
    }

    // 添加新用户
    @PostMapping
    public String addUser(@RequestBody User user) {
        userService.save(user);
        return "用户添加成功";
    }

    // 更新用户
    @PutMapping("/{id}")
    public String updateUser(@PathVariable Long id, @RequestBody User user) {
        user.setId(id);
        userService.updateById(user);
        return "用户更新成功";
    }

    // 删除用户
    @DeleteMapping("/{id}")
    public String deleteUser(@PathVariable Long id) {
        userService.removeById(id);
        return "用户删除成功";
    }
}

七、通用 CRUD 方法

MyBatis-Plus 内置了一系列通用 CRUD 方法,这些方法被 BaseMapper 和 IService 提供。以下是常用的 CRUD 方法:

1. BaseMapper 通用方法

  • int insert(T entity):插入一条记录。
  • int deleteById(Serializable id):根据 ID 删除记录。
  • int updateById(T entity):根据 ID 更新记录。
  • T selectById(Serializable id):根据 ID 查询记录。
  • List<T> selectList(Wrapper<T> queryWrapper):查询所有记录。

2. IService 通用方法

  • boolean save(T entity):保存或新增记录。
  • boolean saveOrUpdate(T entity):保存或更新记录。
  • boolean removeById(Serializable id):根据 ID 删除记录。
  • T getById(Serializable id):根据 ID 查询记录。
  • List<T> list():查询所有记录。
  • boolean updateById(T entity):根据 ID 更新记录。

八、条件构造器

MyBatis-Plus 提供了强大的 条件构造器,可以通过 QueryWrapper 和 UpdateWrapper 灵活地构建查询条件,避免手动拼接 SQL 语句。

示例:根据条件查询

@GetMapping("/search")
public List<User> searchUsers(@RequestParam String name, @RequestParam String email) {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.like("name", name).eq("email", email);
    return userService.list(queryWrapper);
}

示例:根据条件更新

@PutMapping("/update")
public String updateUserByCondition(@RequestBody User user) {
    UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
    updateWrapper.eq("email", user.getEmail());
    userService.update(user, updateWrapper);
    return "用户更新成功";
}

通过条件构造器,MyBatis-Plus 提供了链式操作来实现复杂的条件查询和更新,大大简化了 SQL 拼接的工作。

九、分页查询

MyBatis-Plus 通过分页插件支持数据库级别的分页查询,开发者无需再手动编写分页逻辑。

添加分页插件

首先,在 Spring Boot 配置类中添加分页插件:

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import

 org.springframework.context.annotation.Configuration;

@Configuration
public class MyBatisPlusConfig {

    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }
}

使用分页查询

@GetMapping("/page")
public IPage<User> getUserPage(@RequestParam int pageNo, @RequestParam int pageSize) {
    Page<User> page = new Page<>(pageNo, pageSize);
    return userService.page(page);
}

MyBatis-Plus 自动处理分页参数,并返回分页结果。

十、总结

MyBatis-Plus 极大地简化了 MyBatis 的使用,通过提供通用 CRUD 方法、分页插件、条件构造器等功能,大大减少了样板代码的编写。在实际开发中,MyBatis-Plus 提供了高效的开发体验,适合在多种场景下快速实现数据库操作。

到此这篇关于MyBatis-Plus通用CRUD操作的实现的文章就介绍到这了,更多相关MyBatis-Plus通用CRUD操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java语言描述MD5加密工具类实例代码

    Java语言描述MD5加密工具类实例代码

    这篇文章主要介绍了Java语言描述MD5加密工具类实例代码,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • 详解netty中常用的xml编码解码器

    详解netty中常用的xml编码解码器

    这篇文章主要介绍了netty中常用的xml编码解码器,进行frame拆分可以使用XmlFrameDecoder,进行xml文件内容的解析则可以使用XmlDecoder,接下来我们会详细讲解两个decoder实现和使用,感兴趣的朋友一起看看吧
    2022-05-05
  • SpringBoot轻松整合MongoDB的全过程记录

    SpringBoot轻松整合MongoDB的全过程记录

    这篇文章主要给大家介绍了关于SpringBoot轻松整合MongoDB的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Java对接ansible自动运维化平台方式

    Java对接ansible自动运维化平台方式

    这篇文章主要介绍了Java对接ansible自动运维化平台方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • 浅谈java随机数的陷阱

    浅谈java随机数的陷阱

    这篇文章主要介绍了浅谈java随机数的陷阱,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Java8 Comparator源码演示及解析

    Java8 Comparator源码演示及解析

    这篇文章主要介绍了Java8 Comparator源码演示及解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • springboot学习笔记之 profile多环境配置切换的实现方式

    springboot学习笔记之 profile多环境配置切换的实现方式

    这篇文章主要介绍了springboot profile多环境配置切换的实现方式,本文给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-07-07
  • 解决Java中的强制类型转换和二进制表示问题

    解决Java中的强制类型转换和二进制表示问题

    这篇文章主要介绍了解决Java中的强制类型转换和二进制表示问题,需要的朋友可以参考下
    2019-05-05
  • Spring事件监听机制ApplicationEvent方式

    Spring事件监听机制ApplicationEvent方式

    这篇文章主要介绍了Spring事件监听机制ApplicationEvent方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Feign 使用HttpClient和OkHttp方式

    Feign 使用HttpClient和OkHttp方式

    这篇文章主要介绍了Feign 使用HttpClient和OkHttp方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10

最新评论