作者:汤圆

个人博客:javalover.cc

前言

大家好啊,我是汤圆,今天给大家带来的是《SpringBoot中的自动代码生成 - 基于Mybatis-Plus》,希望对大家有帮助,谢谢

文章纯属原创,个人总结难免有差错,如果有,麻烦在评论区回复或后台私信,谢啦

简介

基于Mybatis-Plus的自动代码生成有很多方式,这里介绍下我在用的两种:

  • 本地代码生成:Mybatis-Plus官方
  • 在线代码生成:第三方

这两种各有优缺点,看喜欢哪一种了

听说Idea也有自动生成的插件,但是我还没去看,我觉得这俩就够用了(但也说不准哪天,用了插件后,才发现柳暗花明呢)

有的官人,可能要问了,既然Mybatis-Plus官网有例子了,为啥还要在这里写出来呢?

是因为对于我这种不熟悉模板引擎的人来说,官网介绍的一些配置我们可以省掉,从而减少我们调试的时间(因为默认的模板生成配置就够用了,我们不需要再去接触那些模板语法啥的)

本地代码生成

就是在自己的项目里,写一个Java程序,配置好各种参数,启动后就可以自动生成

这种方法的好处是,直接生成到本地项目,不需要手动再去复制粘贴

缺点就是,刚开始的配置比较多(但是一劳永逸)

好了,下面开始上代码,好消息是下面的代码都有注释说明,另一个好消息是生成的代码也是有注释的(尤其是entity类的字段注解,很实用)

  1. 配置pom.xml

    <!-- mybatis-plus代码生成器 -->
    <dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.4.0</version>
    </dependency>
    <!-- velocity模板引擎,用于mybatis-plus代码生成器 -->
    <dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.3</version>
    </dependency>
    <!-- lombok 自动生成会用到-->
    <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.16</version>
    </dependency>
  2. 自动生成代码的Java主程序:参考官网

    // 演示例子,执行 main 方法控制台输入模块表名回车自动生成对应项目目录中
    public class GenerateCode { /**
    * <p>
    * 读取控制台内容
    * </p>
    */
    public static String scanner(String tip) {
    Scanner scanner = new Scanner(System.in);
    StringBuilder help = new StringBuilder();
    help.append("请输入" + tip + ":");
    System.out.println(help.toString());
    if (scanner.hasNext()) {
    String ipt = scanner.next();
    if (StringUtils.isNotBlank(ipt)) {
    return ipt;
    }
    }
    throw new MybatisPlusException("请输入正确的" + tip + "!");
    } public static void main(String[] args) {
    // 代码生成器
    AutoGenerator mpg = new AutoGenerator(); // 1. 全局配置
    GlobalConfig gc = new GlobalConfig();
    // 项目根目录
    String projectPath = System.getProperty("user.dir");
    // 生成代码的输出目录:一般这个就是固定的,这里不用写到具体的哪个包,因为下面会单独配置包名
    gc.setOutputDir(projectPath + "/src/main/java");
    // 生成代码的author
    gc.setAuthor("javalover");
    // 生成代码后,是否自动打开生成的目录:这里我们不需要,因为就是生成到当前项目
    gc.setOpen(false);
    // 设置全局配置
    mpg.setGlobalConfig(gc); // 2. 数据源配置
    DataSourceConfig dsc = new DataSourceConfig();
    dsc.setUrl("jdbc:mysql://localhost:3306/guns?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=CTT&nullCatalogMeansCurrent=true");
    dsc.setDriverName("com.mysql.cj.jdbc.Driver");
    dsc.setUsername("root");
    dsc.setPassword("root");
    mpg.setDataSource(dsc); // 3. 包配置
    PackageConfig pc = new PackageConfig();
    // 设置包名:和上面的输出目录进行拼接(ourDir+parent)
    pc.setParent("cn.stylefeng.guns.modular.business");
    // 检测命令行输入的模块名:和上面的包名进行拼接(outDir+parent+moduleName),生成代码都会放到这个模块下
    pc.setModuleName(scanner("模块名"));
    mpg.setPackageInfo(pc); // 4. 策略配置
    StrategyConfig strategy = new StrategyConfig();
    // 自动生成 实体类的命名:数据库映射到实体类,下划线转驼峰
    strategy.setNaming(NamingStrategy.underline_to_camel);
    // 这里如果不设置,会跟随上面实体类的命名设置
    strategy.setColumnNaming(NamingStrategy.underline_to_camel);
    // 字段注解:这里我们把表字段的注解打开,比如@TableField("car_name")
    strategy.setEntityTableFieldAnnotationEnable(true);
    // 实体类的父类:如果有就配置,记得加包名
    strategy.setSuperEntityClass("cn.stylefeng.roses.kernel.db.api.pojo.entity.BaseEntity");
    // 映射类的父类:如果有就配置,记得加包名
    strategy.setSuperMapperClass("com.baomidou.mybatisplus.core.mapper.BaseMapper");
    // 服务接口的父类:如果有就配置,记得加包名
    strategy.setSuperServiceClass("com.baomidou.mybatisplus.extension.service.IService");
    // 服务实现类的父类:如果有就配置,记得加包名
    strategy.setSuperServiceImplClass("com.baomidou.mybatisplus.extension.service.impl.ServiceImpl");
    // 控制器类的父类:如果有就配置,记得加包名
    // strategy.setSuperControllerClass(""); // lombok:是否开启Lombok的注解,比如@Data,@EqualsAndHashCode(callSuper = true)
    strategy.setEntityLombokModel(true);
    // 控制器的@RestController注解:是否开启,不开启则默认为@Controller
    strategy.setRestControllerStyle(true);
    // 监测命令行的输入:表名
    strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
    // 控制器的请求映射url风格:驼峰转连字符,比如"carList"-> "car-list"
    strategy.setControllerMappingHyphenStyle(true);
    // 设置表的前缀:设置后,生成的类名和Controller的请求映射中就不会包含表前缀
    // 设置后为 @RequestMapping("/gps/car"),而不是@RequestMapping("/gps/gps-car")
    // 类名同理
    strategy.setTablePrefix("gps");
    mpg.setStrategy(strategy); // 5. 配置模板引擎
    // 默认采用velocity模板
    // mpg.setTemplateEngine(new VelocityTemplateEngine());
    mpg.execute();
    }
    }

    启动程序,在命令行依次输入包名,表名,等待运行完成就可以了

    生成后的目录结构如下:

    可以看到,基本的框架都有了

    下面我们看下生成的entity文件:

    Car.java

    /**
    * <p>
    * 车辆管理
    * </p>
    *
    * @author javalover
    * @since 2021-04-22
    */
    @Data
    @EqualsAndHashCode(callSuper = true)
    @TableName("gps_car")
    public class Car extends BaseEntity { private static final long serialVersionUID = 1L; /**
    * 车辆id
    */
    @TableId("car_id")
    private Long carId; /**
    * 所属公司id
    */
    @TableField("company_id")
    private Long companyId; /**
    * 车辆名称
    */
    @TableField("car_name")
    private String carName; /**
    * 车辆种类
    */
    @TableField("car_type")
    private Integer carType; /**
    * 车辆颜色
    */
    @TableField("car_color")
    private String carColor; /**
    * 司机
    */
    @TableField("car_driver")
    private String carDriver; /**
    * 车辆价格
    */
    @TableField("car_price")
    private BigDecimal carPrice; /**
    * 油耗
    */
    @TableField("fuel_consumption")
    private BigDecimal fuelConsumption; /**
    * 车牌号
    */
    @TableField("car_number")
    private String carNumber; /**
    * 车架号
    */
    @TableField("frame_number")
    private String frameNumber; /**
    * 载重
    */
    @TableField("load_weight")
    private BigDecimal loadWeight; /**
    * 车照片
    */
    @TableField("car_img")
    private String carImg; /**
    * 车辆实时定位
    */
    @TableField("car_location")
    private String carLocation;
    }

    可以看到,注释的很详细啊,多好(字段的注释是根据数据库的注释来的)

在线代码生成

就是在第三方的网站,配置各种参数,点击生成就可以了,然后下载到本地

这种方法的好处是,前期不用太多配置,使用方便

缺点就是

  • 需要在线配置一个小型的数据库,上传SQL语句

  • 生成后,需要拉到本地项目中

  • 不够灵活,比如父类的配置等

其实它的缺点就是因为它的简单导致的

这种就比较适合新的项目,想要快速上手体验的朋友

因为在线的操作很简单,这里给出链接,具体操作大家体验下就知道了

在线链接:https://gen.stylefeng.cn/#/createCode

总结

自动生成代码的方式有很多,而这里的只是冰山一角

角1:基于Mybatis-Plus官网的例子(灵活,功能全)

角2:基于第三方的在线生成(简单,上手快)

后记

最后,感谢大家的观看,谢谢

期待官人们的点赞哦

SpringBoot中的自动代码生成 - 基于Mybatis-Plus的更多相关文章

  1. (八)SpringBoot使用mybatis-plus+自动代码生成

    一.SpringBoot使用mybatis-plus+自动代码生成 使用mybatis-plus可以自动帮我们生成通用的 controller,service,dao,mapper 二.加入依赖 &l ...

  2. springboot2.0入门(九)-- springboot使用mybatis-generator自动代码生成

    一.配置文件引入 插件引入,引入 <plugin> <groupId>org.mybatis.generator</groupId> <artifactId& ...

  3. Springboot中的缓存Cache和CacheManager原理介绍

    背景理解 什么是缓存,为什么要用缓存 程序运行中,在内存保持一定时间不变的数据就是缓存.简单到写一个Map,里面放着一些key,value数据,就已经是个缓存了 所以缓存并不是什么高大上的技术,只是个 ...

  4. SpringBoot中设置自定义拦截器

    SpringBoot中设置自动以拦截器需要写一个类继承HandlerInterceptorAdapter并重写preHandle方法 例子 public class AuthorityIntercep ...

  5. SpringBoot中mybatis的自动生成

    1.在pom文件中加入自动生成的插件 <!-- mybatis generator 自动生成代码插件 --> <plugin> <groupId>org.mybat ...

  6. 在springboot中使用Mybatis Generator的两种方式

    介绍 Mybatis Generator(MBG)是Mybatis的一个代码生成工具.MBG解决了对数据库操作有最大影响的一些CRUD操作,很大程度上提升开发效率.如果需要联合查询仍然需要手写sql. ...

  7. JAVA WEB快速入门之从编写一个基于SpringBoot+Mybatis快速创建的REST API项目了解SpringBoot、SpringMVC REST API、Mybatis等相关知识

    JAVA WEB快速入门系列之前的相关文章如下:(文章全部本人[梦在旅途原创],文中内容可能部份图片.代码参照网上资源) 第一篇:JAVA WEB快速入门之环境搭建 第二篇:JAVA WEB快速入门之 ...

  8. springboot中的mybatis是如果使用pagehelper的

    springboot中使用其他组件都是基于自动配置的AutoConfiguration配置累的,pagehelper插件也是一样的,通过PageHelperAutoConfiguration的,这个类 ...

  9. MyBatis学习总结_15_定制Mybatis自动代码生成的maven插件

    ==================================================================================================== ...

随机推荐

  1. Window下Scala开发环境搭建

    在Windows下搭建Scala开发环境,需要做以下几个步骤 1) 安装JDK 2) 安装Scala,并配置环境变量 3) Idea安装并创建Scala 类 1.安装JDK JDK安装,这里不再介绍, ...

  2. Java流程控制:循环结构

    一.简介 顺序结构的程序语句只能被执行一次,如果您想要同样的操作执行多次,就需要使用循环结构. Java中有三种主要的循环结构: 'while'循环 'do...while'循环 'for'循环 在J ...

  3. Java基础语法:JavaDoc

    一.简介 JavaDoc是一种将注释生成HTML文档的技术,它从程序源代码中抽取类.方法.成员等注释形成一个和源代码配套的API帮助文档. 也就是说,只要在编写程序时以一套特定的标签作注释,在程序编写 ...

  4. Django模型层2

    目录 一.聚合查询 聚合函数 二.分组查询 利用group by进行分组查询 三.F与Q查询 1. F类 2. Q类 四.orm字段及参数 五.自定义char字段 六.orm中的事务操作 1. 什么是 ...

  5. COM技术中的VARIANT and VARIANTARG

    VARIANT and VARIANTARG Use VARIANTARG to describe arguments passed within DISPPARAMS, and VARIANT to ...

  6. 调度场算法&&中缀表达式=>后缀表达式

    #include<stdio.h> #include<string.h> int main(void){ char ch,stro[1001],stack[1001]; int ...

  7. HDOJ-1213(简单并查集)

    How many tables HDOJ-1213 #include<iostream> #include<cstring> #include<cstdio> #i ...

  8. 后台开发:核心技术与应用实践 -- C++

    本书介绍的"后台开发"指的是"服务端的网络程序开发",从功能上可以具体描述为:服务器收到客户端发来的请求数据,解析请求数据后处理,最后返回结果. C++编程常用 ...

  9. Java流程控制:三种基本结构

    顺序结构: Java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行顺序结构是最简单的算法结构语句与语句之间,框与框之间是按从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的, ...

  10. LNMP配置——Nginx配置 —— Nginx解析PHP

    一.配置 #vi /usr/local/nginx/conf/vhost/test.com.conf 写入: server { listen 80; server_name test.com test ...