首页 > 其他分享 >MyBatis-Plus的使用

MyBatis-Plus的使用

时间:2024-08-31 18:56:37浏览次数:12  
标签:private Plus 使用 MyBatis import com public

MyBatis-Plus

MyBatis-Plus

MyBatis-Plus(MP)是MyBatis的增强工具,它简化了基础的增删改查、实体映射、逻辑删除等操作,通过提供一系列自动帮手类和插件,极大地减轻了开发者的编码负担。

1. MyBatis-Plus原理概述

MyBatis-Plus的核心在于其生成的BaseMapper接口和IService接口。这些接口内部集成了众多通用方法,基于这些方法,MP能够简化常见的数据库操作。

  • BaseMapper:这是自动生成的映射器接口,它继承了Mapper<T>,提供了包括selectList, insert, deleteById, updateById等常用CRUD方法。
  • IService:它扩展了BaseMapper<T>的API,提供更高级别的服务方法,如分页查询、基于条件的查询等。

MP实现这些高级功能的背后涉及到反射、动态代理、元注解、SQL解析等多个技术点,简化了开发者对SQL语句的手动编写过程。

2. 动手实践
2.1 环境搭建

首先,需要在Spring Boot项目中添加MyBatis-Plus的依赖:

<!-- MyBatis Plus -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>${mybatis-plus.version}</version>
</dependency>

<!-- MyBatis Plus 核心API -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-core</artifactId>
    <version>${mybatis-plus.version}</version>
</dependency>

配置数据库连接:

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test
    username: username
    password: password
2.2 实体类与Mapper接口

有一个User实体类:

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

@TableName("t_user")
@Data
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

然后,定义UserMapper接口:

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;

@Repository
public interface UserMapper extends BaseMapper<User> {
}
2.3 服务层实现

创建UserService实现IService<User>接口,用于处理业务逻辑:

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
    // Implementation
}
2.4 控制器层

在控制器层调用UserService方法:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("/users")
    public List<User> getUsers() {
        return userService.list();
    }
}
3. 高级功能与优化

MyBatis-Plus还提供了许多高级功能,如多条件查询、逻辑删除、字段级填充等。通过Wrapper类可以构建复杂的查询条件;使用@TableLogic注解,可以实现逻辑删除;@TableField(fill = FieldFill.INSERT)注解用于字段自动填充。

3.1 复杂查询条件构造:Wrapper类

在MyBatis-Plus中,Wrapper类提供了一种灵活的方式,可以构建复杂的SQL查询条件。下面是一个使用QueryWrapper组合查询条件的示例:

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;

List<User> users = userService.list(new QueryWrapper<User>()
        .eq("age", 25)
        .gt("score", 80)
        .orderByDesc("score"));

在这个例子中,根据agescore字段来筛选用户,并按score降序排列。

3.2 逻辑删除

逻辑删除是MyBatis-Plus的一个强大特性,它可以避免直接从数据库中永久移除数据。要在实体类中启用逻辑删除,需要进行以下配置:

@Entity
@Table(name = "t_user", schema = "...")
@IdClass(User.class)
@TableName("t_user")
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class User {

    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    
    @TableLogic
    private Boolean deleted;
    
    // getters and setters...
}

然后在Mapper或Service中使用删除方法时,需要指定逻辑删除的处理:

// 在serviceImpl中覆盖删除方法以使用逻辑删除
public boolean removeById(Serializable id) {
    return removeByIds(Collections.singletonList(id), true);
}

public boolean removeByIds(Collection<? extends Serializable> idList) {
    return removeByIds(idList, true);
}

private boolean removeByIds(Collection<? extends Serializable> idList, boolean deleted) {
    UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
    updateWrapper.in("id", idList).set("deleted", deleted);
    return userMapper.update(null, updateWrapper) > 0;
}
3.3 字段填充

字段自动填充是MyBatis-Plus的又一个实用功能。可以使用@TableField注解中的fill = FieldFill.INSERTfill = FieldFill.INSERT_UPDATE来指定在插入时或更新时填充字段。

有这样三个需要自动填充的字段:

// 创建时间,在插入时填充
@TableField(fill = FieldFill.INSERT)
private Date createTime;

// 更新时间,在插入和更新时都填充
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;

// 是否删除,默认值是false
@TableField(fill = FieldFill.INSERT, defaultValue = "false")
private Boolean deletedFlag;
3.4 分页和排序

MyBatis-Plus提供了一个方便的分页查询方法。接下来是一个获取第一页前三条记录的示例:

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

Page<User> page = new Page<>(1, 3); // page是第1页,每页大小是3
IPage<User> userPage = userService.page(page, new QueryWrapper<User>().orderByDesc("age"));

然后,可以通过userPage对象访问总页数、总记录数等信息。

3.5. 全局拦截器

全局拦截器可用于处理常见的业务需求,如添加公共的查询条件或修改查询结果。假设想在所有查询操作中都添加逻辑删除的过滤条件:

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;

@Interceptor
public class LogicDeleteInterceptor implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject, "deleted", Boolean.class, false);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        // 无需加入该逻辑删除的字段
    }
}

然后,将该拦截器添加到MyBatisPlus的全局配置中:

@Bean
public ConfigurationCustomizer configurationCustomizer() {
    return configuration -> configuration.addInterceptor(new LogicDeleteInterceptor());
}

标签:private,Plus,使用,MyBatis,import,com,public
From: https://blog.csdn.net/weixin_42564451/article/details/141756627

相关文章

  • Clocking Wizard IP使用
    简介本章节主要针对XILINX的PLLIP做详细介绍,并通过AXILite总线对时钟在线配置。VIVADO界面选择clockingwizardIP具体介绍如下:PLLIP介绍clockingoption界面1、MMCM和PLL选择;        (1)PLL:为锁相回路或锁相环,用来统一整合时钟信号,使高频器件正常工作,如内存......
  • 动态链接库的生成和使用(二)
    1、编写源文件和头文件Demo目录下创建testso文件夹,在下面创建test.cpp、test.h和Makefile文件test.cpp:#include<stdio.h>#include<stdlib.h>extern"C"doublecalc_pi(){ doublex=0; doubley=0; doublepi=0; intnum=0; intiter=0; constinttry_t......
  • 点云库使用场景以及编译和使用实例
    1点云库概述与应用场景##什么是点云库?点云库是一套专门用于处理三维点云数据的软件工具和算法集合。点云是由大量的三维坐标点组成的数据集,通常用来表示物体或环境的表面。最知名的点云库是开源的PCL(PointCloudLibrary),但还有其他库如Open3D,PDAL(PointDataAbstracti......
  • [postgres]使用pgbench进行基准测试
    前言pgbench是一种在postgres上进行基准测试的简单程序,一般安装后就会自带。pgbench可以再并发的数据库绘画中一遍遍地进行相同序列的SQL语句,并且计算平均事务率。测试准备既然要测postgres,肯定要先有个postgres。安装过程略过。一些环境信息:postgres版本:15.3,安装完成后默认......
  • 20240831_174427 scratch 自制积木的基本使用
    20240903_215445scratch认识自制积木自制积木是自定义的一个积木它的功能由自己决定20240903_225445scratch定义普通自制积木使用位置自制积木模块制作新的积木定义积木使用积木20240903_235445scratch定义带一参数的自制积木需求定义一个祝某某生日快......
  • HPC应用&生命科学领域软件AutoDock-GPU详细安装使用教程
    目录应用简介编译安装测试算例及提交脚本应用简介AutoDock-GPU是基于OpenCL的GPU加速版本分子对接软件autodock-4.2.6。可以支持DCU已经其他支持OpenCL的设备,如CPU和NvidiaGPU等。github源码: https://github.com/ccsb-scripps/AutoDock-GPU编译安装AutoDock-GPU......
  • MotionPlus 安装指南
    介绍MotionPlus是一款用于监控摄像头的视频信号,并检测运动的应用程序,是对原有Motion软件的升级版本。它支持多种设备,如网络摄像头、V4L2网络摄像头和视频采集卡等。MotionPlus提供多种功能,包括录制视频、保存图片、实时视频流观看、调用脚本、日志记录、以及运动检测等功能。安......
  • Linux Debian12使用flameshot或gnome-screenshot和ImageMagick垂直合并多张图片后组成
    在发布博客,有时需要滚动截长图,虽然在windows系统有滚动截长图的工具,例如:FastStoneCapture等,但是LinuxDebian系统,这种滚动截长图的工具没有找到合适的。经过自己筛选验证,发现LinuxDebian12使用flameshot或gnome-screenshot截取多张图片,再使用和ImageMagick图像处理工具进行垂直合......
  • Clion 使用
    1.使用CLion进行ROS开发安装基本的ROS环境ROS环境的安装请参考安装ROS。安装CLion下载CLionLinux的下载地址如下:CLion解压CLion将下载的CLion复制到/opt目录下(你可以解压到适合自己的文件夹,只要保证后续使用的路径一致即可),然后在这个目录下使用终端将其解压,命令如......
  • 使用广播星历计算卫星坐标(Python)
    前言本代码为GNSS课程设计代码,仅供参考,使用的计算方法与公式均来源于王坚主编的《卫星定位原理与应用(第二版)》。本代码计算结果可以通过下载精密星历进行比照,误差在1-10m左右。实现功能:读取卫星广播星历,并将其计算为WGS-84坐标系下的坐标,每颗卫星,每15分钟输出一次。广播星历......