重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
按照我的理解,可以的,代码生成器是跨平台,而且是跨语言的(至少是跨文本语言的,UML暂时不好说,)。
成都做网站、成都网站设计的开发,更需要了解用户,从用户角度来建设网站,获得较好的用户体验。创新互联公司多年互联网经验,见的多,沟通容易、能帮助客户提出的运营建议。作为成都一家网络公司,打造的就是网站建设产品直销的概念。选择创新互联公司,不只是建站,我们把建站作为产品,不断的更新、完善,让每位来访用户感受到浩方产品的价值服务。
代码生成器作为一种开发工具,一般不直接作为程序的一部分,通常也不直接或间接(如通过AOP)被程序调用,他是通过编程的方式生成所需要的代码,然后将生成的代码作为源文件,复制到开发工具的代码区,然后进行编译。由于代码生成器是在编译之前运行的,因此它可以跨语言,你不但可以用代码生成器生成高级语言,也可以生成汇编语言,甚至机器码(0、1代码)。
但编写代码生成器是一个难点,它需要你了解目标编程语言的语法。如果别人已经把你需要的代码生成器写好了,你只需按要求使用即可,此时就不需要了解目标编程语言的语法。
JNI是通过Java调用C语言(或其他语言,一般是C),它的实现机制与代码生成器不同(JNI是通过代码调用实现功能,而代码生成器是生成代码,复制代码进行使用),由于C是底层语言,一些底层操作单靠Java无法实现,所以才需要JNI。
以上是我对代码生成器的个人理解,虽然提问时间已过了很久,但依然希望能对你及其他网友有所帮助。
zip包,然后自动下载下来
1.预先定义好模板
2.界面输入相关参数
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
* 创建人:Harries
* 创建时间: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(); //表前缀转大写
String zindext = pd.getString(“zindex”); //属性总数
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(); //创建数据模型
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()); //当前日期
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数据库脚本/”+tabletop+objectName.toUpperCase()+”.sql”, filePath, ftlPath);
Freemarker.printFile(“oracle_SQL_Template.ftl”, root, “oracle数据库脚本/”+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”);
}
}
安装的时候,把“Contact all update sites during install to find required software”这个勾去掉。
开发过程中的常用Eclipse插件,按字母排序:
(1) AmaterasUML
介绍:Eclipse的UML插件,支持UML活动图,class图,sequence图,usecase图等;支持与Java class/interface之间的相互导入导出。
官方网站:
插件下载URL: (目前最新版本)
注:安装时需要GEF插件的支持。
(2) Bravo JSP
介绍:Bravo JSP编辑器是一款WYSIWYG(所见即所得的)JSP/html页面编辑器。Code Editor(代码编辑器)与Eclipse Web Tools的JSP编辑器相同,所以支持代码建议,代码模板和其它相同的功能。可视化部分:支持CSS样式、图片、JSP表达式/标签库/标签文件、外部included的文件。改变HTML/CSS/JSP代码可以立即看到效果。提供DOM查找/替换对话框。JSTL的变量查看功能。
官方网站:
Eclipse在线安装URL:
(3) Checkstyle
介绍:CheckStyle是Source.orge下的一个项目,提供了一个帮助JAVA开发人员遵守某些编码规范的工具。它能够自动化代码规范检查过程,从而使得开发人员从这项重要,但是枯燥的任务中解脱出来。CheckStyle检验的主要内容有:Javadoc注释、命名约定、标题、import语句、体积大小、空白、修饰符、块、代码问题、类设计以及混合检查(包括一些有用的比如非必须的System.out和printstackTrace)等。
官方网站:
Eclipse在线安装URL:
(4) Easy Explorer
介绍:如果你经常需要在Eclipse里打开相关资源文件所在的文件夹,比较麻烦,要右键,属性,在Location一栏中把所在的文件夹拷贝一下,然后再去资源管理器里输入这个路径,回车,然后打开它,比较麻烦。Easy Explorer是一个Eclipse的小插件,它能直接打开选中文件所在的目录,很方便好用.
官方网站:
(5) EasySQL
介绍:EasySQL:Eclipse SQL插件。包含SQL编辑器和执行器,表格编辑器,数据导出工具。EasySQL设计成易于与其它插件相集成。如果在你的项目中需要数据库
操作功能,可以考虑该插件。
官方网站:
插件下载URL:
(6) EclEmma
介绍:提到 EclEmma 首先就要说到著名的 Java 覆盖测试工具 Emma。从某种程度上说,EclEmma 可以看作是 Emma 的一个图形界面。EclEmma的出现弥补了 Emma 用户一个大的遗憾 ---- 缺乏图形界面以及对集成开发环境的支持。将 Eclipse 和 Emma 这两个在各自领域最为优秀的工具结合起来,这就是 EclEmma 为我们提供的。
官方网站:
Eclipse在线安装URL:
(7) Eclipse SWT Designer Plugin
介绍:Eclipse SWT Designer Plugin是一个用于快速构建J2SE的桌面化GUI开发的Eclipse插件。
官方网站:
插件下载URL:
(8) FindBugs
介绍:Findbugs 是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。它可以帮助改进代码的质量。它是寻找代码缺陷的,很多我们写的不好的地方,可以优化的地方,它都能检查出来。例如:未关闭的数据库连接,缺少必要的null check,多余的 null check,多余的if后置条件,相同的条件分支,重复的代码块,错误的使用了"==",不同数据类型的比较,建议使用StringBuffer代替字符串连加等等。
官方网站:
Eclipse在线安装URL:
(9) FreeMarker IDE
介绍:FreeMarker IDE是一个FreeMarker(模板引擎)感知编辑器,支持:语法高亮显示(Syntax Hilighting)、内容辅助(Content Assist)、大纲视图(Outline View)。其主页上提供了如何使用该插件进行开发的Flash视频。FreeMarker还有另外一个插件FreeMarker Eclipse Plugin。
官方网站:
插件下载URL:
(10) Spket
介绍:Spket IDE是功能强大的JavaScript 和XML开发工具包。这个强大的编辑器可以进行JavaScript、XUL/XBL以及Yahoo! Widget开发。其中JavaScript编辑器具有代码完成(code completion)、语法标记以及内容概览等功能,协助开发人员创建高效的JavaScript代码。
官方网站:
Eclipse在线安装URL:
(11) JadClipse
介绍:JadClipse是一个Eclipse插件,无缝地集成了Jad(快速Java反编译器)与Eclipse。通常,当打开一个类文件,类文件查看器将显示一个简短的API类的轮廓。如果你安装这个插件,JadClipse类文件查看器将替换类文件查看器并显示了类的反编译源代码。这个任务可以通过在后台使用Jad反编译相应的类文件来完成。可以支持正常的Java语法高亮以及大纲视图。
官方网站:
Eclipse在线安装URL:
(12) Javascript Debug Toolkit
介绍:JSDT(Javascript Debug Toolkit)是一个用于javascript调试的Eclipse 插件,用于调试javascript。JSDT可以跨浏览器调试,支持在IE,Firefox,Safari,Chrome等主流浏览器中调试javascript。JSDT支持设置断点,单步调试等调试工具的基本特性。
官方网站:
Eclipse在线安装URL:
(13) Mybatis Editor
介绍:MyBatis Editor是一个Eclipse的插件,用来编辑MyBatis的配置文件。
官方网站:
Eclipse在线安装URL:
(14) MAT
介绍:Eclipse Memory Analyzer(MAT)是著名的跨平台集成开发环境 Eclipse Galileo 版本的 33 个组成项目中之一,它是一个功能丰富的JAVA 堆转储文件分析工具,可以帮助你发现内存漏洞和减少内存消耗。对于大型 JAVA 应用程序来说,再精细的测试也难以堵住所有的漏洞,即便我们在测试阶段进行了大量卓有成效的工作,很多问题还是会在生产环境下暴露出来,并且很难在测试环境中进行重现。JVM 能够记录下问题发生时系统的部分运行状态,并将其存储在堆转储 (Heap Dump) 文件中,从而为我们分析和诊断问题提供了重要的依据。
官方网站:
Eclipse在线安装URL:
(15) m2eclipse
介绍:这是一个在Eclipse环境中集成的Maven插件。
官方网站:
Eclipse在线安装URL:
(16) PatternBox
介绍:PatternBox是一个Java设计模式编辑器。它提供一个基于模板的代码生成器。这个基于XML的模板机制使得你能够定义自己的代码模板。PatternBox当前能够为16种GoF设计模式生成代码。
官方网站:
参考资料
CSDN: