将Navicat右键表【对象信息】-【DDL】的内容转换为JavaBean

  • 一、Navicat右键表【对象信息】-【DDL】样式
  • 二、JavaBean样式
  • 三、实现原理
  • 四、源码

一、Navicat右键表【对象信息】-【DDL】样式

CREATE TABLE `test_result` (`id` varchar(60) NOT NULL COMMENT 'id',`taskid` varchar(100) DEFAULT NULL COMMENT '任务编号',`inspection_code` varchar(100) DEFAULT NULL COMMENT '关联操作大类编码',`inspection_param_code` varchar(100) DEFAULT NULL COMMENT '操作项编码',`content1` varchar(255) DEFAULT NULL COMMENT '内容1',`content2` varchar(255) DEFAULT NULL COMMENT '内容2',`content3` varchar(255) DEFAULT NULL COMMENT '内容3',`content4` varchar(255) DEFAULT NULL COMMENT '内容4',`input_val` varchar(1000) DEFAULT NULL COMMENT '输入内容',`dlt` int(10) DEFAULT '0' COMMENT '逻辑删除',`insert_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '插入时间',`last_modify_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '上次修改时间',`update_time` datetime DEFAULT NULL,`oper_type` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

二、JavaBean样式

package com.rhino.common.db;import org.xutils.db.annotation.Column;/*** @author LuoLin* @since Create on 2019/1/3.*/
public class BaseEntity {/*** 是否可用(0可用,1不可用)*/public static final String ENABLED = "enabled";@Column(name = ENABLED)public String enabled;/*** 最后修改时间*/public static final String LAST_MODIFY_TIME = "last_modify_time";@Column(name = LAST_MODIFY_TIME)public String last_modify_time;/*** 创建时间*/public static final String CREATE_TIME = "create_time";@Column(name = CREATE_TIME)public String create_time;
}

三、实现原理

通过读文件,获取关键字内容,写入class类中。

四、源码

这里直接贴出源码,源码注释很全面,这里就不赘述了。

package com.rhino.common.db;import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;import io.reactivex.annotations.NonNull;/*** <p>将Navicat右键表【对象信息】-【DDL】的内容转换为JavaBean</p>** @author LuoLin* @since Create on 2019/1/14.*/
public class EasyCreateJavaBean {/*** 输入配置文件,将Navicat右键表【对象信息】-【DDL】的内容拷贝在该文件中,支持多表操作*/public static final String SOURCE_FILE_PATH = "D:\\Workspace\\KSI\\evaluation360-android\\common\\src\\main\\java\\com\\cnksi\\common\\db\\createJavaBean.sql";/*** JavaBean输出目录*/public static final String OUTPUT_PATH = "D:\\Workspace\\KSI\\evaluation360-android\\login\\src\\main\\java\\com\\cnksi\\evaluation360\\entity";/*** JavaBean所在包名*/public static final String OUTPUT_FILE_PACKAGE_NAME = "com.cnksi.evaluation360.entity";/*** JavaBean的基类包名,可以为空*/
//    public static final String BASE_CLASS_PAKAGE_NAME = "com.cnksi.common.db";public static final String BASE_CLASS_PAKAGE_NAME = null;/*** JavaBean的基类,可以为空*/
//    public static final String BASE_CLASS = "BaseEntity";public static final String BASE_CLASS = null;/*** 用于排除基类已经存在的字段,可以为空*/
//    public static final String[] INVALID_COLUMN_NAME = new String[] {//            "enabled", "last_modify_time", "create_time"
//    };public static final String[] INVALID_COLUMN_NAME = null;/*** Main*/public static void main(String[] args) {createJavaBean(SOURCE_FILE_PATH);}/*** Navicat右键表【对象信息】-【DDL】的内容转换为JavaBean** @param sqlFilePath 文件路径*/public static void createJavaBean(String sqlFilePath) {String sqlFileContent = readFile(sqlFilePath);String[] tableContents = sqlFileContent.split("CREATE ");for (String tableContent : tableContents) {if (tableContent.isEmpty()) {continue;}String tableName = getTableName(tableContent);String className = createClassNameByTableName(tableName);writeFile(OUTPUT_PATH + File.separator + className + ".java", createClassContent(className, tableName, tableContent));}}/*** 获取表名称** @param tableContent 表内容* @return 表名称*/@NonNullpublic static String getTableName(String tableContent) {int start = tableContent.indexOf("TABLE `") + 7;int end = tableContent.indexOf("` (");return tableContent.substring(start, end);}/*** 获取表注释** @param tableContent Navicat右键表【对象信息】-【DDL】的内容转换为JavaBean* @return 表注释*/@NonNullpublic static String getTableComment(String tableContent) {String[] lineContent = tableContent.split("\r\n");int start = lineContent[lineContent.length - 1].indexOf("COMMENT='") + 9;int end = lineContent[lineContent.length - 1].indexOf("';");if (start >= 9) {return lineContent[lineContent.length - 1].substring(start, end);}return "";}/*** 获取主键* @param tableContent Navicat右键表【对象信息】-【DDL】的内容转换为JavaBean* @return 主键*/@NonNullpublic static String getPrimaryKey(String tableContent) {String[] lineContent = tableContent.split("\r\n");for (String line : lineContent) {if (line.contains("PRIMARY KEY")) {int start = line.indexOf("PRIMARY KEY (`") + 14;int end = line.indexOf("`)");return line.substring(start, end);}}return "";}/*** 创建class文件内容** @param className    class名称* @param tableName    表名称* @param tableContent Navicat右键表【对象信息】-【DDL】的内容转换为JavaBean* @return class文件内容*/@NonNullpublic static String createClassContent(String className, String tableName, String tableContent) {StringBuilder stringBuilder = new StringBuilder();stringBuilder.append("package ").append(OUTPUT_FILE_PACKAGE_NAME).append(";\n\n");if (BASE_CLASS_PAKAGE_NAME != null && !BASE_CLASS_PAKAGE_NAME.isEmpty()) {stringBuilder.append("import ").append(BASE_CLASS_PAKAGE_NAME).append(".").append(BASE_CLASS).append(";\n");}stringBuilder.append("import org.xutils.db.annotation.Column;\n");stringBuilder.append("import org.xutils.db.annotation.Table;\n\n");stringBuilder.append(createComment("", getTableComment(tableContent)));stringBuilder.append("@Table(name = \"").append(tableName).append("\")\n");if (BASE_CLASS != null && !BASE_CLASS.isEmpty()) {stringBuilder.append("public class ").append(className).append(" extends ").append(BASE_CLASS).append(" {\n\n");} else {stringBuilder.append("public class ").append(className).append(" {\n\n");}String primaryColumName = getPrimaryKey(tableContent);String[] lineContent = tableContent.split("\r\n");for (int i = 1; i < lineContent.length - 2; i++) {String line = lineContent[i];String columnName = "";String columnComment = "";int start = line.indexOf("  `") + 3;int end = line.indexOf("` ");if (start >= 3) {columnName = line.substring(start, end);}start = line.indexOf(" COMMENT '") + 10;end = line.indexOf("',");if (start >= 10) {columnComment = line.substring(start, end);}boolean valid = true;if (INVALID_COLUMN_NAME != null) {for (String c : INVALID_COLUMN_NAME) {if (c.equals(columnName)) {valid = false;break;}}}if (valid) {boolean isPrimary = primaryColumName.equals(columnName);stringBuilder.append(createColumn(columnName, columnComment, isPrimary));}}stringBuilder.append("\n}");return stringBuilder.toString();}/*** 创建class名称** @param tableName 表名称* @return class名称*/@NonNullpublic static String createClassNameByTableName(String tableName) {String[] ws = tableName.split("_");StringBuilder stringBuilder = new StringBuilder();for (String w : ws) {stringBuilder.append(w.substring(0, 1).toUpperCase()).append(w.substring(1, w.length()));}stringBuilder.append("Entity");return stringBuilder.toString();}/*** 创建注释** @param tabSpace 左边间隔* @param comment  注释名称* @return string*/@NonNullpublic static String createComment(String tabSpace, String comment) {return new StringBuilder().append(tabSpace).append("/**\n").append(tabSpace).append(" * ").append(comment).append("\n").append(tabSpace).append(" */\n").toString();}/*** 创建字段** @param columnName    字段名称* @param columnComment 字段注释* @return string*/@NonNullpublic static String createColumn(String columnName, String columnComment, boolean isPrimary) {StringBuilder stringBuilder = new StringBuilder();stringBuilder.append(createComment("    ", columnComment));stringBuilder.append("    public static final String ").append(columnName.toUpperCase()).append(" = \"").append(columnName).append("\";\n");if (isPrimary) {stringBuilder.append("    @Column(name = ").append(columnName.toUpperCase()).append(", isId = true)\n");} else {stringBuilder.append("    @Column(name = ").append(columnName.toUpperCase()).append(")\n");}stringBuilder.append("    public String ").append(columnName).append(";\n");return stringBuilder.toString();}/*** 读文件** @param filePath 文件路径* @return 文件内容*/public static String readFile(String filePath) {try {int length;byte[] bytes = new byte[1024];FileInputStream mFileInputStream = new FileInputStream(filePath);ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();while ((length = mFileInputStream.read(bytes)) != -1) {arrayOutputStream.write(bytes, 0, length);}mFileInputStream.close();arrayOutputStream.close();return new String(arrayOutputStream.toByteArray());} catch (IOException e) {e.printStackTrace();}return null;}/*** 写文件** @param filePath    文件路径* @param fileContent 文件内容* @return true 写入成功*/public static boolean writeFile(String filePath, String fileContent) {System.out.println("输出文件:" + filePath);FileOutputStream mFileOutputStream;try {mFileOutputStream = new FileOutputStream(filePath);mFileOutputStream.write(fileContent.getBytes());mFileOutputStream.close();} catch (Exception e) {e.printStackTrace();return false;}return true;}
}

将Navicat右键表【对象信息】-【DDL】的内容转换为JavaBean相关推荐

  1. java快速创建dto_根据数据库表对象信息快速建立Dto类详解

    整体思路 1.进入数据库,查看表信息,复制表信息中的数据库字段部分 2.利用java代码读取剪贴板内容 3.切割替换字符串,把字段注释转成java文档注释,把下划线改成驼峰命名规则 直接附代码,可以直 ...

  2. navicat查询oracle表结构,利用Navicat Premium导出数据库表结构信息至Excel的方法

    因为要编写设计文档,需要用到数据库表结构,想要在word文档中以二维表格的形式展示,故借助Excel形成二维表格样式,还是很方便的样子! 1.新建查询,并将以下SQL语句修改至需要 SELECT CO ...

  3. 在一个电子商务网站应用中,涉及的实体信息类有很多,比如用户类User和用户地址类Address; 而每一个实体类的对象信息要存储到相应的数据库表中,如userTable和addressTable。

      在一个电子商务网站应用中,涉及的实体信息类有很多,比如用户类User和用户地址类Address; 而每一个实体类的对象信息要存储到相应的数据库表中,如userTable和addressTable. ...

  4. Navicat查看表的sql语句

    前言 记录如何在navicat中查看表的sql语句 Navicat中查看SQL语句步骤 1.Navicat数据库连接后,在表名上单击右键,在弹出菜单里点击对象信息 2.此时点击DDL选项卡,就可以看到 ...

  5. ztree获取勾选节点数据并且与表单信息合并

    分别获取表单数据和ztree数据简单,但是如何把他们合并成一个合理的json数据? 解决方案: $('#save').click(function () {var nodes = zTree.getC ...

  6. java 页面输出一个页面_java学习之:一个完整页面输出信息的过程(以输出Doctor表中信息为例)...

    最近在练习java程序,总结一下从数据库查询信息并输出到jsp页面的过程.主要数据处理在src.cn.javatest包下面 项目预览 1,配置项目根目录src目录下的druid.properties ...

  7. GCC 生成的符号表调试信息剖析

    GCC把C语言源文件('.c')编译成汇编语言文件('.s'),汇编器把汇编语言文件翻译成目标文件('.o'),最后由链接器链接所有的目标文件和有关的库生成可执行文件('a.out'). 如打开'-g ...

  8. 更新SQL Server实例所有数据库表统计信息

    引出问题 自从上次菜鸟为老鸟解决了<RDS SQL SERVER 解决中文乱码问题>问题,老鸟意犹未尽,决定再想个招来刁难刁难菜鸟:"我最近做T-SQL性能调优的时候,经常发现执 ...

  9. mysql怎么直接显示对象信息_对象保存进MySQL数据库,从MySQL中读取出对象信息的源码...

    数据库名:db_file_test 表名:obj 实体类: package com.bean; import java.io.Serializable; public class User imple ...

最新文章

  1. 如何在C中为一个数组分配空间?
  2. CocoaPods 错误解决 Attempt to read non existent folder
  3. gRPC源码分析2-Server的建立
  4. 第50讲:Scrapy 部署不用愁,Scrapyd 的原理和使用
  5. 优酷电视剧爬虫代码实现一:下载解析视频网站页面(3)补充知识点:htmlcleaner使用案例...
  6. 北工大计算机网络基础期末考试,2013北工大计算机网络应用复习提纲整理版.doc...
  7. MySQL5.6 部署MHA
  8. java - rest-assured 接口测试
  9. 从《Java核心技术卷Ⅱ》看Java操作pdf的工具类itext
  10. putty中文版 v0.61中文绿色软件
  11. 【毕业设计】python+opencv+机器学习车牌识别
  12. Markdown设置自动生成目录及序号分级标准
  13. steam的游戏id怎么查?
  14. Neyman-Pearson 奈曼-皮尔逊决策分析
  15. Redis集群启动时发生如下错误:Node hadoop103:7002 replied with error: ERR Invalid node address specified: hadoop1
  16. python写打飞机游戏
  17. 融创年报再获佳绩,“地产+”业务快速崛起,融创天花板在哪里?
  18. 无法加载文件 XXX,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft问题解决
  19. 看了就会的浏览器帧原理
  20. 微信公众号视频录制开发 踩坑汇总

热门文章

  1. 学校校园学生成绩管理系统 毕业设计毕设源码毕业论文开题报告参考(1)系统功能概要
  2. 软件测试 入门理论丶
  3. 在android X(安卓10版本)运行创建父文件夹失败,解决办法
  4. 偏移地址,偏移量,基址寻址
  5. F3飞控下载程序方式
  6. windows 预览SVG缩略图
  7. 4.COM使用实例——WMI的使用
  8. 微信小程序连接本机(localhost)后台测试
  9. linux编译命令——make -j8
  10. 【光学】基于matlab迈克尔逊干涉仪动态仿真【含Matlab源码 2054期】