专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

通过MybatisPlus实现代码生成器,常见接口实现讲解

  收藏等于学会,赶紧关注吧!前言
  代码自动生成是根据我们的数据表,逆向生成Controller、Service、Mapper接口以及Mapper的xml文件的代码,不用再手动创建文件写通用的注解等,以此来提高开发效率,当然你也可以通过MybatisPlus的代码生成器封装进自己的系统中来二次实现,加入前端实现可视化的代码生成,我们这里实现一个在控制台操作的代码生成器一、什么是代码生成器
  AutoGenerator是MyBatisPlus的代码生成器,通过AutoGenerator可以快速生成Entity、Mapper、MapperXML、Service、Controller等各个模块的代码,而且对单表都有默认实现,极大提升开发效率。二、怎么用2。1、使用步骤引入mybatisplus、generator、velocity、mysql、springbootstarterweb、swagger【非必要】、lombok【非必要】依赖创建代码生成器类,并完成代码生成的相关配置配置多张表,批量生成模块代码2。2、项目引入依赖
  特别说明:MyBatisPlus从3。0。3之后移除了代码生成器与模板引擎的默认依赖,需要手动添加相关依赖:
  我这里使用maven搭建的springboot项目,项目名为buyetest相关依赖如下:lt;?xmlversion1。0encodingUTF8?projectxmlnshttp:maven。apache。orgPOM4。0。0xmlns:xsihttp:www。w3。org2001XMLSchemainstancexsi:schemaLocationhttp:maven。apache。orgPOM4。0。0http:maven。apache。orgxsdmaven4。0。0。xsd!依赖自己的父工程parentbuyeartifactIdgroupIdcom。buyegroupIdversion1。0。0versionparentmodelVersion4。0。0modelVersionbuyetestartifactIddependencies!springbootweb依赖dependencygroupIdorg。springframework。bootgroupIdspringbootstarterwebartifactIddependency!mybatisplus依赖dependencygroupIdcom。baomidougroupIdmybatisplusbootstarterartifactIddependency!mybatisplus代码生成依赖MyBatisPlus从3。0。3之后移除了代码生成器与模板引擎的默认依赖dependencygroupIdcom。baomidougroupIdmybatisplusgeneratorartifactIddependency!模板引擎依赖,当然您也可以使用Freemarker或者BeetldependencygroupIdorg。apache。velocitygroupIdvelocityenginecoreartifactIddependency!mysql依赖dependencygroupIdmysqlgroupIdmysqlconnectorjavaartifactIddependency!lombok插件dependencygroupIdorg。projectlombokgroupIdlombokartifactIddependency!swagger3依赖dependencygroupIdio。springfoxgroupIdspringfoxbootstarterartifactIddependencydependenciesproject
  父工程中主要定义依赖了版本,下边贴出父工程的依赖:
  lt;?xmlversion1。0encodingUTF8?projectxmlnshttp:maven。apache。orgPOM4。0。0xmlns:xsihttp:www。w3。org2001XMLSchemainstancexsi:schemaLocationhttp:maven。apache。orgPOM4。0。0http:maven。apache。orgxsdmaven4。0。0。xsdmodelVersion4。0。0modelVersiongroupIdcom。buyegroupIdbuyeartifactIdpackagingpompackagingversion1。0。0versionmodulesmodulebuyetestmodulemodulespropertiesbuye。version1。0。0buye。versionproject。build。sourceEncodingUTF8project。build。sourceEncodingproject。reporting。outputEncodingUTF8project。reporting。outputEncodingjava。version1。8java。versionswagger。version3。0。0swagger。versionmybatisplus。version3。4。3。4mybatisplus。versionmpgenerator。version3。4。1mpgenerator。versionvelocity。version2。3velocity。versionlombok。version1。18。22lombok。versionproperties!依赖声明dependencyManagementdependencies!SpringBoot的依赖配置dependencygroupIdorg。springframework。bootgroupIdspringbootdependenciesartifactIdversion2。5。6versiontypepomtypescopeimportscopedependency!mybatisplusdependencygroupIdcom。baomidougroupIdmybatisplusbootstarterartifactIdversion{mybatisplus。version}versiondependency!MP的代码生成器dependencygroupIdcom。baomidougroupIdmybatisplusgeneratorartifactIdversion{mpgenerator。version}versiondependency!模板引擎dependencygroupIdorg。apache。velocitygroupIdvelocityenginecoreartifactIdversion{velocity。version}versiondependency!lombok插件dependencygroupIdorg。projectlombokgroupIdlombokartifactIdversion{lombok。version}versiondependency!Swagger3依赖dependencygroupIdio。springfoxgroupIdspringfoxbootstarterartifactIdversion{swagger。version}versionexclusionsexclusiongroupIdio。swaggergroupIdswaggermodelsartifactIdexclusionexclusionsdependencydependenciesdependencyManagementproject
  这里您可以根据自己的需求来创建项目,只需要将这些依赖引入即可,具体依赖见buyetest工程,没有引入任何多余依赖2。2。1、模板引擎依赖
  这里我引入的模板引擎是Velocity(默认也就是无需做配置),MyBatisPlus还支持Freemarker、Beetl,您可以选择自己熟悉的模板引擎,如果都不满足您的要求,可以采用自定义模板引擎,如果您也是用Velocity引擎则无需引入以下依赖,如果您使用其他模板引擎,请将上文的maven依赖中的Velocity依赖替换掉。
  Freemarker依赖:dependencygroupIdorg。freemarkergroupIdfreemarkerartifactIdversion版本可以通过mavne中央仓库查询,选择您想用的版本versiondependency
  Beetl依赖:dependencygroupIdcom。ibeetlgroupIdbeetlartifactIdversion版本可以通过mavne中央仓库查询,选择您想用的版本versiondependency2。3、创建代码生成器类
  您在项目创建一个类即可,代码中的注释值得详细看一下,所有的代码解释都在其中,如果还有哪里不明白的评论区见,如果您觉得非常清晰,请给个赞吧。代码如下:packagecom。buye。gen;importcom。baomidou。mybatisplus。annotation。DbType;importcom。baomidou。mybatisplus。annotation。IdType;importcom。baomidou。mybatisplus。generator。AutoGenerator;importcom。baomidou。mybatisplus。generator。config。DataSourceConfig;importcom。baomidou。mybatisplus。generator。config。GlobalConfig;importcom。baomidou。mybatisplus。generator。config。PackageConfig;importcom。baomidou。mybatisplus。generator。config。StrategyConfig;importcom。baomidou。mybatisplus。generator。config。rules。DateType;importcom。baomidou。mybatisplus。generator。config。rules。NamingStrategy;整个流程分为6部分1、创建AutoGenerator代码生成器对象2、做全局配置3、数据源配置4、包配置5、策略配置6、执行代码生成Date2021112711:18Created添甄publicclassBuyeCodeGenerator{publicstaticvoidmain(String〔〕args){1、创建代码生成器AutoGeneratormpgnewAutoGenerator();2、创建全局配置对象1)、可以通过该对象配置生成文件的输出位置,类上的Author注解等2)、在下边我们会使用一些常用的配置GlobalConfiggcnewGlobalConfig();获取本项目的项目路径,不过该路径在有些情况下会出现问题,所以一般在设置文件输出路径时我会写绝对路径StringprojectPathSystem。getProperty(user。dir);System。out。println(projectPath);设置生成文件的输出路径,这里前部分使用的一个绝对路径,后部分是一个mavne项目的目录结构当然您也可以D:codebuyebuyetestsrcmainjava这样的一个完整绝对路径gc。setOutputDir(D:codebuyebuyetestsrcmainjava);设置生成文件(也就是类)上方的Author注解gc。setAuthor(添甄);生成后是否打开资源管理器gc。setOpen(false);重新生成时文件是否覆盖gc。setFileOverride(false);mp生成service层代码,默认接口名称第一个字母有I,去掉Service接口的首字母Igc。setServiceName(sService);主键策略,这里的策略和您的实际项目需要设置在https:blog。csdn。netqq36386908articledetails121465444文章中讲过主键策略了gc。setIdType(IdType。ASSIGNID);定义生成的实体类中日期类型gc。setDateType(DateType。ONLYDATE);开启Swagger2模式gc。setSwagger2(true);将配置加入到代码生成器中mpg。setGlobalConfig(gc);3、数据源配置DataSourceConfigdscnewDataSourceConfig();dsc。setUrl(jdbc:mysql:localhost:3306buye?serverTimezoneGMT2B8);dsc。setDriverName(com。mysql。cj。jdbc。Driver);dsc。setUsername(root);dsc。setPassword(root);dsc。setDbType(DbType。MYSQL);将数据源设置仅代码生成器中mpg。setDataSource(dsc);4、包配置PackageConfigpcnewPackageConfig();模块名pc。setModuleName(mp);pc。setParent(com。buye);pc。setController(controller);pc。setEntity(entity);pc。setService(service);pc。setMapper(mapper);将包配置设置进代码生成器中mpg。setPackageInfo(pc);5、策略配置StrategyConfigstrategynewStrategyConfig();设置表名,根据数据库表生成实体类和其他文件strategy。setInclude(sysuser);数据库表映射到实体的命名策略strategy。setNaming(NamingStrategy。underlinetocamel);生成实体时去掉表前缀strategy。setTablePrefix(pc。getModuleName());数据库表字段映射到实体的命名策略strategy。setColumnNaming(NamingStrategy。underlinetocamel);lombok模型Accessors(chaintrue)setter链式操作strategy。setEntityLombokModel(true);restfulapi风格控制器strategy。setRestControllerStyle(true);url中驼峰转连字符strategy。setControllerMappingHyphenStyle(true);将策略设置仅代码生成器mpg。setStrategy(strategy);6、执行mpg。execute();}}2。3。1、执行测试
  其中有数据表如下:
  运行代码:
  上边我们仅仅是实现了单表,我们一般的项目也在几十张,甚至百张以上的表,一个一个生成起步很慢,我们只需要将代码生成类中的策略配置中的strategy。setInclude(sysuser,sysdept);配置需要生成代码的表。
  setInclude(String。。。include)这个函数的参数是一个可变参数,并且将数据存储到一个Set集合中筛选掉用户不小心传入的重复数据。
  注意:这里并不是是说一次性生成所有的表,我们还配置了模块记得吗?根据模块去生成就可以啦
  以上就是我们的代码生成的具体操作,在项目中如果能用就用,毕竟可以省略掉很多重复的工作。无论是单表还是多表都给您介绍到。我们没有结束,接下来再翻一翻生成的代码深入理解一下。三、深挖生成的代码
  注意:这里代码生成与代码生成类中的配置息息相关。3。1、公共部分
  每个类上都有的公共部分
  2。4、使用其他模板引擎
  如果您要使用其他模板引擎:请替换模板引擎依赖在代码生成类中配置模板引擎
  默认的就够用啦,别瞎折腾了setfreemarkerenginegenerator。setTemplateEngine(newFreemarkerTemplateEngine());setbeetlenginegenerator。setTemplateEngine(newBeetlTemplateEngine());3。2、实体类
  知道为什么引入lombok和swagger了吧3。3、Mapper接口
  3。4、mapper的xml文件
  这个文件空空如也,仅仅有一个namespace配置
  3。5、Service接口
  这里仅仅继承了IService接口,该接口是MyBatisPlus的,稍后会和BaseMapper、以及Service实现类中继承的ServiceImpl一起介绍
  3。6、Service实现类
  之前我们的实现类也就是实现接口,但是这里他还帮我们继承了一个ServiceImpl类
  3。7、Controller
  四、MyBatisPlus基础接口
  mybatisplus中的源码都是中文注释,阅读门槛较低,推荐您阅读一遍,因篇幅问题,以下仅贴出部分代码4。1、BaseMapper
  这个是每个Mapper接口都继承的接口,里边拥有单表的所有CRUD实现、批量操作以及分页查询,部分代码截图如下:
  4。2、IService接口
  该接口为Service的顶级接口,进一步封装CRUD采用get【查询单行】remove【删除】list【查询集合】page【分页】的前缀命名方式区分Mapper层避免混淆
  4。3、ServiceImpl实现类
  该实现类接受两个泛型对应模块的Mapper接口对应模块的实现类
  可以将Mapper直接进行注入,并且提供getBaseMapper方法提供mapper的获取,方便别的service层调用,并且对sqlSession、单表的CRUD操作做了默认实现,酸爽无比。五、测试代码
  接下来在Controller中写一个添加供您参考,其余的操作都一样packagecom。buye。mp。controller;importcom。buye。mp。entity。SysUser;importcom。buye。mp。service。SysUserService;importcom。sun。org。apache。xpath。internal。operations。Bool;importorg。springframework。beans。factory。annotation。Autowired;importorg。springframework。web。bind。annotation。PostMapping;importorg。springframework。web。bind。annotation。RequestBody;importorg。springframework。web。bind。annotation。RequestMapping;importorg。springframework。web。bind。annotation。RestController;importjava。util。HashMap;importjava。util。Map;p用户信息表前端控制器author添甄RestControllerRequestMapping(mpsysuser)publicclassSysUserController{AutowiredprivateSysUserServiceuserService;添加用户paramsysUserreturnPostMappingpublicMapString,ObjectaddUser(RequestBodySysUsersysUser){添加,直接调用service,因为有默认实现,所以其他地方就不用写代码了booleansaveCountuserService。save(sysUser);MapString,ObjectmapnewHashMap();if(saveCount){map。put(code,200);map。put(message,添加用户成功);}else{map。put(code,500);map。put(message,添加用户失败);}returnmap;}}
  注意:别忘记添加Mapper扫描
  因为从Service到Mapper都已经有了默认实现,我们在单表操作时仅编写Controller即可,如果需要条件查询做判断,可以使用Wrapper是吧!总结
  不知不觉写了一万三千多字,本篇主要介绍了:MyBatisPlus代码生成器的配置和开发,并且实现单量和批量的代码生成讲解了生成代码的结构,和引入依赖的说明通过翻阅生成的代码,为您讲解MyBatisPlus的常见接口以及它的实现原理通过一个添加案例实现MyBatisPlus生成代码的具体应用。
  如果觉得不错记得关注,点赞哦!!持续更新编程文章

魔兽怀旧服黑上门钥匙任务怎么做合适?黑上钥匙获得需要通过一系列的任务获得。第一步,黑下接任务。首先要先打到原始晋升印章,打黑下的小怪都会掉,拿到后找到任务NPC维埃兰。NPC位置不太好找,门口有1批怪可以不打,旁边有有哪些适合三十岁以上用的比较实惠而又经济的护肤品?价高不一定好用,合适自己的才是最好的,下面推荐几款适合30岁以上使用,价格不高而又很好用的护肤品!1。AHC黄金系列这个系列不是一个套装,它没有乳液,只有爽肤水,精华和面霜。非常适女生坐月子在你们老家有哪些禁忌?我们这边奇葩迷信风俗,不知道你们有没1月子期间40天不能回娘家,特别是有兄弟的,类似方娘家人,对兄弟不好,产妇冲宅捂脸2不能串门,也不能在租的房子里坐月子,跟上面差不多女人一辈子最例假量少怎么办,要补血吗?在日常生活中,可能我们会经常出现月经异常的情况。例如,在经期出现经血不调,出现月经异常,经期紊乱等等情况。有些时候,有的女性也会出现一些月经量少的情况,这对身体健康是有一定的影响的盘锦和锦州,二选一,你会选择哪个城市定居生活?宜居肯定是盘锦了,特别适合退休和快退休的人群。但要期待丰富的夜生活,繁华的商圈,熙熙攘攘的人流,那就算了,但盘锦的绿化,街道,公园,餐饮还是非常不错的,一般城市比不了。房价也低,物入狱劳改20年,能领到多少工资?关押期间监狱交社保什么的吗?入狱劳改20年,能领到多少工资?关押期间监狱交社保什么的吗?根据现行法律规定,服刑罪犯在服刑期间,必须参加力所能及的劳动,劳动没有报酬。另外,服刑期间,吃饭穿衣劳动工具以及医疗等方周至有什么特色小吃?周至县地处秦岭北麓,山环水绕,生态优势明显,文化积淀深厚,物产丰富,素有金周至之美誉。在烹制美食过程中,周至人讲究心智和义利和天人和,创造出来的特色美食,既承载着悠远深厚的文化底蕴能分享你家乡的美景照吗?巍巍武当,滔滔汉水,茫茫神农架,悠悠丹江情,历历郧阳府,欣欣汽车城。历史源远流长,文化博大精深。人类的老家,恐龙的故乡。我的家乡十堰,仙山,秀水,汽车城。风景秀丽,风光无比。是一个科比跟梅西谁的影响力更大一点?如果要说影响力,已经退役的科比要比现在的梅西影响力更大一点。科比是篮球界的超级明星,梅西是足球界的超级明星,这是两个不同的领域,所以两者并不适合放在一起比较。如果非要从影响力方面来男子100米成绩一般10秒出点头,为什么有些4100的成绩会是38秒多?这是什么原因?在刚刚结束的亚运会男子4x100米接力决赛中,中国队以38秒89的成绩拿到一枚铜牌,金银牌分别被日本队和印尼队获得。4x100米接力跑,不能等同于4个人的百米速度相加。100米跑时女人怎样拥有一张又白又嫩又光滑的脸?我自己是这样做的,每天喝开水,好多年不碰任何饮料,出门必定防晒,多吃对皮肤好的水果,我一般都是吃苹果,因为苹果不寒不热,所以适合所有人。还有蔬菜,像西红柿,茄子,白萝卜这些都是润肤
抄书第37天,坚持自己创作终于恢复原创标志了,自媒体一定不能抄两天的闲暇时间把第三十七天的抄书内容分享出来了,今天分享的是冲动会使人失去理智。当一个人冲动时,其全部的注意力都集中在导致他冲动的这一件事情上,对于其他的诸如后果之类的问题,根本就欲求生富贵,须下死工夫庭前生瑞草,好事不如无。欲求生富贵,须下死工夫。百年成之不足,一旦败之有余。人心似铁,官法如炉。好事不会从天而降,庭院生吉祥之草,不一定会带来祥瑞吉兆,会带来不必要的麻烦。想要成功一个语文老师的寒假计划我的生活也是头条一想到从今天开始就放寒假了,心里就转悠着上万种小开心,终于可以轻轻松松地过一下自己想过的日子了。虽然这个学期大部分网课,基本居家,可是每天有各种工作,心里总是密密麻孝顺父母人生在世处处是修行,事事是修行,修行可以是去寺庙虔诚诵佛念经,可以是发善心放生,也可以是平日里修身养性守住本心。但我觉得最重要的还是孝顺好父母,让他们更开心更幸福,他们比任何人都伟一个正方形,就是一个世界OneSquare,OneWorld一个正方形,就是一个世界OneSquare,OneWorld至上主义,以最简单的图形来表达世界,彻底奉行少即是多的原则。正方形表达一切,一切如你所见。你看到山,它就是山你看到水,它大心脏!欧文连续5场末节得分上双,蔡崇信赚翻10连胜剑指首冠篮网又赢球了,在击败老鹰之后,篮网已经豪取10连胜,是现阶段NBA联盟最长连胜纪录。这场比赛篮网赢得并不容易,他们一度处于落后,甚至最后时刻,还有可能被对手绝杀,好在穆雷的绝杀三分首钢比辽军更加难缠?汉密尔顿首战旧主杜锋手握致胜良策结束完与吉林队的比赛,广东队目前以15胜4负的成绩在积分榜排名第二,华南虎下一个对手就是积分榜排名第四的北京队。广东队方面,目前已经取得了一波10连胜,球队势头正猛,面对北京队,倘CCTV5直播!无杨鸣辽宁再遇浙江,付豪正名之战,郭艾伦无路可退悄然间,联赛第十九轮比赛已经接近尾声。在此前结束的比赛中,浙江大胜北控,辽宁不敌首钢。在对阵首钢的比赛中,杨鸣因为不满裁判吹罚,一怒之下冲进场内被夺权。此后,杨鸣被联赛处以禁赛3场4消息!法尔将停赛,辽宁换临时主帅,北控警告老马,刘传兴废了根据目前最新的消息,法尔在上场比赛吃到一个违体的情况下,如果他不申诉取消的话,再加上之前就有三个,那么他将积累4个违体,他会被主动禁赛一场比赛,这对于新疆内线会是巨大打击。因为摩尔中国足坛又闹笑话!赛季结束天价外援度假归来,白领2300万欧年薪北京时间12月29日消息,已经处于漩涡风暴中心的中国足球,又迎来了令人的啼笑皆非的一幕。上海海港外援奥斯卡,日前从巴西启程返回上海,疑似要备战上海海港和成都蓉城的足协杯决赛。本赛季CBA实时消息林书豪遭解约!翟晓川暗讽辽宁!徐杰数据大涨!北京时间今天,广州官宣与林书豪解约,而林书豪也发文感谢广州,暗示他值得更多的出场时间!我们先不论林书豪是否能出战更多时间,先说他的能力,占用一个外援名额去请他,也只有第一年的北京首
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网