按照我的理解,可以的,代碼生成器是跨平臺,而且是跨語言的(至少是跨文本語言的,UML暫時不好說,)。
創(chuàng)新互聯(lián)是一家專業(yè)提供溧陽企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站建設(shè)、成都做網(wǎng)站、HTML5、小程序制作等業(yè)務(wù)。10年已為溧陽眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。
代碼生成器作為一種開發(fā)工具,一般不直接作為程序的一部分,通常也不直接或間接(如通過AOP)被程序調(diào)用,他是通過編程的方式生成所需要的代碼,然后將生成的代碼作為源文件,復(fù)制到開發(fā)工具的代碼區(qū),然后進(jìn)行編譯。由于代碼生成器是在編譯之前運行的,因此它可以跨語言,你不但可以用代碼生成器生成高級語言,也可以生成匯編語言,甚至機器碼(0、1代碼)。
但編寫代碼生成器是一個難點,它需要你了解目標(biāo)編程語言的語法。如果別人已經(jīng)把你需要的代碼生成器寫好了,你只需按要求使用即可,此時就不需要了解目標(biāo)編程語言的語法。
JNI是通過Java調(diào)用C語言(或其他語言,一般是C),它的實現(xiàn)機制與代碼生成器不同(JNI是通過代碼調(diào)用實現(xiàn)功能,而代碼生成器是生成代碼,復(fù)制代碼進(jìn)行使用),由于C是底層語言,一些底層操作單靠Java無法實現(xiàn),所以才需要JNI。
以上是我對代碼生成器的個人理解,雖然提問時間已過了很久,但依然希望能對你及其他網(wǎng)友有所幫助。
Eclipse是著名的跨平臺的自由集成開發(fā)環(huán)境(IDE)。最初主要用來Java語言開發(fā),但是目前亦有人通過插件使其作為C++、Python、PHP等其他語言的開發(fā)工具。
Eclipse的本身只是一個框架平臺,但是眾多插件的支持,使得Eclipse擁有較佳的靈活性。許多軟件開發(fā)商以Eclipse為框架開發(fā)自己的IDE。
歷史
Eclipse最初是由IBM公司開發(fā)的替代商業(yè)軟件Visual Age for Java的下一代IDE開發(fā)環(huán)境,2001年11月貢獻(xiàn)給開源社區(qū),現(xiàn)在它由非營利軟件供應(yīng)商聯(lián)盟Eclipse基金會(Eclipse Foundation)管理。 2003年,Eclipse 3.0選擇OSGi服務(wù)平臺規(guī)范為運行時架構(gòu)。 2007年6月,穩(wěn)定版3.3發(fā)布;2008年6月發(fā)布代號為Ganymede的3.4版;2009年6月發(fā)布代號為Galileo的3.5版;2010年6月發(fā)布代號為Helios的3.6版
架構(gòu)
Eclipse的基礎(chǔ)是富客戶機平臺(Rich Client Platform,即RCP)。RCP包括下列組件:
核心平臺(啟動Eclipse,運行插件)
OSGi(標(biāo)準(zhǔn)集束框架)
SWT(可移植構(gòu)件工具包)
JFace(文件緩沖,文本處理,文本編輯器)
Eclipse工作臺(即Workbench ,包含視圖(views)、編輯器(editors)、視角(perspectives)、和向?qū)В╳izards))
Eclipse采用的技術(shù)是IBM公司開發(fā)的(SWT),這是一種基于Java的窗口組件,類似Java本身提供的AWT和Swing窗口組件;不過IBM聲稱SWT比其他Java窗口組件更有效率。Eclipse的用戶界面還使用了GUI中間層JFace,從而簡化了基于SWT的應(yīng)用程序的構(gòu)建。
Eclipse的插件機制是輕型軟件組件化架構(gòu)。在富客戶機平臺上,Eclipse使用插件來提供所有的附加功能,例如支持Java以外的其他語言。 已有的分離的插件已經(jīng)能夠支持C/C++(CDT)、PHP、Perl、Ruby,Python、telnet和數(shù)據(jù)庫開發(fā)。插件架構(gòu)能夠支持將任意的擴展加入到現(xiàn)有環(huán)境中,例如配置管理,而決不僅僅限于支持各種編程語言。
Eclipse的設(shè)計思想是:一切皆插件。Eclipse核心很小,其它所有功能都以插件的形式附加于Eclipse核心之上。Eclipse基本內(nèi)核包括:圖形API (SWT/Jface), Java開發(fā)環(huán)境插件(JDT),插件開發(fā)環(huán)境(PDE)等。
Eclipse計劃
Eclipse由各種不同的計劃組成。以下列出了部分計劃,更完整全面的列表在此(英文)。
Eclipse計劃:本身包括Eclipse平臺,Eclipse富客戶端平臺(RCP)和Java開發(fā)工具(JDT)。
Eclipse測試和性能工具平臺(TPTP):提供一個允許軟件開發(fā)者構(gòu)建諸如測試調(diào)試、概況分析、基準(zhǔn)評測等測試和性能工具的平臺。
Eclipse Web工具平臺計劃(WTP):用Java企業(yè)版Web應(yīng)用程序開發(fā)工具來擴展Eclipse平臺。它由以下部分組成:HTML、JavaScript、CSS、JSP、SQL、XML、DTD、XSD和WSDL的源代碼編輯器;XSD和WSDL的圖形界面編輯器;Java企業(yè)版的“項目性質(zhì)”(project nature)、建構(gòu)器(builder)和模型(model),與一個Java企業(yè)版的導(dǎo)航(navigator);一個Web服務(wù)(Web service)向?qū)Ш蜑g覽器,還有一個WS-I測試工具;最后是數(shù)據(jù)庫訪問查詢的工具與模型。
Eclipse商業(yè)智能和報表工具計劃(BIRT):提供Web應(yīng)用程序(特別是基于Java企業(yè)版的)的報表開發(fā)工具。
Eclipse可視化界面編輯器計劃(VEP):一個Eclipse下創(chuàng)建圖形用戶界面代碼生成器的框架。
Eclipse建??蚣埽‥MF):依據(jù)使用XMI描述的建模規(guī)格,生成結(jié)構(gòu)化數(shù)據(jù)模型的工具和其他應(yīng)用程序的代碼。
圖形化編輯器框架(GEF):能讓開發(fā)者采用一個現(xiàn)成的應(yīng)用程序模型來輕松地創(chuàng)建富圖形化編輯器。
UML2:Eclipse平臺下的一個UML 2.0元模型的實現(xiàn),用以支持建模工具的開發(fā)。
AspectJ:一種針對Java的面向側(cè)面語言擴展。
Eclipse通訊框架(ECF):專注于在Eclipse平臺上創(chuàng)建通訊應(yīng)用程序的工作。
Eclipse數(shù)據(jù)工具平臺計劃(DTP)
Eclipse設(shè)備驅(qū)動軟件開發(fā)計劃(DSDP)
C/C++開發(fā)工具計劃(CDT):努力為Eclipse平臺提供一個全功能C和C++的集成開發(fā)環(huán)境(IDE),它使用GCC作為編譯器。
PHP開發(fā)工具計劃(PDT):努力為Eclipse平臺提供一個全功能PHP的集成開發(fā)環(huán)境(IDE)。
Eclipse平臺COBOL集成開發(fā)環(huán)境子計劃(COBOL):將構(gòu)建一個Eclipse平臺上的全功能COBOL集成開發(fā)環(huán)境。
并行工具平臺(PTP):將開發(fā)一個對并行計算機架構(gòu)下的一組工具進(jìn)行集成的平行工具平臺,而且這個平臺是可移植的,可伸縮的并基于標(biāo)準(zhǔn)的。
嵌入式富客戶端平臺(eRCP):計劃將Eclipse富客戶端平臺擴展到嵌入式設(shè)備上。這個平臺主要是一個富客戶端平臺(RCP)組件子集的集合。它能讓桌面環(huán)境下的應(yīng)用程序模型能夠大致同樣地能運用在嵌入式設(shè)備上。
發(fā)行版本
版本代號 發(fā)行日期 平臺版本 計劃名稱
Callisto(卡利斯托) 2006年6月30日 3.2 Callisto projects
Europa(歐羅巴) 2007年6月29日 3.3 Europa projects
Ganymede(伽倪墨得斯) 2008年6月25日 3.4 Ganymede projects
Galileo(伽利略) 2009年6月24日 3.5 Galileo projects
Helios(赫利俄斯) 2010年6月23日 3.6 Helios Projects
Indigo(靛青) 2011年6月 3.7 Indigo Projects
zip包,然后自動下載下來
1.預(yù)先定義好模板
2.界面輸入相關(guān)參數(shù)
3.解析模板生成代碼并下載
最后放出源代碼:
package com.et.controller.system.createcode;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.et.controller.base.BaseController;
import com.et.util.DelAllFile;
import com.et.util.FileDownload;
import com.et.util.FileZip;
import com.et.util.Freemarker;
import com.et.util.PageData;
import com.et.util.PathUtil;
/**
* 類名稱:FreemarkerController
* 創(chuàng)建人:Harries
* 創(chuàng)建時間:2015年1月12日
* @version
*/
@Controller
@RequestMapping(value=”/createCode”)
public class CreateCodeController extends BaseController {
/**
* 生成代碼
*/
@RequestMapping(value=”/proCode”)
public void proCode(HttpServletResponse response) throws Exception{
PageData pd = new PageData();
pd = this.getPageData();
/* ============================================================================================= */
String packageName = pd.getString(“packageName”); //包名 ========1
String objectName = pd.getString(“objectName”); //類名 ========2
String tabletop = pd.getString(“tabletop”); //表前綴 ========3
tabletop = null == tabletop?””:tabletop.toUpperCase(); //表前綴轉(zhuǎn)大寫
String zindext = pd.getString(“zindex”); //屬性總數(shù)
int zindex = 0;
if(null != zindext !””.equals(zindext)){
zindex = Integer.parseInt(zindext);
}
ListString[] fieldList = new ArrayListString[](); //屬性集合 ========4
for(int i=0; i zindex; i++){
fieldList.add(pd.getString(“field”+i).split(“,fh,”)); //屬性放到集合里面
}
MapString,Object root = new HashMapString,Object(); //創(chuàng)建數(shù)據(jù)模型
root.put(“fieldList”, fieldList);
root.put(“packageName”, packageName); //包名
root.put(“objectName”, objectName); //類名
root.put(“objectNameLower”, objectName.toLowerCase()); //類名(全小寫)
root.put(“objectNameUpper”, objectName.toUpperCase()); //類名(全大寫)
root.put(“tabletop”, tabletop); //表前綴
root.put(“nowDate”, new Date()); //當(dāng)前日期
DelAllFile.delFolder(PathUtil.getClasspath()+”admin/ftl”); //生成代碼前,先清空之前生成的代碼
/* ============================================================================================= */
String filePath = “admin/ftl/code/”; //存放路徑
String ftlPath = “createCode”; //ftl路徑
/*生成controller*/
Freemarker.printFile(“controllerTemplate.ftl”, root, “controller/”+packageName+”/”+objectName.toLowerCase()+”/”+objectName+”Controller.java”, filePath, ftlPath);
/*生成service*/
Freemarker.printFile(“serviceTemplate.ftl”, root, “service/”+packageName+”/”+objectName.toLowerCase()+”/”+objectName+”Service.java”, filePath, ftlPath);
/*生成mybatis xml*/
Freemarker.printFile(“mapperMysqlTemplate.ftl”, root, “mybatis_mysql/”+packageName+”/”+objectName+”Mapper.xml”, filePath, ftlPath);
Freemarker.printFile(“mapperOracleTemplate.ftl”, root, “mybatis_oracle/”+packageName+”/”+objectName+”Mapper.xml”, filePath, ftlPath);
/*生成SQL腳本*/
Freemarker.printFile(“mysql_SQL_Template.ftl”, root, “mysql數(shù)據(jù)庫腳本/”+tabletop+objectName.toUpperCase()+”.sql”, filePath, ftlPath);
Freemarker.printFile(“oracle_SQL_Template.ftl”, root, “oracle數(shù)據(jù)庫腳本/”+tabletop+objectName.toUpperCase()+”.sql”, filePath, ftlPath);
/*生成jsp頁面*/
Freemarker.printFile(“jsp_list_Template.ftl”, root, “jsp/”+packageName+”/”+objectName.toLowerCase()+”/”+objectName.toLowerCase()+”_list.jsp”, filePath, ftlPath);
Freemarker.printFile(“jsp_edit_Template.ftl”, root, “jsp/”+packageName+”/”+objectName.toLowerCase()+”/”+objectName.toLowerCase()+”_edit.jsp”, filePath, ftlPath);
/*生成說明文檔*/
Freemarker.printFile(“docTemplate.ftl”, root, “說明.doc”, filePath, ftlPath);
//this.print(“oracle_SQL_Template.ftl”, root); 控制臺打印
/*生成的全部代碼壓縮成zip文件*/
FileZip.zip(PathUtil.getClasspath()+”admin/ftl/code”, PathUtil.getClasspath()+”admin/ftl/code.zip”);
/*下載代碼*/
FileDownload.fileDownload(response, PathUtil.getClasspath()+”admin/ftl/code.zip”, “code.zip”);
}
}
主要功能: 你只要設(shè)計好數(shù)據(jù)庫 就可以生成java vo
java DAO jsp
servlet
struts-config配置信息
oracle 建表語句 查詢語句 等
可生成java struts 架構(gòu)的完整的源碼 包括 增加 刪除 修改 查詢等功能的源碼
但
1.不同的架構(gòu),需要不同的生成器
2.生成器一般需要模板技術(shù),如freeMarker、velocity等
3.生成器也是Java項目,可以自己修改、設(shè)計、開發(fā)
4.生成器能節(jié)省一定的工作量
學(xué)這個? 網(wǎng)上都有現(xiàn)成的軟件,會用就行,使用很簡單。 如果是想學(xué)開發(fā)一個代碼生成器的話,我覺得沒必要啊。
你把JAVA 語言學(xué)會了,真正在開發(fā)的時候自然會遇見這個軟件,自然就會了
代碼生成器是按照特定編碼規(guī)范輸出代碼的軟件,可以直接生成項目,也可以單頁生成
比如動軟,生成項目可以選擇vs版本的,其實嘛,動軟挺垃圾的,不如你去學(xué)學(xué)orm框架,很簡單的,比動軟的三層好得多