开源项目

SingleBoot教程(二):代码生成器使用

2021-04-01  本文已影响0人  后端技术学习分享

本文是single-demo-boot项目的教程分享。介绍代码生成器的使用方法

代码生成器的基本原理是,开发人员根据业务编写实体类(Entity),然后执行代码生成逻辑,系统将解析实体类字段,并由此生成Dao、Service接口、Service实现类、Controller控制器、增删改查前端代码、前端路由及接口配置、实体类建表sql和相关菜单、功能、API的sql记录。

比如开发人员现在需要做一个客户管理功能,客户信息里包含姓名、年龄、两个字段。那么我们就需要写一个符合规范的实体类,该类放于com.spz.demo.singleboot.entity包下

当实体类较多时,开发人员可能需要对众多实体类进行分类,比如系统有关的实体类均放到com.spz.demo.singleboot.entity.system包下; 测试有关的放在com.spz.demo.singleboot.entity.test包下; 也有部分实体类直接放com.spz.demo.singleboot.entity目录下,不需要按目录隔开存。代码生成器遇到非entity包下的实体类时,将会在生成目标代码文件时也进行包分隔。例如Book实体类,存放于com.spz.demo.singleboot.entity.file包下,则生成的控制器类则会放在com.spz.demo.singleboot.controller.file包下,并且该类的RequestMapping根路径为"/file"

现在以客户实体类(Customer.java)和书本实体类(Book.java)为例演示代码生成器的使用方法

代码生成器相关配置

在application.properties文件中配置,该配置文件运行于local环境。建议只配置generate.project.rootPathgenerate.out.path这两项,其他的建议不要修改

# 代码生成器配置
# 【需要配置】项目根路径(绝对路径),简单地说就是项目拉下来是一个目录,这里配置的就是拉下来目录的绝对路径
generate.project.rootPath=C:/Users/spz/WORK/ME_PRO/single-java-demo
# 【需要配置】前端代码、sql语句文件输出路径(绝对路径)
generate.out.path=C:/Users/spz/WORK/ME_PRO/single-java-demo/generate/
# 作者
generate.doc.author=spzmmd
# 注释时间
generate.doc.date=2021/02/01
# 项目根包路径(建议不要修改)
generate.project.package=com.spz.demo.singleboot
# 实体类存放包路径(建议不要修改)
generate.scan.package=entity
# 实体类Bean代码生成存放包相对路径
generate.out.package.bean=bean
# 控制器代码生成存放包相对路径
generate.out.package.controller=controller
# mapper接口代码生成存放包相对路径
generate.out.package.dao=dao
# Service接口代码生成存放包相对路径
generate.out.package.service=service
# Service实现类代码生成存放包相对路径
generate.out.package.serviceimpl=serviceimpl

编写实体类Entity

package com.spz.demo.singleboot.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.spz.demo.singleboot.core.annotation.EntityDoc;
import com.spz.demo.singleboot.core.entity.BasicEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 顾客实体类
 * 用于代码生成器测试
 * @author spzmmd
 * @date 2019/05/15
 */
@EntityDoc(isClass = true, note = "顾客")
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("biz_customer")
public class Customer extends BasicEntity {

    /**
     * 姓名
     */
    @EntityDoc(note = "姓名")
    private String name;

    /**
     * 年龄
     */
    @EntityDoc(note = "年龄")
    private Integer age;

}

package com.spz.demo.singleboot.entity.file;

import com.baomidou.mybatisplus.annotation.TableName;
import com.spz.demo.singleboot.core.annotation.EntityDoc;
import com.spz.demo.singleboot.core.entity.BasicEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 书籍实体类
 * 用于代码生成器测试
 * @author spzmmd
 * @date 2019/05/15
 */
@EntityDoc(isClass = true, note = "书籍")
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("biz_book")
public class Book extends BasicEntity {

    /**
     * 名称
     */
    @EntityDoc(note = "名称")
    private String name;

    /**
     * 作者
     */
    @EntityDoc(note = "作者")
    private String author;

}

  1. 实体类上必须声明如下注解
// 代码生成器需要从此注解的note字段得知该类名称注释,注意该字段在类上声明时,需要注明isClass为true
@EntityDoc(isClass = true, note = "顾客")

// Lombok注解,用于自动生成get、set方法及相关构造器
@Data
@NoArgsConstructor
@AllArgsConstructor

// Mybatis注解,用于声明实体类对应的数据库表名称
// 【!】数据库表名不要使用 sys_ 前缀,这是系统自带数据表的前缀,在生成sql时系统会自动跳过表面带有该前缀的实体类
@TableName("biz_customer")
  1. 实体类必须继承 com.spz.demo.singleboot.core.entity.BasicEntity
    BasicEntity类包含了主键字段(code)、数据有效字段、记录创建时间字段、记录修改时间字段,开发人员建立新实体类时无需再声明。BasicEntity类字段如下图:(关于系统自动设置创建时间、修改时间和数据有效字段的逻辑请看此类:com.spz.demo.singleboot.core.config.MybatisPlusMetaObjectHandler)

    image
  2. 实体类字段上必须声明@EntityDoc(note = "xxx")注解,并设置其note为字段注释名称
    代码生成器需要读取EntityDoc注解里的note字段来获得字段的注释名称,用于前端输入框显示等场景

  3. 实体类里基本类型的字段,必须使用包装类型,如int,请换成Integer

  4. 实体类存放示例


    image

生成代码

将项目运行起来,然后访问接口 http://host:port/tool/codeGenerate?needSqlInsert=true 即可执行代码生成,注意多次调用接口并needSqlInsert传true会导致数据库数据重复,所以建议所有实体类编写完成后,再执行一次needSqlInsert为true的接口。
实体类编写完成后,即可运行代码生成器生成代码(生成过程中会输出日志供查看生成情况);代码生成后,在相关目录下可看见生成的代码:

实体类sql建表

使用generate/sql目录下的tableSqlList.sql文件进行建表(注意前提是使用doc/sql目录下的sql文件初始化过了数据库)


image

配置前端

运行项目并配置菜单

运行项目后,还需要对当前角色配置有权限的菜单和功能,才能使用到代码生成器生成的顾客管理和书籍管理功能

上一篇 下一篇

猜你喜欢

热点阅读