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。importcom。baomidou。mybatisplus。annotation。FieldFimportcom。baomidou。mybatisplus。annotation。TableFimportlombok。Dimportjava。io。Simportjava。time。LocalDateTAuthor:didiplusEmail:972479352qq。comCreateTime:2022429Desc:基础实体类DatapublicclassBaseDomainimplementsSerializable{创建时间TableField(valuecreatetime,fillFieldFill。INSERT)privateLocalDateTimecreateT创建人TableField(valuecreateby,fillFieldFill。INSERT)privateStringcreateBy;创建人名称TableField(valuecreatename,fillFieldFill。INSERT)privateStringcreateN修改时间TableField(valueupdatetime,fillFieldFill。UPDATE)privateLocalDateTimeupdateT修改人TableField(valueupdateby,fillFieldFill。UPDATE)privateStringupdateBy;修改人名称TableField(valueupdatename,fillFieldFill。UPDATE)privateStringupdateN备注privateS} TableField是mybatisplus中的一个注解,后面会讲解到的。 基础实体类创建好了,接着我们把剩下的两个实体类也一同创建吧。52SysDictType实体类packagecom。didiplus。modules。sys。importcom。didiplus。common。base。BaseDimportcom。didiplus。common。base。ValidGimportio。swagger。annotations。ApiMimportio。swagger。annotations。ApiModelPimportlombok。Dimportjavax。validation。constraints。;Author:didiplusEmail:972479352qq。comCreateTime:2022425Desc:字典类型领域模型DataApiModel(value字典类型)publicclassSysDictTypeextendsBaseDomain{标识Null(groupsValidGroup。Crud。Create。class)NotNull(groupsValidGroup。Crud。Update。class,message字典ID不能为空)ApiModelProperty(ID)privateS字典名称NotBlank(message字典名称必填项)ApiModelProperty(value字典名称,example用户ID)privateStringtypeN字典类型NotBlank(message字典编码不能为空)ApiModelProperty(value字典编码)privateStringtypeC字典描述ApiModelProperty(value字典描述)privateS字典可用状态NotBlank(message字典状态不能为空)ApiModelProperty(value字典状态)privateB}53SysDictData实体类packagecom。didiplus。modules。sys。importcom。baomidou。mybatisplus。annotation。TableFimportcom。didiplus。common。base。BaseDimportcom。didiplus。common。base。ValidGimportio。swagger。annotations。ApiModelPimportlombok。Dimportjavax。validation。constraints。NotBimportjavax。validation。constraints。NotNimportjavax。validation。constraints。NAuthor: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字典数据名称)privateStringdataL字典值NotBlank(message字典数据值不能为空)ApiModelProperty(value字典数据值)privateStringdataV字典类型ApiModelProperty(value字典编码)NotBlank(message字典数据值不能为空)privateStringtypeC是否为默认ApiModelProperty(value字典编码)NotBlank(message字典数据值不能为空)privateStringisD是否启用NotBlank(message字典状态不能为空)ApiModelProperty(value字典数据状态)privateB}60创建DAO继承MybatisPlus增强接口 为两个实体类中分别添加DAO继承MybatisPlus增强接口,这样就可以集成了增删改查的功能了。61SysDictTypeMapperpackagecom。didiplus。modules。sys。importcom。baomidou。mybatisplus。core。mapper。BaseMimportcom。didiplus。modules。sys。domain。SysDictTimportorg。apache。ibatis。annotations。MAuthor:didiplusEmail:972479352qq。comCreateTime:2022429Desc:字典类型接口MapperpublicinterfaceSysDictTypeMapperextendsBaseMapperSysDictType{}62SysDictDataMapperpackagecom。didiplus。modules。sys。importcom。baomidou。mybatisplus。core。mapper。BaseMimportcom。didiplus。modules。sys。domain。SysDictDimportorg。apache。ibatis。annotations。MAuthor:didiplusEmail:972479352qq。comCreateTime:2022429Desc:字典数据接口MapperpublicinterfaceSysDictDataMapperextendsBaseMapperSysDictData{}70进一步封装到Service层71定义Service接口中的抽象方法SysDictDataServicepackagecom。didiplus。modules。sys。importcom。baomidou。mybatisplus。extension。service。ISimportcom。didiplus。modules。sys。domain。SysDictDAuthor:didiplusEmail:972479352qq。comCreateTime:2022429Desc:publicinterfaceSysDictDataServiceextendsIServiceSysDictData{}SysDictTypeServicepackagecom。didiplus。modules。sys。importcom。baomidou。mybatisplus。extension。service。ISimportcom。didiplus。modules。sys。domain。SysDictTAuthor:didiplusEmail:972479352qq。comCreateTime:2022429Desc:publicinterfaceSysDictTypeServiceextendsIServiceSysDictType{}72实现Service接口中的方法SysDictTypeServiceImplpackagecom。didiplus。modules。sys。service。importcom。baomidou。mybatisplus。extension。service。impl。ServiceIimportcom。didiplus。modules。sys。domain。SysDictTimportcom。didiplus。modules。sys。mapper。SysDictTypeMimportcom。didiplus。modules。sys。service。SysDictTypeSimportorg。springframework。stereotype。SAuthor:didiplusEmail:972479352qq。comCreateTime:2022429Desc:ServicepublicclassSysDictTypeServiceImplextendsServiceImplSysDictTypeMapper,SysDictTypeimplementsSysDictTypeService{}SysDictDataServiceImplpackagecom。didiplus。modules。sys。service。importcom。baomidou。mybatisplus。extension。service。impl。ServiceIimportcom。didiplus。modules。sys。domain。SysDictTimportcom。didiplus。modules。sys。mapper。SysDictTypeMimportcom。didiplus。modules。sys。service。SysDictTypeSimportorg。springframework。stereotype。SAuthor:didiplusEmail:972479352qq。comCreateTime:2022429Desc:ServicepublicclassSysDictTypeServiceImplextendsServiceImplSysDictTypeMapper,SysDictTypeimplementsSysDictTypeService{}80在控制层上进行增删改查操作81SysDictTypeControllerpackagecom。didiplus。modules。sys。importcom。didiplus。common。base。ValidGimportcom。didiplus。modules。sys。domain。SysDictTimportcom。didiplus。modules。sys。service。SysDictTypeSimportio。swagger。annotations。Aimportio。swagger。annotations。ApiOimportio。swagger。v3。oas。annotations。parameters。RequestBimportorg。springframework。beans。factory。annotation。Aimportorg。springframework。validation。annotation。Vimportorg。springframework。web。bind。annotation。;Author:didiplusEmail:972479352qq。comCreateTime:2022425Desc:数据字典控制器RestControllerApi(tags数据字典)RequestMapping(apisysdictType)publicclassSysDictTypeController{AutowiredSysDictTypeServicesysDictTypeSApiOperation(字典添加)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。importcom。baomidou。mybatisplus。core。handlers。MetaObjectHimportorg。apache。ibatis。reflection。MetaOimportorg。springframework。stereotype。Cimportjava。time。LocalDateTAuthor: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。importcom。baomidou。mybatisplus。annotation。DbTimportcom。baomidou。mybatisplus。extension。plugins。MybatisPlusIimportcom。baomidou。mybatisplus。extension。plugins。inner。PaginationInnerIimportorg。springframework。context。annotation。Bimportorg。springframework。context。annotation。CAuthor:didiplusEmail:972479352qq。comCreateTime:202254Desc:mybatisplus分页插件ConfigurationpublicclassMyBatisPlusConfig{mybatisplus分页插件BeanpublicMybatisPlusInterceptormybatisPlusInterceptor(){MybatisPlusInterceptorinterceptornewMybatisPlusInterceptor();interceptor。addInnerInterceptor(newPaginationInnerInterceptor(DbType。MYSQL));}}102定义分页接口packagecom。didiplus。modules。sys。importcom。baomidou。mybatisplus。core。metadata。IPimportcom。baomidou。mybatisplus。extension。service。ISimportcom。didiplus。common。web。domain。PageDimportcom。didiplus。modules。sys。domain。SysDictTAuthor:didiplusEmail:972479352qq。comCreateTime:2022429Desc:数据字典类型服务类publicinterfaceSysDictTypeServiceextendsIServiceSysDictType{IPageSysDictTypepage(PageDomainpageDomain);}103实现分页接口packagecom。didiplus。modules。sys。service。importcom。baomidou。mybatisplus。core。metadata。IPimportcom。baomidou。mybatisplus。extension。plugins。pagination。Pimportcom。baomidou。mybatisplus。extension。service。impl。ServiceIimportcom。didiplus。common。web。domain。PageDimportcom。didiplus。modules。sys。domain。SysDictTimportcom。didiplus。modules。sys。mapper。SysDictTypeMimportcom。didiplus。modules。sys。service。SysDictTypeSimportorg。springframework。stereotype。Simportjavax。annotation。RAuthor:didiplusEmail:972479352qq。comCreateTime:2022429Desc:ServicepublicclassSysDictTypeServiceImplextendsServiceImplSysDictTypeMapper,SysDictTypeimplementsSysDictTypeService{ResourceSysDictTypeMappersysDictTypeMOverridepublicIPageSysDictTypepage(PageDomainpageDomain){IPageSysDictTypepagenewPage(pageDomain。getPage(),pageDomain。getLimit());returnsysDictTypeMapper。selectPage(page,null);}}104控制层调用RestControllerApi(tags数据字典)RequestMapping(apisysdictType)publicclassSysDictTypeController{AutowiredSysDictTypeServicesysDictTypeSApiOperation(字典分页查询)GetMappingpublicIPagelist(RequestBodyPageDomainpageDomain){returnsysDictTypeService。page(pageDomain);}} PageDomain定义了分页接收的两个参数 PageDomain类packagecom。didiplus。common。web。importlombok。DAuthor:didiplusEmail:972479352qq。comCreateTime:202254Desc:分页参数封装DatapublicclassPageDomain{当前页privateI每页数量privateI}105体验效果 下一篇,我们继续来学习mybatisPlus的代码生成器 原文链接:SpringBoot整合MybatisPlus基本的增删改查,保姆级教程北根娃博客园