资讯详情

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

概述

MybatisPlus是国产第三方插件, 它包装了许多常用的CURDapi,我们没有写作mapper.xml本文介绍了重复劳动的基本整合SpringBoot和基本用法。

引入依赖

在项目中pom文件引入mybatisplusmysql驱动依赖,如下图所示

    <dependency>         <groupId>com.baomidou</groupId>         <artifactId>mybatis-plus-boot-starter</artifactId>         <version>3.5.1</version>     </dependency>      <dependency>          <groupId>mysql</groupId>          <artifactId>mysql-connector-java</artifactId>          <version>8.0.26</version>      </dependency> 

配置连接信息

在项目中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+8&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: 972479352@qq.com * 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: 972479352@qq.com * 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: 972479352@qq.com * 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增强接口,这样就可以集成了增删改查的功能了。

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: 972479352@qq.com * CreateTime: 2022/4/29 * Desc: 字典类型接口 */
@Mapper
public interface SysDictTypeMapper extends BaseMapper<SysDictType> { 
        
}

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: 972479352@qq.com * CreateTime: 2022/4/29 * Desc: 字典数据接口 */

@Mapper
public interface SysDictDataMapper extends BaseMapper<SysDictData> { 
        
}

进一步封装到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: 972479352@qq.com * CreateTime: 2022/4/29 * Desc: */

public interface SysDictDataService extends IService<SysDictData> { 
        
}

SysDictTypeService

package com.didiplus.modules.sys.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.didiplus.modules.sys.domain.SysDictType;

/** * Author: didiplus * Email: 972479352@qq.com * CreateTime: 2022/4/29 * Desc: */
public interface SysDictTypeService extends IService<SysDictType> { 
        
}

实现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: 972479352@qq.com * CreateTime: 2022/4/29 * Desc: */
@Service
public class SysDictTypeServiceImpl extends ServiceImpl<SysDictTypeMapper, SysDictType> 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: 972479352@qq.com * CreateTime: 2022/4/29 * Desc: */
@Service
public class SysDictTypeServiceImpl extends ServiceImpl<SysDictTypeMapper, SysDictType> 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: 972479352@qq.com * CreateTime: 2022/4/25 * Desc: 数据字典控制器 */
@RestController
@Api 

标签: c08连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台