springboot+mybatis实现增删改查,spring mybatis增删改查

  springboot+mybatis实现增删改查,spring mybatis增删改查

  

目录

1.概述2.引入依赖3.配置连接信息4.新建两个表5.在项目中创建相应的实体类5.1 创建基础实体类5.2 SysDictType实体类5.3系统预测数据实体类6.创建数据访问对象(数据访问对象)继承MybatisPlus增强接口6.1系统类型映射器6.2系统数据映射器7 .进一步封装到服务层7.1 定义服务接口中的抽象方法7.2实现服务接口中的方法8.在控制层上进行增删改查操作8.1 SysDictTypeController9 .自动填充功能9.1 自定义实现类域名接收者10。分页查询10.1 添加分页插件10.2 定义分页接口10.3 实现分页接口10.4 控制层调用10.5 体验效果

 

  

1.概述

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

 

  

2.引入依赖

在项目中砰的一声文件引入mybatisplus和关系型数据库驱动依赖,如下

 

  依赖关系groupIdcom.baomidou/groupId artifactId my batis-plus-boot-starter/artifactId版本3 .5 .1/版本/依赖关系组id MySQL/groupId artifactId MySQL-connector-Java/artifactId版本8 .0 .26/版本/依赖关系

  

3.配置连接信息

在项目中应用程序.格式文件中配置数据库的连接信息

 

  spring :数据源:驱动程序类名称: com。MySQL。CJ。JDBC。驱动程序URL : JDBC :我的SQL ://127。0 .0 .1:3306/didiadmin?使用unicode=true字符编码=ut F8 zerodatetimebehavior=convertToNulluseSSL=true服务器时区=GMT 8 nullcatalogmenscurent=true用户名: root密码: 123456

  

4.新建两个表

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

 

  创建表` sys _ dict _ type `(` id ` CHAR(19)characters et utf8mb 4 COLLATE utf8mb 4 _ general _ ci NOT NULL COMMENT 标识, type _ name VARCHAR(255)字符集utf8mb 4 COLLATE utf8mb 4 _ general _ ci默认空注释字典类型名称, type _ code VARCHAR(255)字符集utf8mb 4 COLLATE utf8mb 4 _ general _ ci默认空注释字典类型标识, description VARCHAR(255)字符集utf8mb 4 COLLATE utf8mb 4 _ general _ ci默认空注释字典类型描述,`启用` CHAR (1)字符集utf8mb 4 COLLATE utf8mb 4 _ general _ ci默认空注释是否启用, create _ by CHAR(19)字符集

   utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 创建人ID, `create_name` CHAR (19) CHARACTERSET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 创建人名称, `create_time` datetime DEFAULT NULL COMMENT 创建时间, `update_by` CHAR (19) CHARACTERSET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 修改人ID, `update_name` CHAR (19) CHARACTERSET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 修改人名称, `update_time` datetime DEFAULT NULL COMMENT 修改时间, `remark` VARCHAR (255) CHARACTERSET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 备注, PRIMARY KEY (`id`) USING BTREE) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMICCREATE TABLE `sys_dict_data` (`data_id` CHAR (19) CHARACTERSET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 标识,`data_label` CHAR (19) CHARACTERSET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 字典标签, `data_value` CHAR (20) CHARACTERSET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 字典值, `type_code` CHAR (20) CHARACTERSET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 所属类型, `is_default` CHAR (1) CHARACTERSET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 是否默认, `update_by` CHAR (19) CHARACTERSET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 修改人ID, `update_name` CHAR (19) CHARACTERSET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 修改人名称, `update_time` datetime DEFAULT NULL COMMENT 修改时间, `create_by` VARCHAR (255) CHARACTERSET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 创建人ID, `create_name` CHAR (19) CHARACTERSET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 创建人名称, `create_time` datetime DEFAULT NULL COMMENT 创建时间, `remark` VARCHAR (255) CHARACTERSET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT 备注, `enable` CHAR (1) CHARACTERSET 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

 

  

5.在项目中创建相应的实体类

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

 

  

 

  

5.1 创建基础实体类

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: 基 础 实 体 类*/@Datapublic 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中的一个注解,后面会讲解到的。

 

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

  

 

  

5.2 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;}

 

  

5.3SysDictData实体类

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: 字典值领域模型 */@Datapublic 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;}

 

  

6.创建DAO继承MybatisPlus增强接口

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

 

  

 

  

6.1 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: 字典类型接口 */@Mapperpublic interface SysDictTypeMapper extends BaseMapper<SysDictType> {}

 

  

6.2 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: 字典数据接口 */@Mapperpublic interface SysDictDataMapper extends BaseMapper<SysDictData> {}

 

  

7.进一步封装到Service层

 

  

7.1 定义Service接口中的抽象方法

1.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> {}

2.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> {}

 

  

7.2实现Service接口中的方法

1.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: */@Servicepublic class SysDictTypeServiceImpl extends ServiceImpl<SysDictTypeMapper, SysDictType> implements SysDictTypeService {}

2.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: */@Servicepublic class SysDictTypeServiceImpl extends ServiceImpl<SysDictTypeMapper, SysDictType> implements SysDictTypeService {}

 

  

8.在控制层上进行增删改查操作

 

  

8.1 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(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)? "删除成功":"删除失败"; }}

体验效果

 

  新增数据

  

 

  修改数据

  

 

  删除数据

  

 

  

 

  

9.自动填充功能

原理:

 

  实现元对象处理器接口:com.baomidou.mybatisplus.core.handlers.MetaObjectHandler注解填充字段@TableField(.. fill = FieldFill.INSERT)生成器策略部分也可以配置!

 

  

9.1 自定义实现类 DomainInterceptor

package 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: 972479352@qq.com * 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()); }}

 

  

10.分页查询

 

  

10.1 添加分页插件

package 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: 972479352@qq.com * CreateTime: 2022/5/4 * Desc: mybatis-plus分页插件 */@Configurationpublic class MyBatisPlusConfig { /** * mybatis-plus分页插件 */ @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; }}

 

  

10.2 定义分页接口

package 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: 972479352@qq.com * CreateTime: 2022/4/29 * Desc: 数据字典类型服务类 */public interface SysDictTypeService extends IService<SysDictType> { IPage<SysDictType> page(PageDomain pageDomain);}

 

  

10.3 实现分页接口

package 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: 972479352@qq.com * CreateTime: 2022/4/29 * Desc: */@Servicepublic class SysDictTypeServiceImpl extends ServiceImpl<SysDictTypeMapper, SysDictType> implements SysDictTypeService { @Resource SysDictTypeMapper sysDictTypeMapper; @Override public IPage<SysDictType> page(PageDomain pageDomain) { IPage<SysDictType> page = new Page<>(pageDomain.getPage(),pageDomain.getLimit()); return sysDictTypeMapper.selectPage(page,null); }}

 

  

10.4 控制层调用

@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: 972479352@qq.com * CreateTime: 2022/5/4 * Desc: 分 页 参 数 封 装 */@Datapublic class PageDomain { /** * 当前页 */ private Integer page; /** * 每页数量 */ private Integer limit;}

 

  

10.5 体验效果

 

  以上就是SpringBoot整合MybatisPlus实现增删改查功能的详细内容,更多关于SpringBoot MybatisPlus增删改查的资料请关注盛行IT其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: