范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

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

  收藏等于学会,赶紧关注吧!前言
  代码自动生成是根据我们的数据表,逆向生成Controller、Service、Mapper接口以及Mapper的xml文件的代码,不用再手动创建文件写通用的注解等,以此来提高开发效率,当然你也可以通过Mybatis-Plus的代码生成器封装进自己的系统中来二次实现,加入前端实现可视化的代码生成,我们这里实现一个在控制台操作的代码生成器一、什么是代码生成器
  AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,而且对单表都有默认实现,极大提升开发效率。二、怎么用2.1、使用步骤引入mybatis-plus、generator、velocity、mysql、spring-boot-starter-web、swagger【非必要】、lombok【非必要】依赖创建代码生成器类,并完成代码生成的相关配置配置多张表,批量生成模块代码2.2、项目引入依赖
  特别说明:MyBatis-Plus 从 3.0.3 之后移除了代码生成器与模板引擎的默认依赖,需要手动添加相关依赖:
  我这里使用maven搭建的spring-boot项目,项目名为 buye-test 相关依赖如下:<?xml version="1.0" encoding="UTF-8"?>                    buye         com.buye         1.0.0          4.0.0     buye-test                                     org.springframework.boot             spring-boot-starter-web                                         com.baomidou             mybatis-plus-boot-starter                                         com.baomidou             mybatis-plus-generator                                         org.apache.velocity             velocity-engine-core                                         mysql             mysql-connector-java                                         org.projectlombok             lombok                                         io.springfox             springfox-boot-starter               
  父工程中主要定义依赖了版本,下边贴出父工程的依赖:
  <?xml version="1.0" encoding="UTF-8"?>      4.0.0      com.buye     buye     pom     1.0.0                   buye-test                    1.0.0         UTF-8         UTF-8         1.8         3.0.0         3.4.3.4         3.4.1         2.3         1.18.22                                                                    org.springframework.boot                 spring-boot-dependencies                 2.5.6                 pom                 import                                                                     com.baomidou                 mybatis-plus-boot-starter                 ${mybatis-plus.version}                                                         com.baomidou                 mybatis-plus-generator                 ${mp-generator.version}                                                         org.apache.velocity                 velocity-engine-core                 ${velocity.version}                                                         org.projectlombok                 lombok                 ${lombok.version}                                                         io.springfox                 springfox-boot-starter                 ${swagger.version}                                                               io.swagger                         swagger-models                                                                  
  这里您可以根据自己的需求来创建项目,只需要将这些依赖引入即可,具体依赖见 buye-test 工程,没有引入任何多余依赖2.2.1、模板引擎依赖
  这里我引入的模板引擎是 Velocity(默认也就是无需做配置),MyBatis-Plus还支持Freemarker、Beetl,您可以选择自己熟悉的模板引擎,如果都不满足您的要求,可以采用自定义模板引擎,如果您也是用 Velocity 引擎则无需引入以下依赖,如果您使用其他模板引擎,请将上文的maven依赖中的 Velocity 依赖替换掉。
  Freemarker 依赖:     org.freemarker     freemarker     版本可以通过mavne中央仓库查询,选择您想用的版本 
  Beetl依赖:     com.ibeetl     beetl     版本可以通过mavne中央仓库查询,选择您想用的版本 2.3、创建代码生成器类
  您在项目创建一个类即可,代码中的注释值得详细看一下,所有的代码解释都在其中,如果还有哪里不明白的评论区见,如果您觉得非常清晰,请给个赞吧。代码如下:package com.buye.gen;  import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.generator.AutoGenerator; import com.baomidou.mybatisplus.generator.config.DataSourceConfig; import com.baomidou.mybatisplus.generator.config.GlobalConfig; import com.baomidou.mybatisplus.generator.config.PackageConfig; import com.baomidou.mybatisplus.generator.config.StrategyConfig; import com.baomidou.mybatisplus.generator.config.rules.DateType; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;  /**  * 整个流程分为6部分  * 1、创建AutoGenerator 代码生成器对象  * 2、做全局配置  * 3、数据源配置  * 4、包配置  * 5、策略配置  * 6、执行代码生成  * @Date 2021/11/27 11:18  * @Created 添甄  */ public class BuyeCodeGenerator {      public static void main(String[] args) {         // 1、创建代码生成器         AutoGenerator mpg = new AutoGenerator();         /*          * 2、创建全局配置对象          *  1)、可以通过该对象配置生成文件的输出位置,类上的@Author注解等          *  2)、在下边我们会使用一些常用的配置          */         GlobalConfig gc = new GlobalConfig();         // 获取本项目的项目路径,不过该路径在有些情况下会出现问题,所以一般在设置文件输出路径时我会写绝对路径         String projectPath = System.getProperty("user.dir");         System.out.println(projectPath);         // 设置生成文件的输出路径,这里前部分使用的一个绝对路径,后部分是一个mavne项目的目录结构         // 当然您也可以 D:codebuyebuye-testsrcmainjava 这样的一个完整绝对路径         gc.setOutputDir("D:codebuyebuye-test" + "/src/main/java");         // 设置生成文件(也就是类)上方的@Author注解         gc.setAuthor("添甄");         //生成后是否打开资源管理器         gc.setOpen(false);         //重新生成时文件是否覆盖         gc.setFileOverride(false);         // mp生成service层代码,默认接口名称第一个字母有I,去掉Service接口的首字母I         gc.setServiceName("%sService");         // 主键策略,这里的策略和您的实际项目需要设置         // 在 https://blog.csdn.net/qq_36386908/article/details/121465444 文章中讲过主键策略了         gc.setIdType(IdType.ASSIGN_ID);         // 定义生成的实体类中日期类型         gc.setDateType(DateType.ONLY_DATE);         //开启Swagger2模式         gc.setSwagger2(true);         // 将配置加入到代码生成器中         mpg.setGlobalConfig(gc);          // 3、数据源配置         DataSourceConfig dsc = new DataSourceConfig();         dsc.setUrl("jdbc:mysql://localhost:3306/buye?serverTimezone=GMT%2B8");         dsc.setDriverName("com.mysql.cj.jdbc.Driver");         dsc.setUsername("root");         dsc.setPassword("root");         dsc.setDbType(DbType.MYSQL);         // 将数据源设置仅代码生成器中         mpg.setDataSource(dsc);          // 4、包配置         PackageConfig pc = new PackageConfig();         // 模块名         pc.setModuleName("mp");         pc.setParent("com.buye");         pc.setController("controller");         pc.setEntity("entity");         pc.setService("service");         pc.setMapper("mapper");         // 将包配置设置进代码生成器中         mpg.setPackageInfo(pc);          // 5、策略配置         StrategyConfig strategy = new StrategyConfig();         // 设置表名,根据数据库表生成实体类和其他文件         strategy.setInclude("sys_user");         //数据库表映射到实体的命名策略         strategy.setNaming(NamingStrategy.underline_to_camel);         //生成实体时去掉表前缀         strategy.setTablePrefix(pc.getModuleName() + "_");         //数据库表字段映射到实体的命名策略         strategy.setColumnNaming(NamingStrategy.underline_to_camel);         // lombok 模型 @Accessors(chain = true) setter链式操作         strategy.setEntityLombokModel(true);         //restful api风格控制器         strategy.setRestControllerStyle(true);         //url中驼峰转连字符         strategy.setControllerMappingHyphenStyle(true);         // 将策略设置仅代码生成器         mpg.setStrategy(strategy);         // 6、执行         mpg.execute();     } }2.3.1、执行测试
  其中有数据表如下:
  运行代码:
  上边我们仅仅是实现了单表,我们一般的项目也在几十张,甚至百张以上的表,一个一个生成起步很慢,我们只需要将代码生成类中的策略配置中的 strategy.setInclude("sys_user","sys_dept");配置需要生成代码的表。
  setInclude(String... include)这个函数的参数是一个可变参数,并且将数据存储到一个Set集合中筛选掉用户不小心传入的重复数据。
  注意:这里并不是是说一次性生成所有的表,我们还配置了模块记得吗?根据模块去生成就可以啦
  以上就是我们的代码生成的具体操作,在项目中如果能用就用,毕竟可以省略掉很多重复的工作。无论是单表还是多表都给您介绍到。我们没有结束,接下来再翻一翻生成的代码深入理解一下。三、深挖生成的代码
  注意:这里代码生成与代码生成类中的配置息息相关。3.1、公共部分
  每个类上都有的公共部分
  2.4、使用其他模板引擎
  如果您要使用其他模板引擎:请替换模板引擎依赖在代码生成类中配置模板引擎
  默认的就够用啦,别瞎折腾了// set freemarker engine generator.setTemplateEngine(new FreemarkerTemplateEngine());  // set beetl engine generator.setTemplateEngine(new BeetlTemplateEngine());3.2、实体类
  知道为什么引入 lombok 和 swagger了吧3.3、Mapper接口
  3.4、mapper的xml文件
  这个文件空空如也,仅仅有一个namespace配置
  3.5、Service接口
  这里仅仅继承了IService接口,该接口是MyBatis-Plus的,稍后会和 BaseMapper、以及Service实现类中继承的 ServiceImpl 一起介绍
  3.6、Service实现类
  之前我们的实现类也就是实现接口,但是这里他还帮我们继承了一个 ServiceImpl 类
  3.7、Controller
  四、MyBatis-Plus基础接口
  mybatis-plus中的源码都是中文注释,阅读门槛较低,推荐您阅读一遍,因篇幅问题,以下仅贴出部分代码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中写一个添加供您参考,其余的操作都一样package com.buye.mp.controller;  import com.buye.mp.entity.SysUser; import com.buye.mp.service.SysUserService; import com.sun.org.apache.xpath.internal.operations.Bool; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; import java.util.Map;  /**  * 

* 用户信息表 前端控制器 * * * @author 添甄 */ @RestController @RequestMapping("/mp/sys/user") public class SysUserController { @Autowired private SysUserService userService; /** * 添加用户 * @param sysUser * @return */ @PostMapping public Map addUser(@RequestBody SysUser sysUser) { // 添加,直接调用service,因为有默认实现,所以其他地方就不用写代码了 boolean saveCount = userService.save(sysUser); Map map = new HashMap<>(); if(saveCount) { map.put("code",200); map.put("message","添加用户成功"); }else { map.put("code",500); map.put("message","添加用户失败"); } return map; } }   注意:别忘记添加Mapper扫描   因为从Service到Mapper都已经有了默认实现,我们在单表操作时仅编写Controller即可,如果需要条件查询做判断,可以使用Wrapper是吧!总结   不知不觉写了一万三千多字,本篇主要介绍了:MyBatis-Plus代码生成器的配置和开发,并且实现单量和批量的代码生成讲解了生成代码的结构,和引入依赖的说明通过翻阅生成的代码,为您讲解MyBatis-Plus的常见接口以及它的实现原理通过一个添加案例实现MyBatis-Plus生成代码的具体应用。   如果觉得不错记得关注,点赞哦!!持续更新编程文章


2023年广东世承杯击剑联赛(第一站),三月论剑正式开启剑击长空以剑会友,一年春光正好。2023年广东省世承杯击剑联赛(第一站)于3月4日至3月5日在佛山泽木体育馆拉开帷幕。此次大赛由中国击剑协会指导,广东省二沙体育训练中心(击剑项目管经开区企业隆基绿能成为百度文心一言首批生态合作伙伴日前,经开区企业隆基绿能宣布成为百度文心一言(英文名ERNIEBot)首批生态合作伙伴。后续,隆基绿能将通过百度智能云全面体验并接入文心一言的能力。文心一言是基于百度智能云技术打造2023良心机推荐,小米和vivo更喜欢谁?这5款颜值高如果您喜欢,可以点击上面的关注二字。后续会为您提供更多有价值的内容。今天分享,2023良心机推荐,小米和vivo更喜欢谁?这5款颜值高。第一款红米K60E参考价格2599元(125北京市商务局北京市3月1日起继续实施汽车置换补贴政策新京报贝壳财经讯(记者白昊天)3月1日,贝壳财经记者自北京市商务局官方公众号获悉为加快老旧汽车淘汰更新,鼓励汽车消费,北京市今年将继续实施乘用车置换新能源车补贴政策。具体来看,今年条码打印检测一体机如何检测打印流水号条码出现重码标签缺陷?在工厂标签应用中,如果条码标签出现了条码重码错码无法识别码标签缺陷码,会影响生产效率严重影响产品的标识。在医疗汽车电子等产品领域,要求标签的唯一性,一旦流通到客户端,可能面临的是返想干成这事,联想有实力吗?近日,中国教育科学研究院正式发布中国智慧教育蓝皮书,指出进入数字时代,推进教育数字化转型探索智慧教育,已受到世界各国共同关注。毫无疑问,智慧教育已是大势所趋。不过,由于现阶段各地I全身涂白内裤半露竹竿腿透视装娱圈病态审美,该停停了近日,许多网友都被王嘉尔的一身穿搭吸引了眼球,其造型浮夸程度让许多人都直呼接受不了。照片里的王嘉尔染着一头银灰色头发,粉红色外套搭配棕色阔腿裤,脚上是一双红白相间的鞋子。最吸引人目从挖笋到上桌不到三天?救命!现在的预制菜也太鲜了吧天气转暖,春菜陆续上市,而今年的预制菜却跟春天杠上了。近日,商业那点事儿小编走访发现,多家餐饮企业都推出了春菜系列产品,在一家盒马门店的冷藏货架上小编看到,腌笃鲜春笋炒腊肉春笋咸肉网络虚拟财产监管难在哪?2023年全国两会召开在即,近日,全国政协委员北京金台律师事务所主任皮剑龙在接受媒体采访时表示,当前对网络虚拟财产保护进行专门立法的条件已基本成熟,拟在今年全国两会期间向大会提交关黑龙江又一个高颜值女干部被查!拔出萝卜带出泥,她的伯乐也被查鹤岗市,位于黑龙江省东北部,北隔黑龙江与俄罗斯相望,属地级市,常住人口90万人。是著名的煤城。2023年1月10日,黑龙江省纪委监委发布了消息鹤岗市卫生健康委副主任曹晓宇涉嫌严重违2个国家站在俄罗斯身边,60多个国家在军援乌克兰,这就是差距今天来跟大家说一说俄乌战争当中军援的事,先说说俄罗斯,俄罗斯从去年2月24号开始特别军事行动以后,有一些国家采用不同的方式给俄罗斯送了一些武器和装备,当然是送人道主义救援的这种东西
李少莉又有新情况?姐弟都挺厉害,调查有可能涉及到他们最新消息!李少莉收入和她老公的信息公开了,结果可能和我们想的不一样李少莉自从在发布会上戴了一对疑似价值3万元的耳环后,就受到了很多人的质疑此事在网上持续发酵,李少莉的热度一直居高不凭一己之力抵抗中性风,印度人把全部家当戴身上这几年,性冷淡在亚洲大行其道。但说实话,清一色的MUJI风,实在让人有点审美疲劳。然而,印度人却凭一己之力抵抗中性风,以极繁的设计给人另一种视觉冲击。花纹,不能有活物?如果你走在印火箭遭20分逆转,新星连挨3帽尼克斯防守,塞拉斯用人辣眼睛文水清清北京时间11月19日,火箭9199负步行者。格林16分5篮板5助攻,戈登24分6篮板3助攻,马丁12分8篮板,史密斯12分8篮板2封盖,申京11分9篮板4助攻,五位首发联袂甲状腺结节患者不可以吃白菜吗?据不完全统计,甲状腺结节的发病率已达20。45,相当于每5人中就有1人患有甲状腺结节。一部分的结节可以通过触摸直接发现,但大多数结节相对较小,需要通过甲状腺彩色多普勒超声进行诊断。英国生活水平或将出现最严重下降专家警告经济增长惨淡年代来临10月1日,英国伯明翰民众参加抗议示威,不满生活成本日益高涨。(资料图)海外网11月18日电据英国卫报网站18日报道,英国财政大臣亨特日前公布最新财政预算时表明,该国经济已经陷入衰被硫磺熏过的红枣,4处表现明显,建议不要贪小便宜红枣自古以来就是不错的滋补佳品,也是一种不错的小零食,我们在日常生活中也经常能看到他的身影。坐在电视机前时不时的来上几个,煮粥的时候放上几个,打豆浆的时候也可以来上几颗,或者是做红金铲铲S7。5赛季末的狂欢,后期专家成最香强化符文不知道,大家发现没有,自从11月7日更新之后,游戏的节奏加快了不少,因为龙之秘宝会出现两次。大家都知道,龙之秘宝不仅有装备,还有金币。以前,龙之秘宝只出现一次的时候,就有不少玩家就一两陈皮一两金,陈皮泡水抵万金这5大功效请记好大家好,我是赵医生。说起陈皮大家都不陌生,中医常说一两陈皮一两金,陈皮泡水抵万金。虽然在日常生活中,人们经常用陈皮来泡茶煲汤。但是你真的知道什么是陈皮吗?陈皮也就是我们的橘子皮,但小行星确定对准美国,很可能正面撞击五大湖附近!专家或有陨石据外媒消息,一颗小行星正快速接近地球,并且很可能在11月19日抵达地球这颗小行星并不是要和地球擦肩而过,而是将直接撞击地球!据最新预报,小行星即将在北京时间下午4点26分前后撞击地NBA战报热火七勇士惜败奇才,76人三连胜,德罗赞空砍41分北京时间11月19日,NBA常规赛继续激战,我们看看已经结束了的比赛,主要的信息如下残阵热火106107加时惜败奇才76人110102战胜雄鹿迎来三连胜公牛痛失好局,107108惨在外面狼狈赚钱的男人更要克制情绪,为了家人咬牙继续忍着在外面狼狈赚钱的人别动不动就暴躁,动手一次就让你终身后悔!现在很多人都带着情绪去工作,去赚钱,人已经在极限崩溃的边缘。很多人内心不平衡,整天辛苦赚钱,赚不到钱,有的人却可以躺在家里