屬于圖像編碼的編碼方式 編碼方式( 三 )


1.查詢表格信息
首先,我們要從數據庫中拿到我們生成代碼所需要的表和列相關信息 。
| 1.1.查詢表信息
查詢表信息語句:
select t.table_name as '表名稱', t.table_comment as '表備注'from information_schema.tables twhere t.table_schema = ?and t.table_type = 'BASE TABLE'and t.table_name = ?;其中,第1個問號賦值數據庫名稱,第2個問號賦值表名稱 。
查詢表信息結果:

屬于圖像編碼的編碼方式  編碼方式

文章插圖
| 1.2.查詢列信息
查詢列信息語句:
select c.column_name as '列名稱', c.column_comment as '列備注', c.data_type as '數據類型', c.character_maximum_length as '字符長度', c.numeric_precision as '數字精度', c.numeric_scale as '數字范圍', c.column_default as '', c.is_nullable as '是否可空', c.column_key as '列鍵名'from information_schema.columns cwhere c.table_schema = ?and c.table_name = ?order by c.ordinal_position;其中,第1個問號賦值數據庫名稱,第2個問號賦值表名稱 。
查詢列信息結果:
屬于圖像編碼的編碼方式  編碼方式

文章插圖
2.編寫生成代碼
| 2.1.編寫生成模型類代碼
/** 生成模型類文件函數 */private void generateModelClassFile(File dir, Table table, List<Column> columnList) throws Exception { try (PrintWriter writer = new PrintWriter(new File(dir, className + "DO.java"))) { String className = getClassName(table.getTableName()); String classComments = getClassComment(table.getTableComment()); writer.println("package " + groupName + "." + systemName + ".database;"); ...... writer.println("/** " + classComments + "DO類 */"); writer.println("@Getter"); writer.println("@Setter"); writer.println("@ToString"); writer.println("public class " + className + "DO {"); for (Column column : columnList) { String fieldType = getFieldType(column); String fieldName = getFieldName(column.getColumnName()); String fieldComment = getFieldComment(column); writer.println("\t/** " + fieldComment + " */"); writer.println("\tprivate " + fieldType + " " + fieldName + ";"); } writer.println("}"); }}| 2.2.編寫生成 DAO 接口代碼
/** 生成DAO接口文件函數 */private void generateDaoInterfaceFile(File dir, Table table, List<Column> columnList, List<Column> pkColumnList) throws Exception { try (PrintWriter writer = new PrintWriter(new File(dir, className + "DAO.java"))) { String className = getClassName(table.getTableName()); String classComments = getClassComment(table.getTableComment()); writer.println("package " + groupName + "." + systemName + ".database;"); ...... writer.println("/** " + classComments + "DAO接口 */"); writer.println("public interface " + className + "DAO {"); writer.println("\t/** 獲取" + classComments + "函數 */"); writer.print("\tpublic " + className + "DO get("); boolean isFirst = true; for (Column pkColumn : pkColumnList) { if (!isFirst) { writer.print(", "); } else { isFirst = false; } String fieldType = getFieldType(pkColumn); String fieldName = getFieldName(pkColumn.getColumnName()); writer.print("@Param(\"" + fieldName + "\") " + fieldType + " " + fieldName); } writer.println(");"); ...... writer.println("}"); }}| 2.3.編寫生成 DAO 映射代碼
/** 生成DAO映射文件函數 */private void generateDaoMapperFile(File dir, Table table, List<Column> columnList, List<Column> pkColumnList) throws Exception { try (PrintWriter writer = new PrintWriter(new File(dir, className + "DAO.xml"))) { String className = getClassName(table.getTableName()); String classComments = getClassComment(table.getTableComment()); writer.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); ...... writer.println("<!-- " + classComments + "映射 -->"); writer.println("<mapper namespace=\"" + groupName + "." + systemName + ".database." + className + "DAO\">"); writer.println("\t<!-- 所有字段語句 -->"); writer.println("\t<sql id=\"fields\">"); if (CollectionUtils.isNotEmpty(columnList)) { boolean isFirst = true; String columnName = getColumnName(pkColumn.getColumnName()); for (Column column : columnList) { if (isFirst) { isFirst = false; writer.println("\t\t" + columnName); } else { writer.println("\t\t, " + columnName); } } } writer.println("\t</sql>"); writer.println("\t<!-- 獲取" + classComments + "函數語句 -->"); writer.println("\t<select id=\"get\" resultType=\"" + groupName + "." + systemName + ".database." + className + "DO\">"); writer.println("\t\tselect"); writer.println("\t\t<include refid=\"fields\"/>"); writer.println("\t\tfrom " + table.getTableName()); boolean isFirst = true; for (Column pkColumn : pkColumnList) { String columnName = getColumnName(pkColumn.getColumnName()); String fieldName = getFieldName(pkColumn.getColumnName()); writer.print("\t\t"); if (isFirst) { writer.print("where"); isFirst = false; } else { writer.print("and"); } writer.println(" " + columnName + " = #{" + fieldName + "}"); } writer.println("\t</select>"); writer.println("</mapper>"); }}3.生成相關代碼

推薦閱讀