将Navicat右键表【对象信息】-【DDL】的内容转换为JavaBean
生活随笔
收集整理的這篇文章主要介紹了
将Navicat右键表【对象信息】-【DDL】的内容转换为JavaBean
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
將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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux查看端口转发配置文件,Linu
- 下一篇: 《STM32从零开始学习历程》——SPI