This commit is contained in:
rainerosion 2023-01-07 17:38:05 +08:00
parent 4c1a99c746
commit 2ed21eacc7
26 changed files with 116 additions and 882 deletions

View File

@ -17,16 +17,17 @@ repositories {
dependencies {
implementation 'org.freemarker:freemarker:2.3.31'
implementation 'org.postgresql:postgresql:42.2.19'
implementation 'org.postgresql:postgresql:42.2.27'
implementation 'org.projectlombok:lombok:1.18.20'
implementation 'org.yaml:snakeyaml:1.28'
annotationProcessor 'org.projectlombok:lombok:1.18.20'
implementation 'org.yaml:snakeyaml:1.33'
implementation 'org.apache.commons:commons-lang3:3.12.0'
//mybatis plus gen
implementation 'org.springframework.boot:spring-boot-starter'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'com.baomidou:mybatis-plus-boot-starter:3.4.2'
implementation 'com.baomidou:mybatis-plus-generator:3.4.1'
// implementation 'org.springframework.boot:spring-boot-starter'
// testImplementation 'org.springframework.boot:spring-boot-starter-test'
// implementation 'com.baomidou:mybatis-plus-boot-starter:3.4.2'
// implementation 'com.baomidou:mybatis-plus-generator:3.4.1'
}
test {

View File

@ -1,137 +0,0 @@
package cn.rainss.codegenerator;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
/**
* <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();
// 全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath + "/src/main/java");
gc.setAuthor("jobob");
gc.setOpen(false);
// gc.setSwagger2(true); 实体属性 Swagger2 注解
mpg.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:postgresql://db.timemail.email:5432/timemail");
// dsc.setSchemaName("public");
dsc.setDriverName("org.postgresql.Driver");
dsc.setUsername("postgres");
dsc.setPassword("timemail.email");
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setModuleName(scanner("模块名"));
pc.setParent("com.baomidou.ant");
mpg.setPackageInfo(pc);
// 自定义配置
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
// to do nothing
}
};
// 如果模板引擎是 freemarker
String templatePath = "/templates/mapper.xml.ftl";
// 如果模板引擎是 velocity
// String templatePath = "/templates/mapper.xml.vm";
// 自定义输出配置
List<FileOutConfig> focList = new ArrayList<>();
// 自定义配置会被优先输出
focList.add(new FileOutConfig(templatePath) {
@Override
public String outputFile(TableInfo tableInfo) {
// 自定义输出文件名 如果你 Entity 设置了前后缀此处注意 xml 的名称会跟着发生变化
return projectPath + "/src/main/resources/mapper/" + pc.getModuleName()
+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
});
/*
cfg.setFileCreate(new IFileCreate() {
@Override
public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) {
// 判断自定义文件夹是否需要创建
checkDir("调用默认方法创建的目录,自定义目录用");
if (fileType == FileType.MAPPER) {
// 已经生成 mapper 文件判断存在不想重新生成返回 false
return !new File(filePath).exists();
}
// 允许生成模板文件
return true;
}
});
*/
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);
// 配置模板
TemplateConfig templateConfig = new TemplateConfig();
// 配置自定义输出模板
//指定自定义模板路径注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别
// templateConfig.setEntity("templates/entity2.java");
// templateConfig.setService();
// templateConfig.setController();
templateConfig.setXml(null);
mpg.setTemplate(templateConfig);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setSuperEntityClass("你自己的父类实体,没有就不用设置!");
strategy.setEntityLombokModel(true);
strategy.setRestControllerStyle(true);
// 公共父类
strategy.setSuperControllerClass("你自己的父类控制器,没有就不用设置!");
// 写于父类中的公共字段
strategy.setSuperEntityColumns("id");
strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
strategy.setControllerMappingHyphenStyle(true);
strategy.setTablePrefix(pc.getModuleName() + "_");
mpg.setStrategy(strategy);
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
mpg.execute();
}
}

View File

@ -15,57 +15,66 @@ public class Config {
* 驱动类
*/
public String driverClass;
private String driverClass;
/**
* 数据库用户名
*/
public String username;
private String username;
/**
* 数据库密码
*/
public String password;
private String password;
/**
* 数据库名
*/
public String catalog;
private String catalog;
/**
* 数据库连接地址
*/
public String url;
private String url;
/**
* 包名
*/
public String packageName;
private String packageName;
/**
* 项目名
*/
public String projectName;
private String projectName;
/**
* 表前缀
*/
public String tablePrefix;
private String tablePrefix;
/**
* 表名
*/
private String tableName;
public String mapperPackage;
/**
* 各类的包名
*/
private PackageLocation packageLocation;
public String entityPackage;
private String mapperPackage;
public String poPackage;
private String entityPackage;
public String servicePackage;
private String poPackage;
public String repositoryPackage;
private String servicePackage;
public String resDtoPackage;
private String repositoryPackage;
public String reqDtoPackage;
private String resDtoPackage;
public String controllerpackage;
private String reqDtoPackage;
public String author;
private String controllerpackage;
private String author;
}

View File

@ -0,0 +1,25 @@
package cn.rainss.codegenerator.config;
import lombok.Data;
/**
* configuration package location
*/
@Data
public class PackageLocation {
private String mapper;
private String entity;
private String po;
private String service;
private String repository;
private String resDto;
private String reqDto;
private String controller;
}

View File

@ -51,7 +51,7 @@ public class DatabaseUtil {
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return null;
return new GenerateConfig();
}
/**
* 获取Connection数据库连接对象
@ -65,12 +65,8 @@ public class DatabaseUtil {
String url = config.getGenerate().getUrl();
String username = config.getGenerate().getUsername();
String password = config.getGenerate().getPassword();
if (config == null) {
//抛出异常
}
Class.forName(classDriver);
Connection connection = DriverManager.getConnection(url, username, password);
return connection;
return DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException | SQLException e){
e.printStackTrace();
}

View File

@ -6,7 +6,10 @@ import freemarker.core.ParseException;
import freemarker.template.*;
import org.apache.commons.lang3.StringUtils;
import java.io.*;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
@ -151,17 +154,11 @@ public class GeneratorUtil {
DatabaseUtil instance = DatabaseUtil.getInstance();
List<String> table = instance.getTable();
table.forEach(t -> {
// System.out.println("<<<<< table" + t + " >>>>>");
System.out.println("<<<<< table: " + t + " >>>>>");
try {
List<Column> column = instance.getColumn(t);
generatorCode(column, t);
} catch (SQLException throwables) {
throwables.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
} catch (ClassNotFoundException | SQLException | IOException e) {
e.printStackTrace();
}
});
@ -232,7 +229,7 @@ public class GeneratorUtil {
public static void generatorByTemplate(List<Column> list, String tableName, String type) {
String templatePath = String.format("src/main/resources/template/%s.ftl", toLowerCase(type));
String moduleName;
String secondaryPackage;
String secondaryPackage = null;
String className = tableName;
// data
@ -252,8 +249,8 @@ public class GeneratorUtil {
if (StringUtils.isNotEmpty(CONFIG.getTablePrefix())) {
className = formatTableName(tableName);
}
// 类名首字母大写
className = toUpperCaseFist(className);
// 转换为大驼峰式命名
className = toUpperCaseFist(toCamelCase(className));
switch (type) {
case "po":
secondaryPackage = CONFIG.getPoPackage();

View File

@ -0,0 +1,34 @@
package cn.rainss.codegenerator.utils;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 类型枚举
*/
@AllArgsConstructor
@Getter
public enum TypeEnum {
CONTROLLER("控制器", "controller", "facade"),
PO("持久化实体", "po", "server"),
DOMAIN_SERVICE("领域服务", "domainService", "server"),
APPLICATION_SERVICE("应用层", "applicationService", "server"),
MAPPER("DAO", "mapper", "server"),
REPOSITORY("仓储层", "repository", "server"),
ENTITY("领域实体", "entity", "server"),
RES_DTO("响应体", "resDto", "dto"),
REQ_DTO("请求体", "reqDto", "dto")
;
/**
* 名称
*/
private final String name;
/**
*
*/
private final String template;
/**
* 模块
*/
private final String module;
}

View File

@ -1,20 +0,0 @@
package com.baomidou.ant.timemail.controller;
// import org.springframework.web.bind.annotation.RequestMapping;
// import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 前端控制器
* </p>
*
* @author jobob
* @since 2021-04-19
*/
// @RestController
// @RequestMapping("/timemail/tm-user")
public class TmUserController {
}

View File

@ -1,81 +0,0 @@
package com.baomidou.ant.timemail.entity;
import java.time.LocalDateTime;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
*
* </p>
*
* @author jobob
* @since 2021-04-19
*/
@Data
public class TmUser{
private static final long serialVersionUID = 1L;
/**
* 账户
*/
private String account;
/**
* 用户名
*/
private String name;
/**
* 用户邮箱
*/
private String mail;
/**
* 密码
*/
private String password;
/**
* salt
*/
private String salt;
/**
* 用户状态(0正常 10禁用)
*/
private Integer status;
/**
* 逻辑删除
*/
private Boolean deleted;
/**
* 注册方式(0:邮箱注册,10:手机号注册,20:系统添加)
*/
private Integer regiterType;
/**
* 注册者IP
*/
private Long registerIp;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
/**
* 手机号
*/
private String phone;
}

View File

@ -1,16 +0,0 @@
package com.baomidou.ant.timemail.mapper;
import com.baomidou.ant.timemail.entity.TmUser;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author jobob
* @since 2021-04-19
*/
public interface TmUserMapper extends BaseMapper<TmUser> {
}

View File

@ -1,16 +0,0 @@
package com.baomidou.ant.timemail.service;
import com.baomidou.ant.timemail.entity.TmUser;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 服务类
* </p>
*
* @author jobob
* @since 2021-04-19
*/
public interface ITmUserService extends IService<TmUser> {
}

View File

@ -1,20 +0,0 @@
package com.baomidou.ant.timemail.service.impl;
import com.baomidou.ant.timemail.entity.TmUser;
import com.baomidou.ant.timemail.mapper.TmUserMapper;
import com.baomidou.ant.timemail.service.ITmUserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 服务实现类
* </p>
*
* @author jobob
* @since 2021-04-19
*/
@Service
public class TmUserServiceImpl extends ServiceImpl<TmUserMapper, TmUser> implements ITmUserService {
}

View File

@ -15,6 +15,18 @@ generate:
projectName: timemail
# 前缀
tablePrefix: tm_
# 多表之间使用英文逗号分割 默认为空
tableName:
packageLocation:
mapper: infrastructure.persistence.mapper
entity: domain.model
po: infrastructure.persistence.po
service: domain.service
repository: infrastructure.repository
resDto: dto.response
reqDto: dto.request
controller: interfaces.rest
# mapper
mapperPackage: infrastructure.persistence.mapper
# entity

View File

@ -21,7 +21,7 @@ public class ${class_name} implements Serializable {
<#list columns as column>
/**
* ${column.remarks!'Todo Add comments'}
* ${column.remarks!'// Todo Add comments'}
*/
private ${column.javaType} ${column.columnName};
</#list>

View File

@ -1,41 +0,0 @@
package cn.timemail.email;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* tm_content
* entity
* @author rainerosion
* @date 2021-4-19 22:06:49
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Content implements Serializable {
/**
* 主键编号
*/
private Long id;
/**
* 标题
*/
private String title;
/**
* 内容
*/
private String content;
/**
* Todo Add comments
*/
private Object createTime;
}

View File

@ -1,86 +0,0 @@
package cn.timemail.email;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* tm_user
* entity
* @author rainerosion
* @date 2021-4-19 22:06:49
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class User implements Serializable {
/**
* 主键ID
*/
private Long id;
/**
* 账户
*/
private String account;
/**
* 用户名
*/
private String name;
/**
* 用户邮箱
*/
private String mail;
/**
* 密码
*/
private String password;
/**
* salt
*/
private String salt;
/**
* 用户状态(0正常 10禁用)
*/
private Short status;
/**
* 逻辑删除
*/
private Boolean deleted;
/**
* 注册方式(0:邮箱注册,10:手机号注册,20:系统添加)
*/
private Short regiterType;
/**
* 注册者IP
*/
private Long registerIp;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
/**
* 手机号
*/
private Object phone;
}

View File

@ -1,41 +0,0 @@
package cn.timemail.email;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* tm_content
* entity
* @author rainerosion
* @date 2021-4-19 22:06:49
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Content implements Serializable {
/**
* 主键编号
*/
private Long id;
/**
* 标题
*/
private String title;
/**
* 内容
*/
private String content;
/**
* Todo Add comments
*/
private Object createTime;
}

View File

@ -1,86 +0,0 @@
package cn.timemail.email;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* tm_user
* entity
* @author rainerosion
* @date 2021-4-19 22:06:49
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class User implements Serializable {
/**
* 主键ID
*/
private Long id;
/**
* 账户
*/
private String account;
/**
* 用户名
*/
private String name;
/**
* 用户邮箱
*/
private String mail;
/**
* 密码
*/
private String password;
/**
* salt
*/
private String salt;
/**
* 用户状态(0正常 10禁用)
*/
private Short status;
/**
* 逻辑删除
*/
private Boolean deleted;
/**
* 注册方式(0:邮箱注册,10:手机号注册,20:系统添加)
*/
private Short regiterType;
/**
* 注册者IP
*/
private Long registerIp;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
/**
* 手机号
*/
private Object phone;
}

View File

@ -1,41 +0,0 @@
package cn.timemail.email.domain.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* tm_content
* entity
* @author rainerosion
* @date 2021-4-19 22:06:49
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Content implements Serializable {
/**
* 主键编号
*/
private Long id;
/**
* 标题
*/
private String title;
/**
* 内容
*/
private String content;
/**
* Todo Add comments
*/
private Object createTime;
}

View File

@ -1,16 +0,0 @@
package cn.timemail.email.infrastructure.persistence.po;
import cn.timemail.email.infrastructure.persistence.po.Content;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author rainerosion
* @since 2021-04-19
*/
public interface ContentMapper extends BaseMapper<Content> {
}

View File

@ -1,86 +0,0 @@
package cn.timemail.email.domain.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* tm_user
* entity
* @author rainerosion
* @date 2021-4-19 22:06:49
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class User implements Serializable {
/**
* 主键ID
*/
private Long id;
/**
* 账户
*/
private String account;
/**
* 用户名
*/
private String name;
/**
* 用户邮箱
*/
private String mail;
/**
* 密码
*/
private String password;
/**
* salt
*/
private String salt;
/**
* 用户状态(0正常 10禁用)
*/
private Short status;
/**
* 逻辑删除
*/
private Boolean deleted;
/**
* 注册方式(0:邮箱注册,10:手机号注册,20:系统添加)
*/
private Short regiterType;
/**
* 注册者IP
*/
private Long registerIp;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
/**
* 手机号
*/
private Object phone;
}

View File

@ -1,16 +0,0 @@
package cn.timemail.email.infrastructure.persistence.po;
import cn.timemail.email.infrastructure.persistence.po.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author rainerosion
* @since 2021-04-19
*/
public interface UserMapper extends BaseMapper<User> {
}

View File

@ -1,41 +0,0 @@
package cn.timemail.email.infrastructure.persistence.po;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* tm_content
* po
* @author rainerosion
* @date 2021-4-19 22:06:49
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Content implements Serializable {
/**
* 主键编号
*/
private Long id;
/**
* 标题
*/
private String title;
/**
* 内容
*/
private String content;
/**
* Todo Add comments
*/
private Object createTime;
}

View File

@ -1,86 +0,0 @@
package cn.timemail.email.infrastructure.persistence.po;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* tm_user
* po
* @author rainerosion
* @date 2021-4-19 22:06:49
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class User implements Serializable {
/**
* 主键ID
*/
private Long id;
/**
* 账户
*/
private String account;
/**
* 用户名
*/
private String name;
/**
* 用户邮箱
*/
private String mail;
/**
* 密码
*/
private String password;
/**
* salt
*/
private String salt;
/**
* 用户状态(0正常 10禁用)
*/
private Short status;
/**
* 逻辑删除
*/
private Boolean deleted;
/**
* 注册方式(0:邮箱注册,10:手机号注册,20:系统添加)
*/
private Short regiterType;
/**
* 注册者IP
*/
private Long registerIp;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
/**
* 手机号
*/
private Object phone;
}

View File

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.timemail.email.infrastructure.persistence.po.ContentMapper">
</mapper>

View File

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.timemail.email.infrastructure.persistence.po.UserMapper">
</mapper>