SpringBoot整合MybatisPlus基本的增删改查,保姆级教程

您所在的位置:网站首页 小米5s解锁bl SpringBoot整合MybatisPlus基本的增删改查,保姆级教程

SpringBoot整合MybatisPlus基本的增删改查,保姆级教程

2024-07-17 10:10:10| 来源: 网络整理| 查看: 265

概述

MybatisPlus是国产的第三方插件, 它封装了许多常用的CURDapi,免去了我们写mapper.xml的重复劳动,这里介绍了基本的整合SpringBoot和基础用法。

引入依赖

在项目中pom文件引入mybatisplus和mysql驱动依赖,如下图

com.baomidou mybatis-plus-boot-starter 3.5.1 mysql mysql-connector-java 8.0.26 配置连接信息

在项目中application.yaml文件中配置数据库的连接信息

spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/didiadmin?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true username: root password: 123456 新建两个表

本案例通过一个完整的业务流程来介绍如何使用mybatispuls,首先在数据库中新建两个表,一个是字典类型表sys_dict_type和一个字典数据表sys_dict_data

CREATE TABLE `sys_dict_type` ( `id` CHAR (19) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '标识', `type_name` VARCHAR (255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '字典类型名称', `type_code` VARCHAR (255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '字典类型标识', `description` VARCHAR (255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '字典类型描述', `enable` CHAR (1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '是否启用', `create_by` CHAR (19) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人ID', `create_name` CHAR (19) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人名称', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_by` CHAR (19) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '修改人ID', `update_name` CHAR (19) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '修改人名称', `update_time` datetime DEFAULT NULL COMMENT '修改时间', `remark` VARCHAR (255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`) USING BTREE ) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC CREATE TABLE `sys_dict_data` ( `data_id` CHAR (19) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '标识', `data_label` CHAR (19) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '字典标签', `data_value` CHAR (20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '字典值', `type_code` CHAR (20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '所属类型', `is_default` CHAR (1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '是否默认', `update_by` CHAR (19) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '修改人ID', `update_name` CHAR (19) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '修改人名称', `update_time` datetime DEFAULT NULL COMMENT '修改时间', `create_by` VARCHAR (255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人ID', `create_name` CHAR (19) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人名称', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `remark` VARCHAR (255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注', `enable` CHAR (1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '是否启用', PRIMARY KEY (`data_id`) USING BTREE ) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC 在项目中创建相应的实体类

通过观察SQL语句发现两个表中有很多相同的字段,所有我们把相同的字段抽离出来,放到一个基础的实体类中,其他实体类通过集成方式获取公共的字段。

创建基础实体类 package com.didiplus.common.base; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import lombok.Data; import java.io.Serializable; import java.time.LocalDateTime; /** * Author: didiplus * Email: [email protected] * CreateTime: 2022/4/29 * Desc: 基 础 实 体 类 */ @Data public class BaseDomain implements Serializable { /** * 创建时间 */ @TableField(value = "create_time", fill = FieldFill.INSERT) private LocalDateTime createTime; /** * 创建人 */ @TableField(value = "create_by", fill = FieldFill.INSERT) private String createBy; /** * 创建人名称 */ @TableField(value = "create_name", fill = FieldFill.INSERT) private String createName; /** * 修改时间 */ @TableField(value = "update_time", fill = FieldFill.UPDATE) private LocalDateTime updateTime; /** * 修改人 */ @TableField(value = "update_by", fill = FieldFill.UPDATE) private String updateBy; /** * 修改人名称 */ @TableField(value = "update_name", fill = FieldFill.UPDATE) private String updateName; /** * 备注 */ private String remark; }

@TableField 是mybatisplus中的一个注解,后面会讲解到的。

基础实体类创建好了,接着我们把剩下的两个实体类也一同创建吧。

SysDictType实体类 package com.didiplus.modules.sys.domain; import com.didiplus.common.base.BaseDomain; import com.didiplus.common.base.ValidGroup; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.*; /** * Author: didiplus * Email: [email protected] * CreateTime: 2022/4/25 * Desc: 字典类型领域模型 */ @Data @ApiModel(value = "字典类型") public class SysDictType extends BaseDomain { /** * 标识 */ @Null(groups = ValidGroup.Crud.Create.class) @NotNull(groups = ValidGroup.Crud.Update.class,message = "字典ID不能为空") @ApiModelProperty("ID") private String id; /** * 字典名称 */ @NotBlank(message = "字典名称必填项") @ApiModelProperty(value = "字典名称",example = "用户ID") private String typeName; /** * 字典类型 */ @NotBlank(message = "字典编码不能为空") @ApiModelProperty(value = "字典编码") private String typeCode; /** * 字典描述 */ @ApiModelProperty(value = "字典描述") private String description; /** * 字典可用状态 */ @NotBlank(message = "字典状态不能为空") @ApiModelProperty(value = "字典状态") private Boolean enable; } SysDictData实体类 package com.didiplus.modules.sys.domain; import com.baomidou.mybatisplus.annotation.TableField; import com.didiplus.common.base.BaseDomain; import com.didiplus.common.base.ValidGroup; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import javax.validation.constraints.Null; /** * Author: didiplus * Email: [email protected] * CreateTime: 2022/4/29 * Desc: 字典值领域模型 */ @Data public class SysDictData extends BaseDomain { /** * id 编号 */ @Null(groups = ValidGroup.Crud.Create.class) @NotNull(groups = ValidGroup.Crud.Update.class,message = "字典数据ID不能为空") @ApiModelProperty("ID") @TableField(value = "data_id") private String dataId; /** * 字典显示 */ @NotBlank(message = "字典数据名称必填项") @ApiModelProperty(value = "字典数据名称") private String dataLabel; /** * 字典值 */ @NotBlank(message = "字典数据值不能为空") @ApiModelProperty(value = "字典数据值") private String dataValue; /** * 字典类型 */ @ApiModelProperty(value = "字典编码") @NotBlank(message = "字典数据值不能为空") private String typeCode; /** * 是否为默认 */ @ApiModelProperty(value = "字典编码") @NotBlank(message = "字典数据值不能为空") private String isDefault; /** * 是否启用 */ @NotBlank(message = "字典状态不能为空") @ApiModelProperty(value = "字典数据状态") private Boolean enable; } 创建DAO继承MybatisPlus增强接口

为两个实体类中分别添加DAO继承MybatisPlus增强接口,这样就可以集成了增删改查的功能了。

SysDictTypeMapper package com.didiplus.modules.sys.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.didiplus.modules.sys.domain.SysDictType; import org.apache.ibatis.annotations.Mapper; /** * Author: didiplus * Email: [email protected] * CreateTime: 2022/4/29 * Desc: 字典类型接口 */ @Mapper public interface SysDictTypeMapper extends BaseMapper { } SysDictDataMapper package com.didiplus.modules.sys.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.didiplus.modules.sys.domain.SysDictData; import org.apache.ibatis.annotations.Mapper; /** * Author: didiplus * Email: [email protected] * CreateTime: 2022/4/29 * Desc: 字典数据接口 */ @Mapper public interface SysDictDataMapper extends BaseMapper { } 进一步封装到Service层 定义Service接口中的抽象方法 SysDictDataService package com.didiplus.modules.sys.service; import com.baomidou.mybatisplus.extension.service.IService; import com.didiplus.modules.sys.domain.SysDictData; /** * Author: didiplus * Email: [email protected] * CreateTime: 2022/4/29 * Desc: */ public interface SysDictDataService extends IService { } SysDictTypeService package com.didiplus.modules.sys.service; import com.baomidou.mybatisplus.extension.service.IService; import com.didiplus.modules.sys.domain.SysDictType; /** * Author: didiplus * Email: [email protected] * CreateTime: 2022/4/29 * Desc: */ public interface SysDictTypeService extends IService { } 实现Service接口中的方法 SysDictTypeServiceImpl package com.didiplus.modules.sys.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.didiplus.modules.sys.domain.SysDictType; import com.didiplus.modules.sys.mapper.SysDictTypeMapper; import com.didiplus.modules.sys.service.SysDictTypeService; import org.springframework.stereotype.Service; /** * Author: didiplus * Email: [email protected] * CreateTime: 2022/4/29 * Desc: */ @Service public class SysDictTypeServiceImpl extends ServiceImpl implements SysDictTypeService { } SysDictDataServiceImpl package com.didiplus.modules.sys.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.didiplus.modules.sys.domain.SysDictType; import com.didiplus.modules.sys.mapper.SysDictTypeMapper; import com.didiplus.modules.sys.service.SysDictTypeService; import org.springframework.stereotype.Service; /** * Author: didiplus * Email: [email protected] * CreateTime: 2022/4/29 * Desc: */ @Service public class SysDictTypeServiceImpl extends ServiceImpl implements SysDictTypeService { } 在控制层上进行增删改查操作 SysDictTypeController package com.didiplus.modules.sys.controller; import com.didiplus.common.base.ValidGroup; import com.didiplus.modules.sys.domain.SysDictType; import com.didiplus.modules.sys.service.SysDictTypeService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.parameters.RequestBody; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; /** * Author: didiplus * Email: [email protected] * CreateTime: 2022/4/25 * Desc: 数据字典控制器 */ @RestController @Api(tags = "数据字典") @RequestMapping("/api/sys/dictType") public class SysDictTypeController { @Autowired SysDictTypeService sysDictTypeService; @ApiOperation("字典添加") @PostMapping("/add") public String add(@Validated(value = ValidGroup.Crud.Create.class) @RequestBody SysDictType sysDictType) { return sysDictTypeService.save(sysDictType)? "添加成功":"添加失败"; } @ApiOperation("字典修改") @PutMapping("/edit") public String edit(@Validated(value = ValidGroup.Crud.Update.class) @RequestBody SysDictType sysDictType) { return sysDictTypeService.updateById(sysDictType)? "修改成功":"修改失败"; } @ApiOperation("字典删除") @DeleteMapping("/del/{id}") public String del( @PathVariable String id) { return sysDictTypeService.removeById(id)? "删除成功":"删除失败"; } } 体验效果 新增数据

修改数据

image.pngimage.png

删除数据

自动填充功能

原理:

实现元对象处理器接口:com.baomidou.mybatisplus.core.handlers.MetaObjectHandler 注解填充字段 @TableField(.. fill = FieldFill.INSERT)生成器策略部分也可以配置! 自定义实现类 DomainInterceptor ```javapackage com.didiplus.common.web.interceptor;

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

import java.time.LocalDateTime;

/**

Author: didiplus Email: [email protected] CreateTime: 2022/5/4

Desc: 字 段 填 充 拦 截 器*/@Componentpublic class DomainInterceptor implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) {

createField(metaObject);

}

@Override public void updateFill(MetaObject metaObject) {

updateField(metaObject);

}

/**

@Field 创建时间

*/public void createField(MetaObject metaObject){ this.strictInsertFill(metaObject,"createTime", LocalDateTime.class,LocalDateTime.now());}

/**

@Field 修改时间 */public void updateField(MetaObject metaObject) { this.strictUpdateFill(metaObject,"updateTime",LocalDateTime.class,LocalDateTime.now());}}```分页查询 添加分页插件 ```javapackage com.didiplus.common.config;

import com.baomidou.mybatisplus.annotation.DbType;import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;

/**

Author: didiplus Email: [email protected] CreateTime: 2022/5/4

Desc: mybatis-plus分页插件*/@Configurationpublic class MyBatisPlusConfig {

/**

mybatis-plus分页插件*/@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor;}}```定义分页接口 ```javapackage com.didiplus.modules.sys.service;

import com.baomidou.mybatisplus.core.metadata.IPage;import com.baomidou.mybatisplus.extension.service.IService;import com.didiplus.common.web.domain.PageDomain;import com.didiplus.modules.sys.domain.SysDictType;

/**

Author: didiplus Email: [email protected] CreateTime: 2022/4/29

Desc: 数据字典类型服务类*/public interface SysDictTypeService extends IService {

IPage page(PageDomain pageDomain);}```

实现分页接口

```javapackage com.didiplus.modules.sys.service.impl;

import com.baomidou.mybatisplus.core.metadata.IPage;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;import com.didiplus.common.web.domain.PageDomain;import com.didiplus.modules.sys.domain.SysDictType;import com.didiplus.modules.sys.mapper.SysDictTypeMapper;import com.didiplus.modules.sys.service.SysDictTypeService;import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**

Author: didiplus Email: [email protected] CreateTime: 2022/4/29

Desc:*/@Servicepublic class SysDictTypeServiceImpl extends ServiceImpl implements SysDictTypeService { @Resource SysDictTypeMapper sysDictTypeMapper; @Override public IPage page(PageDomain pageDomain) {

IPage page = new Page(pageDomain.getPage(),pageDomain.getLimit()); return sysDictTypeMapper.selectPage(page,null);

}}

## 控制层调用 ```java @RestController @Api(tags = "数据字典") @RequestMapping("/api/sys/dictType") public class SysDictTypeController { @Autowired SysDictTypeService sysDictTypeService; @ApiOperation("字典分页查询") @GetMapping public IPage list(@RequestBody PageDomain pageDomain){ return sysDictTypeService.page(pageDomain); } }

PageDomain定义了分页接收的两个参数

PageDomain类

package com.didiplus.common.web.domain; import lombok.Data; /** * Author: didiplus * Email: [email protected] * CreateTime: 2022/5/4 * Desc: 分 页 参 数 封 装 */ @Data public class PageDomain { /** * 当前页 */ private Integer page; /** * 每页数量 */ private Integer limit; } 体验效果

下一篇,我们继续来学习mybatisPlus的代码生成器



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


    图片新闻

    实验室药品柜的特性有哪些
    实验室药品柜是实验室家具的重要组成部分之一,主要
    小学科学实验中有哪些教学
    计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
    实验室各种仪器原理动图讲
    1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
    高中化学常见仪器及实验装
    1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
    微生物操作主要设备和器具
    今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
    浅谈通风柜使用基本常识
     众所周知,通风柜功能中最主要的就是排气功能。在

    专题文章

      CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭