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(); } }