MybatisPlus是国产的第三方插件,它封装了许多常用的CURDapi,免去了我们写mapper。xml的重复劳动,这里介绍了基本的整合SpringBoot和基础用法。20引入依赖 在项目中pom文件引入mybatisplus和mysql驱动依赖,如下图dependencygroupIdcom。baomidougroupIdmybatisplusbootstarterartifactIdversion3。5。1versiondependencydependencygroupIdmysqlgroupIdmysqlconnectorjavaartifactIdversion8。0。26versiondependency30配置连接信息 在项目中application。yaml文件中配置数据库的连接信息spring:datasource:driverclassname:com。mysql。cj。jdbc。Driverurl:jdbc:mysql:127。0。0。1:3306didiadmin?useUnicodetruecharacterEncodingutf8zeroDateTimeBehaviorconvertToNulluseSSLtrueserverTimezoneGMT2B8nullCatalogMeansCurrenttrueusername:rootpassword:12345640新建两个表 本案例通过一个完整的业务流程来介绍如何使用mybatispuls,首先在数据库中新建两个表,一个是字典类型表sysdicttype和一个字典数据表sysdictdataCREATETABLEsysdicttype(idCHAR(19)CHARACTERSETutf8mb4COLLATEutf8mb4generalciNOTNULLCOMMENT标识,typenameVARCHAR(255)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT字典类型名称,typecodeVARCHAR(255)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT字典类型标识,descriptionVARCHAR(255)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT字典类型描述,enableCHAR(1)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT是否启用,createbyCHAR(19)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT创建人ID,createnameCHAR(19)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT创建人名称,createtimedatetimeDEFAULTNULLCOMMENT创建时间,updatebyCHAR(19)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT修改人ID,updatenameCHAR(19)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT修改人名称,updatetimedatetimeDEFAULTNULLCOMMENT修改时间,remarkVARCHAR(255)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT备注,PRIMARYKEY(id)USINGBTREE)ENGINEINNODBDEFAULTCHARSETutf8mb4COLLATEutf8mb4generalciROWFORMATDYNAMICCREATETABLEsysdictdata(dataidCHAR(19)CHARACTERSETutf8mb4COLLATEutf8mb4generalciNOTNULLCOMMENT标识,datalabelCHAR(19)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT字典标签,datavalueCHAR(20)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT字典值,typecodeCHAR(20)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT所属类型,isdefaultCHAR(1)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT是否默认,updatebyCHAR(19)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT修改人ID,updatenameCHAR(19)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT修改人名称,updatetimedatetimeDEFAULTNULLCOMMENT修改时间,createbyVARCHAR(255)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT创建人ID,createnameCHAR(19)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT创建人名称,createtimedatetimeDEFAULTNULLCOMMENT创建时间,remarkVARCHAR(255)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT备注,enableCHAR(1)CHARACTERSETutf8mb4COLLATEutf8mb4generalciDEFAULTNULLCOMMENT是否启用,PRIMARYKEY(dataid)USINGBTREE)ENGINEINNODBDEFAULTCHARSETutf8mb4COLLATEutf8mb4generalciROWFORMATDYNAMIC50在项目中创建相应的实体类 通过观察SQL语句发现两个表中有很多相同的字段,所有我们把相同的字段抽离出来,放到一个基础的实体类中,其他实体类通过集成方式获取公共的字段。51创建基础实体类packagecom。didiplus。common。base;importcom。baomidou。mybatisplus。annotation。FieldFill;importcom。baomidou。mybatisplus。annotation。TableField;importlombok。Data;importjava。io。Serializable;importjava。time。LocalDateTime;Author:didiplusEmail:972479352qq。comCreateTime:2022429Desc:基础实体类DatapublicclassBaseDomainimplementsSerializable{创建时间TableField(valuecreatetime,fillFieldFill。INSERT)privateLocalDateTimecreateTime;创建人TableField(valuecreateby,fillFieldFill。INSERT)privateStringcreateBy;创建人名称TableField(valuecreatename,fillFieldFill。INSERT)privateStringcreateName;修改时间TableField(valueupdatetime,fillFieldFill。UPDATE)privateLocalDateTimeupdateTime;修改人TableField(valueupdateby,fillFieldFill。UPDATE)privateStringupdateBy;修改人名称TableField(valueupdatename,fillFieldFill。UPDATE)privateStringupdateName;备注privateStringremark;} TableField是mybatisplus中的一个注解,后面会讲解到的。 基础实体类创建好了,接着我们把剩下的两个实体类也一同创建吧。52SysDictType实体类packagecom。didiplus。modules。sys。domain;importcom。didiplus。common。base。BaseDomain;importcom。didiplus。common。base。ValidGroup;importio。swagger。annotations。ApiModel;importio。swagger。annotations。ApiModelProperty;importlombok。Data;importjavax。validation。constraints。;Author:didiplusEmail:972479352qq。comCreateTime:2022425Desc:字典类型领域模型DataApiModel(value字典类型)publicclassSysDictTypeextendsBaseDomain{标识Null(groupsValidGroup。Crud。Create。class)NotNull(groupsValidGroup。Crud。Update。class,message字典ID不能为空)ApiModelProperty(ID)privateStringid;字典名称NotBlank(message字典名称必填项)ApiModelProperty(value字典名称,example用户ID)privateStringtypeName;字典类型NotBlank(message字典编码不能为空)ApiModelProperty(value字典编码)privateStringtypeCode;字典描述ApiModelProperty(value字典描述)privateStringdescription;字典可用状态NotBlank(message字典状态不能为空)ApiModelProperty(value字典状态)privateBooleanenable;}53SysDictData实体类packagecom。didiplus。modules。sys。domain;importcom。baomidou。mybatisplus。annotation。TableField;importcom。didiplus。common。base。BaseDomain;importcom。didiplus。common。base。ValidGroup;importio。swagger。annotations。ApiModelProperty;importlombok。Data;importjavax。validation。constraints。NotBlank;importjavax。validation。constraints。NotNull;importjavax。validation。constraints。Null;Author:didiplusEmail:972479352qq。comCreateTime:2022429Desc:字典值领域模型DatapublicclassSysDictDataextendsBaseDomain{id编号Null(groupsValidGroup。Crud。Create。class)NotNull(groupsValidGroup。Crud。Update。class,message字典数据ID不能为空)ApiModelProperty(ID)TableField(valuedataid)privateStringdataId;字典显示NotBlank(message字典数据名称必填项)ApiModelProperty(value字典数据名称)privateStringdataLabel;字典值NotBlank(message字典数据值不能为空)ApiModelProperty(value字典数据值)privateStringdataValue;字典类型ApiModelProperty(value字典编码)NotBlank(message字典数据值不能为空)privateStringtypeCode;是否为默认ApiModelProperty(value字典编码)NotBlank(message字典数据值不能为空)privateStringisDefault;是否启用NotBlank(message字典状态不能为空)ApiModelProperty(value字典数据状态)privateBooleanenable;}60创建DAO继承MybatisPlus增强接口 为两个实体类中分别添加DAO继承MybatisPlus增强接口,这样就可以集成了增删改查的功能了。61SysDictTypeMapperpackagecom。didiplus。modules。sys。mapper;importcom。baomidou。mybatisplus。core。mapper。BaseMapper;importcom。didiplus。modules。sys。domain。SysDictType;importorg。apache。ibatis。annotations。Mapper;Author:didiplusEmail:972479352qq。comCreateTime:2022429Desc:字典类型接口MapperpublicinterfaceSysDictTypeMapperextendsBaseMapperSysDictType{}62SysDictDataMapperpackagecom。didiplus。modules。sys。mapper;importcom。baomidou。mybatisplus。core。mapper。BaseMapper;importcom。didiplus。modules。sys。domain。SysDictData;importorg。apache。ibatis。annotations。Mapper;Author:didiplusEmail:972479352qq。comCreateTime:2022429Desc:字典数据接口MapperpublicinterfaceSysDictDataMapperextendsBaseMapperSysDictData{}70进一步封装到Service层71定义Service接口中的抽象方法SysDictDataServicepackagecom。didiplus。modules。sys。service;importcom。baomidou。mybatisplus。extension。service。IService;importcom。didiplus。modules。sys。domain。SysDictData;Author:didiplusEmail:972479352qq。comCreateTime:2022429Desc:publicinterfaceSysDictDataServiceextendsIServiceSysDictData{}SysDictTypeServicepackagecom。didiplus。modules。sys。service;importcom。baomidou。mybatisplus。extension。service。IService;importcom。didiplus。modules。sys。domain。SysDictType;Author:didiplusEmail:972479352qq。comCreateTime:2022429Desc:publicinterfaceSysDictTypeServiceextendsIServiceSysDictType{}72实现Service接口中的方法SysDictTypeServiceImplpackagecom。didiplus。modules。sys。service。impl;importcom。baomidou。mybatisplus。extension。service。impl。ServiceImpl;importcom。didiplus。modules。sys。domain。SysDictType;importcom。didiplus。modules。sys。mapper。SysDictTypeMapper;importcom。didiplus。modules。sys。service。SysDictTypeService;importorg。springframework。stereotype。Service;Author:didiplusEmail:972479352qq。comCreateTime:2022429Desc:ServicepublicclassSysDictTypeServiceImplextendsServiceImplSysDictTypeMapper,SysDictTypeimplementsSysDictTypeService{}SysDictDataServiceImplpackagecom。didiplus。modules。sys。service。impl;importcom。baomidou。mybatisplus。extension。service。impl。ServiceImpl;importcom。didiplus。modules。sys。domain。SysDictType;importcom。didiplus。modules。sys。mapper。SysDictTypeMapper;importcom。didiplus。modules。sys。service。SysDictTypeService;importorg。springframework。stereotype。Service;Author:didiplusEmail:972479352qq。comCreateTime:2022429Desc:ServicepublicclassSysDictTypeServiceImplextendsServiceImplSysDictTypeMapper,SysDictTypeimplementsSysDictTypeService{}80在控制层上进行增删改查操作81SysDictTypeControllerpackagecom。didiplus。modules。sys。controller;importcom。didiplus。common。base。ValidGroup;importcom。didiplus。modules。sys。domain。SysDictType;importcom。didiplus。modules。sys。service。SysDictTypeService;importio。swagger。annotations。Api;importio。swagger。annotations。ApiOperation;importio。swagger。v3。oas。annotations。parameters。RequestBody;importorg。springframework。beans。factory。annotation。Autowired;importorg。springframework。validation。annotation。Validated;importorg。springframework。web。bind。annotation。;Author:didiplusEmail:972479352qq。comCreateTime:2022425Desc:数据字典控制器RestControllerApi(tags数据字典)RequestMapping(apisysdictType)publicclassSysDictTypeController{AutowiredSysDictTypeServicesysDictTypeService;ApiOperation(字典添加)PostMapping(add)publicStringadd(Validated(valueValidGroup。Crud。Create。class)RequestBodySysDictTypesysDictType){returnsysDictTypeService。save(sysDictType)?添加成功:添加失败;}ApiOperation(字典修改)PutMapping(edit)publicStringedit(Validated(valueValidGroup。Crud。Update。class)RequestBodySysDictTypesysDictType){returnsysDictTypeService。updateById(sysDictType)?修改成功:修改失败;}ApiOperation(字典删除)DeleteMapping(del{id})publicStringdel(PathVariableStringid){returnsysDictTypeService。removeById(id)?删除成功:删除失败;}}体验效果新增数据 修改数据 删除数据 90自动填充功能 原理:实现元对象处理器接口:com。baomidou。mybatisplus。core。handlers。MetaObjectHandler注解填充字段TableField(。。fillFieldFill。INSERT)生成器策略部分也可以配置!91自定义实现类DomainInterceptorpackagecom。didiplus。common。web。interceptor;importcom。baomidou。mybatisplus。core。handlers。MetaObjectHandler;importorg。apache。ibatis。reflection。MetaObject;importorg。springframework。stereotype。Component;importjava。time。LocalDateTime;Author:didiplusEmail:972479352qq。comCreateTime:202254Desc:字段填充拦截器ComponentpublicclassDomainInterceptorimplementsMetaObjectHandler{OverridepublicvoidinsertFill(MetaObjectmetaObject){createField(metaObject);}OverridepublicvoidupdateFill(MetaObjectmetaObject){updateField(metaObject);}Field创建时间publicvoidcreateField(MetaObjectmetaObject){this。strictInsertFill(metaObject,createTime,LocalDateTime。class,LocalDateTime。now());}Field修改时间publicvoidupdateField(MetaObjectmetaObject){this。strictUpdateFill(metaObject,updateTime,LocalDateTime。class,LocalDateTime。now());}}100分页查询101添加分页插件packagecom。didiplus。common。config;importcom。baomidou。mybatisplus。annotation。DbType;importcom。baomidou。mybatisplus。extension。plugins。MybatisPlusInterceptor;importcom。baomidou。mybatisplus。extension。plugins。inner。PaginationInnerInterceptor;importorg。springframework。context。annotation。Bean;importorg。springframework。context。annotation。Configuration;Author:didiplusEmail:972479352qq。comCreateTime:202254Desc:mybatisplus分页插件ConfigurationpublicclassMyBatisPlusConfig{mybatisplus分页插件BeanpublicMybatisPlusInterceptormybatisPlusInterceptor(){MybatisPlusInterceptorinterceptornewMybatisPlusInterceptor();interceptor。addInnerInterceptor(newPaginationInnerInterceptor(DbType。MYSQL));returninterceptor;}}102定义分页接口packagecom。didiplus。modules。sys。service;importcom。baomidou。mybatisplus。core。metadata。IPage;importcom。baomidou。mybatisplus。extension。service。IService;importcom。didiplus。common。web。domain。PageDomain;importcom。didiplus。modules。sys。domain。SysDictType;Author:didiplusEmail:972479352qq。comCreateTime:2022429Desc:数据字典类型服务类publicinterfaceSysDictTypeServiceextendsIServiceSysDictType{IPageSysDictTypepage(PageDomainpageDomain);}103实现分页接口packagecom。didiplus。modules。sys。service。impl;importcom。baomidou。mybatisplus。core。metadata。IPage;importcom。baomidou。mybatisplus。extension。plugins。pagination。Page;importcom。baomidou。mybatisplus。extension。service。impl。ServiceImpl;importcom。didiplus。common。web。domain。PageDomain;importcom。didiplus。modules。sys。domain。SysDictType;importcom。didiplus。modules。sys。mapper。SysDictTypeMapper;importcom。didiplus。modules。sys。service。SysDictTypeService;importorg。springframework。stereotype。Service;importjavax。annotation。Resource;Author:didiplusEmail:972479352qq。comCreateTime:2022429Desc:ServicepublicclassSysDictTypeServiceImplextendsServiceImplSysDictTypeMapper,SysDictTypeimplementsSysDictTypeService{ResourceSysDictTypeMappersysDictTypeMapper;OverridepublicIPageSysDictTypepage(PageDomainpageDomain){IPageSysDictTypepagenewPage(pageDomain。getPage(),pageDomain。getLimit());returnsysDictTypeMapper。selectPage(page,null);}}104控制层调用RestControllerApi(tags数据字典)RequestMapping(apisysdictType)publicclassSysDictTypeController{AutowiredSysDictTypeServicesysDictTypeService;ApiOperation(字典分页查询)GetMappingpublicIPagelist(RequestBodyPageDomainpageDomain){returnsysDictTypeService。page(pageDomain);}} PageDomain定义了分页接收的两个参数 PageDomain类packagecom。didiplus。common。web。domain;importlombok。Data;Author:didiplusEmail:972479352qq。comCreateTime:202254Desc:分页参数封装DatapublicclassPageDomain{当前页privateIntegerpage;每页数量privateIntegerlimit;}105体验效果 下一篇,我们继续来学习mybatisPlus的代码生成器 原文链接:SpringBoot整合MybatisPlus基本的增删改查,保姆级教程北根娃博客园