代碼生成器小例

1.建立模板文件(想要有代碼生成器,就得有模板!)java

在本身建立的包內建立file文件做爲模板文件。session

例如:生成Dao的模板文件:DemoDao.tlf(templatefile)app

package cn.sxx.dao;

import cn.sxx.model.Demo;
import cn.sxx.query.DemoQuery;

public interface DemoDao extends BaseDao<Demo, DemoQuery>{
    

}

2.代碼生成器的建立dom

在本身的定義的包內建立代碼生成器。spa

例如:生成xxxDao.jave所用的代碼生成器code

/**
     * 生成Dao
     * @param ClassName
     * @throws Exception
     */
    public static void generDao(String ClassName) throws Exception{
     //從模板文件所在的位置讀取文件內容 BufferedReader br
= new BufferedReader(new FileReader("config/cn/sxx/template/DemoDao.tlf"));
     //把讀取的文件內容寫入到指定的xxxDao.jave中 BufferedWriter bw
= new BufferedWriter(new FileWriter("src/cn/sxx/dao/"+ClassName+"Dao.java")); String line = null; String newLine= null; while((line = br.readLine()) != null){ //把讀取的模板裏的Demo替換成類名 newLine = line.replace("Demo", ClassName); bw.write(newLine); bw.newLine(); bw.flush(); } bw.close(); br.close(); }

最後,用於生成query,dao,service,以及applicationcontext-dao/service.xml文件的總體代碼orm

package cn.sxx.utils;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class SourceGenerator {
    public static void main(String[] args) throws Exception {
        generator("ProductType");
        
    }
    public static void generator(String className) throws Exception{
        generQuery(className);
        generDao(className);
        generDaoImpl(className);
        
        generService(className);
        generServiceImpl(className);
        
        generDaoConfig(className);
        generServiceConfig(className);
    }
    
    /**
     * 生成查詢對象
     * @param ClassName
     * @throws Exception
     */
    public static void generQuery(String ClassName) throws Exception{
        BufferedReader br = new BufferedReader(new FileReader("config/cn/sxx/template/DemoQuery.tlf"));
        BufferedWriter bw = new BufferedWriter(new FileWriter("src/cn/sxx/query/"+ClassName+"Query.java"));
        
        String line = null;
        String newLine= null;
        while((line = br.readLine()) != null){
            //把讀取的模板裏的Demo替換成類名
            newLine = line.replace("Demo", ClassName);
            bw.write(newLine);
            bw.newLine();
            bw.flush();
        }
        bw.close();
        br.close();
    }
    
    /**
     * 生成Dao
     * @param ClassName
     * @throws Exception
     */
    public static void generDao(String ClassName) throws Exception{
        BufferedReader br = new BufferedReader(new FileReader("config/cn/sxx/template/DemoDao.tlf"));
        BufferedWriter bw = new BufferedWriter(new FileWriter("src/cn/sxx/dao/"+ClassName+"Dao.java"));
        
        String line = null;
        String newLine= null;
        while((line = br.readLine()) != null){
            //把讀取的模板裏的Demo替換成類名
            newLine = line.replace("Demo", ClassName);
            bw.write(newLine);
            bw.newLine();
            bw.flush();
        }
        bw.close();
        br.close();
    }
    
    /**
     * 生成DaoImpl
     * @param ClassName
     * @throws Exception
     */
    public static void generDaoImpl(String ClassName) throws Exception{
        BufferedReader br = new BufferedReader(new FileReader("config/cn/sxx/template/DemoDaoImpl.tlf"));
        BufferedWriter bw = new BufferedWriter(new FileWriter("src/cn/sxx/dao/impl/"+ClassName+"DaoImpl.java"));
        
        String line = null;
        String newLine= null;
        while((line = br.readLine()) != null){
            //把讀取的模板裏的Demo替換成類名
            newLine = line.replace("Demo", ClassName);
            bw.write(newLine);
            bw.newLine();
            bw.flush();
        }
        bw.close();
        br.close();
    }
    
    /**
     * 生成DaoImpl
     * @param ClassName
     * @throws Exception
     */
    public static void generService(String ClassName) throws Exception{
        BufferedReader br = new BufferedReader(new FileReader("config/cn/sxx/template/DemoService.tlf"));
        BufferedWriter bw = new BufferedWriter(new FileWriter("src/cn/sxx/service/"+ClassName+"Service.java"));
        
        String line = null;
        String newLine= null;
        while((line = br.readLine()) != null){
            //把讀取的模板裏的Demo替換成類名
            newLine = line.replace("Demo", ClassName);
            bw.write(newLine);
            bw.newLine();
            bw.flush();
        }
        bw.close();
        br.close();
    }
    
    /**
     * 生成ServiceImpl:要考慮字母大小寫的問題
     * @param ClassName
     * @throws Exception
     */
    public static void generServiceImpl(String ClassName) throws Exception{
        //得到小寫的類型
        String lowerCaseClassName = ClassName.substring(0,1).toLowerCase() + ClassName.substring(1);
        BufferedReader br = new BufferedReader(new FileReader("config/cn/sxx/template/DemoServiceImpl.tlf"));
        BufferedWriter bw = new BufferedWriter(new FileWriter("src/cn/sxx/service/impl/"+ClassName+"ServiceImpl.java"));
        
        String line = null;
        String newLine= null;
        while((line = br.readLine()) != null){
            //把讀取的模板裏的Demo替換成類名
            newLine = line.replace("Demo", ClassName).replace("demo", lowerCaseClassName);
            bw.write(newLine);
            bw.newLine();
            bw.flush();
        }
        bw.close();
        br.close();
    }
    
    /**
     * 生成DaoConfig:這裏用dom4j
     * @param ClassName
     * @throws Exception
     */
    public static void generDaoConfig(String ClassName) throws Exception{
        //得到小寫的類型
        String lowerCaseClassName = ClassName.substring(0,1).toLowerCase() + ClassName.substring(1);
        SAXReader reader = new SAXReader();
        Document doc =  reader.read(new FileReader("config/ApplicationContext-dao.xml"));
        Element rootElement = doc.getRootElement();
        
        Element newEle = rootElement.addElement("bean")
                    .addAttribute("id", lowerCaseClassName+"Dao")
                    .addAttribute("class", "cn.sxx.dao.impl."+ClassName+"DaoImpl");
        newEle.addElement("property")
              .addAttribute("name", "sessionFactory")
              .addAttribute("ref", "sessionFactory");
        
        XMLWriter writer = new XMLWriter(new FileWriter("config/ApplicationContext-dao.xml"),OutputFormat.createPrettyPrint());
        writer.write(doc);
        writer.close();
    }
    
    /**
     * 生成ServiceConfig:這裏用dom4j
     * @param ClassName
     * @throws Exception
     */
    public static void generServiceConfig(String ClassName) throws Exception{
        //得到小寫的類型
        String lowerCaseClassName = ClassName.substring(0,1).toLowerCase() + ClassName.substring(1);
        SAXReader reader = new SAXReader();
        Document doc =  reader.read(new FileReader("config/ApplicationContext-service.xml"));
        Element rootElement = doc.getRootElement();
        
        Element newEle = rootElement.addElement("bean")
                    .addAttribute("id", lowerCaseClassName+"Service")
                    .addAttribute("class", "cn.sxx.service.impl."+ClassName+"ServiceImpl");
        newEle.addElement("property")
              .addAttribute("name", lowerCaseClassName+"Dao")
              .addAttribute("ref", lowerCaseClassName+"Dao");
        
        XMLWriter writer = new XMLWriter(new FileWriter("config/ApplicationContext-service.xml"),OutputFormat.createPrettyPrint());
        writer.write(doc);
        writer.close();
    }
}
相關文章
相關標籤/搜索