Skip to content

A web application to generate Java source code with spring-boot and mybatis-plus. Also, The class of Domain,Mapper,XML of Mapper Interface,Service,Controller are included. You can change the data source what you want to generate for your project in app running without restart this code -generator application.

Weasley-J/code-generator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

代码生成服务

需要单体的直接在开发电脑上运行的请移步feature_单体应用(无nacos)分支

基于人人开源项目二次开发,做了大量提升优化:

  1. 集成nacos配置中心
  2. 支持不重启代码生成服务动态刷新com.zaxxer.hikari.HikariDataSource数据连接池更换所需生成基础业务代码的数据库,意味着你可以不重启服务动态切换任意数据库:MySQL -> MySQL, MySQL -> Oracle, Oracle-> PostgreSQL, PostgreSQL -> MySQL, ...
  3. 支持不重启代码生成服务动态刷新数据库基础数据类型和java基础包装类型的映射关系,见配置文件:generator.properties
  4. Controller数据返回Result.java包装类类去这里下载
  5. 分页参数相关类:PageHandler.javaPageParam.javaPageWrapper.java
  6. JDK8 or latest required
  7. LocalDateTime, LocalDate的序列化、反序列化至少需要jackson-jsr310以上maven依赖模块, springboot 版本大于等于 springboot 2.4.x不需要

核心配置

资源结构:

image-20210911233940569

  • bootstrap.yml
  1. 从配置中心加载配置文件元数据
  2. 提前去nacos中的创建对应的命名空间,配置信息参看如下:
spring:
  application:
    name: lejing-generator
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        group: DEFAULT_GROUP
        namespace: b3bf69ba-f696-4479-aae1-94807a56eb90
        refresh-enabled: true
        file-extension: yml
        shared-configs:
          - application.yml
        extension-configs:
          - data-id: datasource.yml
            group: DEFAULT_GROUP
            refresh: true
          - data-id: generator.properties
            group: DEFAULT_GROUP
            refresh: true

说明:

(1)spring-cloud-alibaba-starters版本:2021.1

(2)nacos版本: 2.0.3

参考图:

image-20210911235730813

image-20210911235851616

完成以上操作,你的nacos已经配置好了, 接下来你只需要动态变更datasource.ymlgenerator.properties里面的配置数据即可

  • datasource.yml
  1. 做为nacos配置文件的dataId动态切换数据库
spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://192.168.40.132:3306/lejing_job?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
#指定要生成代码的数据库类型, 可选值: MYSQL, ORACLE, SQLSERVER, POSTGRESQL, MONGODB
code:
  generator:
    db-type: MYSQL

#mongodb:
#  host: localhost
#  port: 27017
#  auth: false #是否使用密码验证
#  username: admin
#  password: 123456
#  source: 123456
#  database: mongodb_test
  • generator.properties
#
# 代码生成配置信息
#
#域名|组织名取反
mainPath=cn.alphahub
#包名
package=cn.alphahub.mall
#模块名称
moduleName=sys
#作者名字
author=Weasley J
#作者邮箱
email=1432689025@qq.com
#表前缀(指定表前缀生成代码的java类名不会包含表前缀, 不指定表前缀表示类名包含表前缀, 如: sys_)
tablePrefix=
#代码生成后下载的zip包名称
codeZipFileName=lejing-job
#数据库的数据类型给与Java的数据类型对应关系
enum=String
tinyint=Integer
smallint=Integer
mediumint=Integer
int=Integer
integer=Integer
bigint=Long
float=Float
double=Double
decimal=BigDecimal
bit=Boolean
char=String
varchar=String
tinytext=String
text=String
mediumtext=String
longtext=String
longblob=String
datetime=LocalDateTime
timestamp=LocalDateTime
date=LocalDate
time=LocalTime
NUMBER=Integer
INT=Integer
INTEGER=Integer
BINARY_INTEGER=Integer
LONG=String
FLOAT=Float
BINARY_FLOAT=Float
DOUBLE=Double
BINARY_DOUBLE=Double
DECIMAL=BigDecimal
CHAR=String
VARCHAR=String
VARCHAR2=String
NVARCHAR=String
NVARCHAR2=String
CLOB=String
BLOB=String
DATE=LocalDateTime
DATETIME=LocalDateTime
TIMESTAMP=LocalDateTime
TIMESTAMP(6)=LocalDateTime
int8=Long
int4=Integer
int2=Integer
numeric=BigDecimal
nvarchar=String

这个配置文件注释很细,相信你一看就懂,不做过多说明

项目说明

  • 在线生成domainxmlmapperservicecontroller、前端vue文件、jssql代码,减少70%以上的开发任务, 通常情况下删除生成的controller文件, 然后根据自己的业务场景编写对应的业务接口,持久层基于mybatis-plus
  • 整合smart-doc,执行项目的 mvn package 可直接输出Restful api,支持调试,你可能需要在你的项目中引入lejing-common/lejing-common-base-public模块和配置smart-doc.json文件,smart-doc是一个不错的api文档生成、管理工具。

image-20210912002146693

  • 生成的接口:获取xx分页列表、获取xx详情、保存xx、修改xx、批量删除xx

image-20210228214229671

image-20210228214348571

本地部署

  • 通过git下载源码:
git clone https://github.com/Weasley-J/lejing-mall
  • 安装配置好nacos
  1. 创建对应的命名空间,直接从项目文件lejing-generator/src/main/resources/bootstrap.yml里面复制对应的参数即可。

image-20210912000740199

  1. 创建命名空间对应的配置文件,元数据直接从lejing-generator/src/main/resources/下面复制,改成自己的业务数据库。

image-20210912001057849

  • 修改application.yml,更新MySQL账号和密码、数据库名称,修改成你自己的业务数据库连接配置。
spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://192.168.40.132:3306/lejing_job?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
#指定要生成代码的数据库类型, 可选值: MYSQL, ORACLE, SQLSERVER, POSTGRESQL, MONGODB
code:
  generator:
    db-type: MYSQL

#mongodb:
#  host: localhost
#  port: 27017
#  auth: false #是否使用密码验证
#  username: admin
#  password: 123456
#  source: 123456
#  database: mongodb_test
  • 修改generator.properties文件,重点修改下面这几项:
#
# 代码生成配置信息
#
#域名|组织名取反
mainPath=cn.alphahub
#包名
package=cn.alphahub.mall
#模块名称
moduleName=coupon
#作者
author=Weasley J
#email
email=1432689025@qq.com
#表前缀(指定表前缀生成代码的java类名不会包含表前缀, 不指定表前缀表示类名包含表前缀, 如: sms_)
tablePrefix=sms_
#代码生成后下载的zip包名称
codeZipFileName=lejing-coupon
# ...
  • Eclipse、IDEA运行CodeGeneratorApplication.java,则可启动项目
  • 项目访问路径:http://localhost:8080

演示效果图: image-20210912001738403

知识点分享

  1. nacos里面的dataIdxxx.properties的配置文件如何转为项目中java代码里面的Properties对象
import cn.alphahub.mall.generator.utils.BizException;
import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.PropertyKeyConst;
import com.alibaba.nacos.api.config.ConfigService;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.core.io.support.PropertiesLoaderUtils;
import org.springframework.stereotype.Service;

import java.io.StringReader;
import java.util.Properties;

/**
 * 代码生成核心类
 *
 * @author Mark sunlightcs@gmail.com, lwj
 */
@Data
@Slf4j
@Service
@RefreshScope
public class SysGeneratorService {

    @Value("${spring.cloud.nacos.server-addr:127.0.0.1:8848}")
    private String serverAddr;

    @Value("${spring.cloud.nacos.config.namespace:}")
    private String namespace;

    private String dataId = "generator.properties";

    private String group = "DEFAULT_GROUP";

    /**
     * 将nacos中存储的Properties配置文件取出来
     * <p>代码生成配置信息
     *
     * @return nacos中存储的Properties配置文件
     */
    public Properties getGeneratorProperties() {
        Properties queryProperties = new Properties();
        queryProperties.put(PropertyKeyConst.SERVER_ADDR, serverAddr);
        queryProperties.put(PropertyKeyConst.NAMESPACE, namespace);
        try {
            ConfigService configService = NacosFactory.createConfigService(queryProperties);
            String config = configService.getConfig(dataId, group, 3000L);
            if (StringUtils.isNotBlank(config)) {
                Properties properties = new Properties();
                properties.load(new StringReader(config));
                return properties;
            } else {
                return PropertiesLoaderUtils.loadAllProperties("generator.properties");
            }
        } catch (Exception e) {
            throw new BizException("获取配置文件失败,", e);
        }
    }
}

上面的getGeneratorProperties()方法用来将动态监听generator.properties配置信息的改变,并且将其转换为java.util.Properties对象供其他业务类调用,读取方式使用NacosFactory直接实时读取最新的配置数据,其中的PropertiesLoaderUtils类为spring提供的工具类,直接读取classpath下的xxx.properties文件然后返回java.util.Properties对象。

About

A web application to generate Java source code with spring-boot and mybatis-plus. Also, The class of Domain,Mapper,XML of Mapper Interface,Service,Controller are included. You can change the data source what you want to generate for your project in app running without restart this code -generator application.

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published