package com.example.utils.generator;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.db.Db;
import cn.hutool.db.Entity;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.alibaba.druid.pool.DruidDataSource;
import org.assertj.core.util.Lists;
import java.math.BigDecimal;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* JPA代码生成器
* @date 2021-3-10
*/
public class JpaCodeGenerator {
private static final DruidDataSource ds = new DruidDataSource();
private static final String schemaName = "test"; // 数据库名称,必填
private static final String[][] tables = {{"t_category", "Category"}}; // 必填,第一个是数据库表名,第二个是实体类的名字,也就是别名
private static final String modelName = "权限"; // 必填
static {
// 必填
ds.setUrl("jdbc:mysql://localhost:3306/" + schemaName + "?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2b8");
ds.setUsername("root");
ds.setPassword("123456");
}
private static final String BaseFilePath = System.getProperty("user.dir") + "/src/main/java/com/example/";
private static final String basePackageName = "com.example";
private static final String space4 = " ";
private static final String space5 = " ";
private static final String space6 = " ";
public static void main(String[] args) throws Exception {
for (String[] table : tables) {
if (table.length < 2 || StrUtil.isBlank(table[0])) {
System.err.println("请完善配置");
return;
}
String entityName = getEntityName(table);
// 创建entity
createEntity(table[0], entityName);
createDao(entityName);
createService(entityName);
createController(entityName);
// html
createVueHtml(entityName, table[0]);
}
}
/**
* 获取数据库对象
*
* @param tableName
* @return
* @throws SQLException
*/
static List<TableColumn> getTableColumns(String tableName) throws SQLException {
String sql = "SELECT table_name,column_name,data_type, column_comment FROM information_schema.COLUMNS WHERE table_schema = ? and table_name = ?";
List<Entity> user = Db.use(ds).query(sql, schemaName, tableName);
List<TableColumn> columnList = Lists.newArrayList();
for (Entity entity : user) {
TableColumn tableColumn = new TableColumn();
tableColumn.setTableName(entity.getStr("table_name"));
tableColumn.setColumnName(entity.getStr("column_name"));
tableColumn.setDataType(convertDataType(entity.getStr("data_type")));
tableColumn.setColumnComment(entity.getStr("column_comment"));
columnList.add(tableColumn);
}
return columnList;
}
/**
* 生成entity
*
* @throws SQLException
*/
static void createEntity(String tableName, String entityName) throws SQLException {
List<TableColumn> columnList = getTableColumns(tableName);
StringBuilder entityHeadBuild = StrUtil.builder()
.append("package ").append(basePackageName).append(".entity;\n\n")
.append("import java.math.BigDecimal;\n")
.append("import javax.persistence.*;\n");
StringBuilder entityBodyBuild = StrUtil.builder()
.append("@Entity\n").append("@Table(name = \"").append(tableName).append("\")\n")
.append("public class ").append(entityName).append(" {\n")
.append(space4).append("/**\n")
.append(space6).append("*").append(" 主键\n")
.append(space6).append("*/\n")
.append(space4).append("@Id\n")
.append(space4).append("@GeneratedValue(strategy = GenerationType.IDENTITY)\n")
.append(space4).append("private Long id;\n\n");
for (TableColumn tableColumn : columnList) {
String columnName = tableColumn.getColumnName();
if (!"id".equals(columnName)) {
// 注释
if (StrUtil.isNotBlank(tableColumn.getColumnComment())) {
entityBodyBuild
.append(space4).append("/**\n")
.append(space6).append("* ").append(tableColumn.getColumnComment()).append(" \n")
.append(space6).append("*/\n");
}
entityBodyBuild.append(space4).append("@Column(name = \"").append(columnName).append("\")\n")
.append(space4).append("private ").append(tableColumn.getDataType()).append(" ").append(StrUtil.toCamelCase(columnName)).append(";\n\n");
}
}
// 查看是否需要额外导入包
boolean dateExists = columnList.stream().anyMatch(tableColumn -> tableColumn.getDataType().equals("Date"));
if (dateExists) {
entityHeadBuild.append("import java.util.Date;\n");
}
entityHeadBuild.append("\n");
for (TableColumn tableColumn : columnList) {
String columnUpperName = toCamelFirstUpper(tableColumn.getColumnName());
String columnName = StrUtil.toCamelCase(tableColumn.getColumnName());
String dataType = tableColumn.getDataType();
entityBodyBuild.append(space4).append("public ").append(dataType).append(" get").append(columnUpperName).append("() {\n")
.append(space4).append(space4).append("return ").append(columnName).append(";\n")
.append(space4).append("}\n\n")
.append(space4).append("public void set").append(columnUpperName).append("(").append(dataType).append(" ").append(columnName).append(") {\n")
.append(space4).append(space4).append(" this.").append(columnName).append(" = ").append(columnName).append(";\n")
.append(space4).append("}\n\n");
}
entityBodyBuild.append("}");
FileUtil.writeString(entityHeadBuild.append(entityBodyBuild).toString(), BaseFilePath + "/entity/" + entityName + ".java", "UTF-8");
System.out.println(entityName + "Entity生成成功!");
}
/**
* 生成dao
*/
static void createDao(String entityName) {
StringBuilder build = StrUtil.builder().append("package com.example.dao;\n\n")
.append("import com.example.entity.").append(entityName).append(";\n")
.append("import org.springframework.data.jpa.repository.JpaRepository;\n")
.append("import org.springframework.data.jpa.repository.JpaSpecificationExecutor;\n")
.append("import org.springframework.stereotype.Repository;\n\n")
.append("@Repository\n")
.append("public interface ").append(entityName).append("Dao extends JpaRepository<").append(entityName).append(", Long>, JpaSpecificationExecutor<").append(entityName).append("> {\n\n")
.append("}");
FileUtil.writeString(build.toString(), BaseFilePath + "/dao/" + entityName + "Dao" + ".java", "UTF-8");
System.out.println(entityName + "Dao生成成功!");
}
/**
* 生成service
*/
static void createService(String entityName) {
String lowerName = entityName.substring(0, 1).toLowerCase() + entityName.substring(1);
String daoUpperName = entityName + "Dao";
String daoLowerName = lowerName + "Dao";
StringBuilder build = StrUtil.builder().append("package com.example.service;\n\n")
.append("import org.springframework.data.domain.Page;\n")
.append("import org.springframework.data.domain.PageRequest;\n")
.appe

manylinux
- 粉丝: 4788
- 资源: 2900
最新资源
- 后端管理_权限控制_用户聊天_附件管理_系统开发框架_1742206257.zip
- 运维_Django_Vue_自动化管理平台_1742203852.zip
- 前后端分离_WordPress_Nuxtjs_博客主题_Xu_1742206218.zip
- 计算机网络_在线考试系统_试卷答题_教育评估与实践训练_1742199015.zip
- 后端框架_Laravel_前端MVVM_Vue_管理系统_1742205815.zip
- xiubug_sosout_1742211399.zip
- 互联网技术_前后端分离_Nodejs_演讲整理_知识分享_1742204068.zip
- 由于我无法直接查看图片内容但根据您提供的描述和格式要求我可以_1742211680.zip
- 博客系统_SpringBoot_Vue_简洁美观_学习实践_1742198971.zip
- 电商_Spring_Boot_Vue_商城系统开发框架_1742199992.zip
- 人力资源_SpringBoot_Vue_管理系统_脚手架_1742198966.zip
- 后台管理_前后端分离_Laravel_Vue_RBAC权限__1742211290.zip
- 进销存_SpringBoot_vue-element-adm_1742206235.zip
- 前端开发_Vue_ThinkPHP_管理系统框架_1742209439.zip
- 前端开发_Vue_ThinkPHP_管理系统框架_1742199898.zip
- 后台管理_前后端分离_Laravel-Vue_快速开发框架_1742204747.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


