生成資料庫設計文件
阿新 • • 發佈:2018-12-05
目錄結構
pom.xml依賴
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.zcj</groupId> <artifactId>db2doc</artifactId> <version>0.0.1-SNAPSHOT</version> <name>db2doc</name> <dependencies> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>6.0.6</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.17</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.0.6.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.0.6.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-test --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.0.6.RELEASE</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/junit/junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/commons-io/commons-io --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-lang/commons-lang --> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency> </dependencies> </project>
SpringConfig
package com.zcj.config; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DriverManagerDataSource; @Configuration @ComponentScan(basePackages= {"com.zcj"}) @PropertySource("classpath:config/db.properties") public class SpringConfig { @Value("${db_url}") private String url; @Value("${db_username}") private String username; @Value("${db_password}") private String password; @Value("${db_driver}") private String driver; @Bean public DriverManagerDataSource driverManagerDataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(url, username, password); dataSource.setDriverClassName(driver); return dataSource; } @Bean public JdbcTemplate jdbcTemplate() { return new JdbcTemplate(driverManagerDataSource()); } }
MyTset
package com.zcj.unittest; import java.io.File; import java.io.FileOutputStream; import java.math.BigInteger; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.commons.io.FileUtils; import org.apache.poi.xwpf.usermodel.ParagraphAlignment; import org.apache.poi.xwpf.usermodel.TextAlignment; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; import org.apache.poi.xwpf.usermodel.XWPFTable; import org.apache.poi.xwpf.usermodel.XWPFTableCell; import org.apache.poi.xwpf.usermodel.XWPFTableRow; import org.junit.Test; import org.junit.runner.RunWith; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.zcj.config.SpringConfig; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { SpringConfig.class }) public class MyTest { @Value("${data_name}") private String dataName; @Value("${doc_dir_path}") private String docDirPath; @Autowired DriverManagerDataSource driverManagerDataSource; @Autowired JdbcTemplate jdbcTemplate; @Test public void test() { createWord(); } /** * 生成資料庫設計文件 */ public void createWord() { XWPFDocument xdoc = new XWPFDocument(); XWPFParagraph title = xdoc.createParagraph(); title.setAlignment(ParagraphAlignment.CENTER); XWPFRun rt = title.createRun(); rt.setBold(true); rt.setFontFamily("微軟雅黑"); rt.setText(dataName+"資料庫設計文件"); rt.setFontSize(20); rt.setColor("333333"); rt.setBold(true); Map<String, String[][]> datas = dataInfo(dataName); Set<String> keySet = datas.keySet(); for (String table : keySet) { XWPFParagraph headLine1 = xdoc.createParagraph(); headLine1.setAlignment(ParagraphAlignment.LEFT); XWPFRun runHeadLine1 = headLine1.createRun(); runHeadLine1.setText(table); runHeadLine1.setFontSize(14); runHeadLine1.setFontFamily("微軟雅黑"); runHeadLine1.setColor("a6a6a6"); String[][] clumns = datas.get(table); XWPFTable dTable = xdoc.createTable(clumns.length + 1, 3); createTable(dTable, xdoc, clumns); setEmptyRow(xdoc, rt); } // 在伺服器端生成 FileOutputStream fos = null; try { String docPath = docDirPath+File.separator+dataName+"_"+(new Date()).getTime()+".docx"; FileUtils.forceMkdirParent(new File(docPath)); fos = new FileOutputStream(docPath); xdoc.write(fos); fos.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 獲取資料庫每個表的資訊 * * @param data * @return */ public Map<String, String[][]> dataInfo(String data) { List<Map<String, Object>> list = jdbcTemplate.queryForList( "select table_name,table_comment from information_schema.tables where table_schema = ?", data); Map<String, String[][]> datas = new HashMap<String, String[][]>(); for (Map<String, Object> map : list) { String table_name = map.get("table_name") + ""; String table_comment = map.get("table_comment") + ""; datas.put("表:" + table_name + ":" + table_comment, tableInfo(data + "." + table_name)); } return datas; } /** * 獲取每個表的欄位資訊 * * @param table * @return */ public String[][] tableInfo(String table) { List<Map<String, Object>> list = jdbcTemplate.queryForList("SHOW FULL FIELDS FROM " + table); String[][] tables = new String[list.size()][3]; for (int i = 0; i < list.size(); i++) { Map<String, Object> map = list.get(i); String[] info = new String[3]; info[0] = map.get("Field") + ""; info[1] = map.get("Type") + ""; info[2] = map.get("Comment") + ""; tables[i] = info; } return tables; } /** * 生成表格 * * @param xTable * @param xdoc */ public static void createTable(XWPFTable xTable, XWPFDocument xdoc, String[][] clumns) { String bgColor = "111111"; CTTbl ttbl = xTable.getCTTbl(); CTTblPr tblPr = ttbl.getTblPr() == null ? ttbl.addNewTblPr() : ttbl.getTblPr(); CTTblWidth tblWidth = tblPr.isSetTblW() ? tblPr.getTblW() : tblPr.addNewTblW(); tblWidth.setW(new BigInteger("8600")); tblWidth.setType(STTblWidth.DXA); setCellText(xdoc, getCellHight(xTable, 0, 0), "欄位名", bgColor, 1000); setCellText(xdoc, getCellHight(xTable, 0, 1), "型別", bgColor, 3800); setCellText(xdoc, getCellHight(xTable, 0, 2), "說明", bgColor, 3800); int length = clumns.length; for (int i = 0; i < length; i++) { setCellText(xdoc, getCellHight(xTable, i + 1, 0), clumns[i][0], bgColor, 1000); setCellText(xdoc, getCellHight(xTable, i + 1, 1), clumns[i][1], bgColor, 3800); setCellText(xdoc, getCellHight(xTable, i + 1, 2), clumns[i][2], bgColor, 3800); } } // 設定表格高度 private static XWPFTableCell getCellHight(XWPFTable xTable, int rowNomber, int cellNumber) { XWPFTableRow row = null; row = xTable.getRow(rowNomber); row.setHeight(100); XWPFTableCell cell = null; cell = row.getCell(cellNumber); return cell; } /** * 單元格設定文字 * * @param xDocument * @param cell * @param text * @param bgcolor * @param width */ private static void setCellText(XWPFDocument xDocument, XWPFTableCell cell, String text, String bgcolor, int width) { CTTc cttc = cell.getCTTc(); CTTcPr cellPr = cttc.addNewTcPr(); cellPr.addNewTcW().setW(BigInteger.valueOf(width)); XWPFParagraph pIO = cell.addParagraph(); cell.removeParagraph(0); XWPFRun rIO = pIO.createRun(); rIO.setFontFamily("微軟雅黑"); rIO.setColor("000000"); rIO.setFontSize(12); rIO.setText(text); } // 設定表格間的空行 public static void setEmptyRow(XWPFDocument xdoc, XWPFRun r1) { XWPFParagraph p1 = xdoc.createParagraph(); p1.setAlignment(ParagraphAlignment.CENTER); p1.setVerticalAlignment(TextAlignment.CENTER); r1 = p1.createRun(); } }
db.properties
db_url=jdbc:mysql://localhost:3306/hao?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
db_username=root
db_password=root
db_driver=com.mysql.jdbc.Driver
data_name=hao
doc_dir_path=D:/\u6570\u636E\u5E93