springboot+freemarker实现生成数据库设计Word文档

      以前在项目完成后都会按照要求写数据库设计文档,表少的时候还无所谓,当有上百张表的时候就不好写了。当然也有一些自动化软件可以帮我们实现这个功能,但是自定义的程度比较低。所以今天自己来实现这个功能,可以按照自己的喜好定义样式和模板,是不是很酷。

首先新建一个Word文档

springboot+freemarker实现生成数据库设计Word文档_第1张图片

 然后另存为xml格式,用NotePad打开。

在xml中使用freemarker的标签将数据填充。不会freemarker的可以先自己研究一下。


    
        //循环遍历所有table
	<#list tables as table>
      
        
          
            
            
            
          
        
        
          
            
            
            
            
          
          表名
        
        
          
            
            
            
            
            
          
          
        
        
          
            
            
            
          
          ${table.tableName}    
        
        
          
            
            
            
            
          
          注释
        
        
          
            
            
            
            
            
          
          
        
        
          
            
            
            
          
          ${table.tableComment} 
        
      
      
        
          
          
            
            
            
            
            
            
          
          
        
        
          
          
          
          
          
        
        
          
            
              
              
            
            
              
                
                  
                  
                
              
              
                
                  
                  
                  
                  
                
                列名
              
            
          
          
            
              
              
            
            
              
                
                  
                  
                
              
              
                
                  
                  
                  
                  
                
                数据类型
              
            
          
          
            
              
              
            
            
              
                
                  
                  
                
              
              
                
                  
                  
                  
                  
                
                约束
              
            
          
          
            
              
              
            
            
              
                
                  
                  
                
              
              
                
                  
                  
                  
                  
                
                允许空
              
            
          
          
            
              
              
            
            
              
                
                  
                  
                
              
              
                
                  
                  
                  
                  
                
                备注
              
            
          
        
		<#list table.columns as column>
        
          
            
              
              
            
            
              
                
                  
                  
                
              
              
                
                  
                  
                  
                
                ${column.columnName}
              
            
          
          
            
              
              
            
            
              
                
                  
                  
                
              
              
                
                  
                  
                
                ${column.columnType}
              
            
          
          
            
              
              
            
            
              
                
                  
                  
                
              
              
                
                  
                  
                
                ${column.columnKey}
              
            
          
          
            
              
              
            
            
              
                
                  
                  
                
              
              
                
                  
                  
                
                ${column.isNullable}
              
            
          
          
            
              
              
            
            
              
                
                  
                  
                
              
              
                
                  
                  
                
                ${column.columnComment}
              
            
          
        
	  
      
      
        
          
            
            
          
        
      
      
        
          
            
            
          
        
      
      
        
        
        
        
      
	 
    
  

 

关键部分到了,从数据库中获取所有的表信息并将数据填充到模板中生成doc文件。

package com.dwl.mindoc.service;

import com.dwl.mindoc.dao.BaseDao;
import com.dwl.mindoc.database.BaseFactory;
import com.dwl.mindoc.database.Database;
import com.dwl.mindoc.domain.TableVo;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ResourceUtils;

import javax.annotation.PostConstruct;
import java.io.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @program: mindoc
 * @description: generator
 * @author: daiwenlong
 * @create: 2018-10-13 13:00
 **/
@Service
public class GenerateService {

    private Logger logger = LoggerFactory.getLogger(getClass());

    @Autowired
    private BaseFactory factory;

    @Autowired
    private BaseDao dao;

    @PostConstruct
    public void genertator(){
        try {
            Database base = factory.getDataBase();
            List tables = dao.getTables(base);
            tables.forEach(table->{
                table.setColumns(dao.getColumns(base,table.getTableName()));
                logger.info("mindoc - TableName:{} TableComment:{} loading...",table.getTableName(),table.getTableComment());
            });
            makeDoc(tables);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }


    /**
     * 生成doc
     * @param tables
     * @return
     * @throws IOException
     * @throws TemplateException
     */
    public void makeDoc(List tables){
        logger.info("mindoc - makeDoc Satrting...");
        // 第一步:创建一个Configuration对象。
        Configuration configuration = new Configuration(Configuration.getVersion());
        // 第二步:设置模板文件所在的路径。
        try {
            configuration.setDirectoryForTemplateLoading(ResourceUtils.getFile("classpath:"));
            // 第三步:设置模板文件使用的字符集。
            configuration.setDefaultEncoding("utf-8");
            // 第四步:加载一个模板,创建一个模板对象。
            Template template = configuration.getTemplate("doc.xml");
            // 第五步:创建一个模板使用的数据集。
            Map dataModel = new HashMap<>();
            dataModel.put("tables",tables);
            //生成文件放在项目根目录下
            File outFile = new File(System.getProperty("user.dir")+"\\DatabaseDesign.doc");
            Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile)));
            // 第六步:调用模板对象的process方法输出文件。
            template.process(dataModel, out);
            logger.info("mindoc - MakeDoc succeeded.");
            logger.info("mindoc - Doc directory {}",outFile);
        } catch (IOException |TemplateException e) {
            logger.warn("mindoc - MakeDoc failed.");
        }
    }

}


查看控制台信息,文件已经生成。

springboot+freemarker实现生成数据库设计Word文档_第2张图片

 我们去文件目录下查看文档。

springboot+freemarker实现生成数据库设计Word文档_第3张图片

 

是不是很方便,终于可以随心所欲的写Word了。除了能生成数据库设计文档,我们还可以生成其他有固定模式的Word文档,大家可以根据自己业务场景试一试。

上面只贴了一部分代码,详细代码可以到github上下载mindoc

你可能感兴趣的:(freemarker,工具,springboot)