自動(dòng)化開發(fā)工具,我用過,比較著名的有普元,浪潮樓上平臺(tái)等。
蓮花網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)成立與2013年到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
首先,我要糾正下,ANT并不是自動(dòng)生成代碼用的工具;
那些所謂的自動(dòng)代碼生成器根本原理就是根據(jù)實(shí)現(xiàn)寫事先好的模板,再根據(jù)你提供的數(shù)據(jù)庫結(jié)構(gòu),生成一系列的增刪改查方法。的確是可以減少程序員的工作量,但是不能包含復(fù)雜或者特殊的業(yè)務(wù)邏輯,否則程序員全都失業(yè)了。
按照我的理解,可以的,代碼生成器是跨平臺(tái),而且是跨語言的(至少是跨文本語言的,UML暫時(shí)不好說,)。
代碼生成器作為一種開發(fā)工具,一般不直接作為程序的一部分,通常也不直接或間接(如通過AOP)被程序調(diào)用,他是通過編程的方式生成所需要的代碼,然后將生成的代碼作為源文件,復(fù)制到開發(fā)工具的代碼區(qū),然后進(jìn)行編譯。由于代碼生成器是在編譯之前運(yùn)行的,因此它可以跨語言,你不但可以用代碼生成器生成高級(jí)語言,也可以生成匯編語言,甚至機(jī)器碼(0、1代碼)。
但編寫代碼生成器是一個(gè)難點(diǎn),它需要你了解目標(biāo)編程語言的語法。如果別人已經(jīng)把你需要的代碼生成器寫好了,你只需按要求使用即可,此時(shí)就不需要了解目標(biāo)編程語言的語法。
JNI是通過Java調(diào)用C語言(或其他語言,一般是C),它的實(shí)現(xiàn)機(jī)制與代碼生成器不同(JNI是通過代碼調(diào)用實(shí)現(xiàn)功能,而代碼生成器是生成代碼,復(fù)制代碼進(jìn)行使用),由于C是底層語言,一些底層操作單靠Java無法實(shí)現(xiàn),所以才需要JNI。
以上是我對(duì)代碼生成器的個(gè)人理解,雖然提問時(shí)間已過了很久,但依然希望能對(duì)你及其他網(wǎng)友有所幫助。
代碼生成器就是根據(jù)特定的要求制定格式,靈活輸出在項(xiàng)目中重復(fù)要用到的代碼,節(jié)省項(xiàng)目時(shí)間,現(xiàn)在免費(fèi)的代碼生成器codesmith我經(jīng)常用的,小玩意,不花錢
1.先回答你第一個(gè)問題:ch!=null這句語句肯定是錯(cuò)誤的,因?yàn)閏h表示的是一個(gè)字符,null表示的是空對(duì)象,所以如果寫ch!=null,編譯的時(shí)候肯定是要報(bào)錯(cuò)的,你必須寫成ch!=' ',前面的為英文引號(hào),引號(hào)中間有一個(gè)空格。
2.回答你第2個(gè)問題,就是怎么使str!=null,你可以在for語句中加一個(gè)判斷,假如ch== ' ',則這次循環(huán)不算,則結(jié)果中肯定不會(huì)出現(xiàn)null的,見下面的代碼。
int j=0,n=0,i=0;
Srting str="";
char ch;
for(j=0;j=7;j++){
n=Math.random()*122;
i=(int)n;
if((i=48 i=57)||(i=65 i=90) || (i=97 i=122)){
ch=(char)i;
}
//判斷來了
else {
j=j-1; //即是這次循環(huán)不算,則不可能出現(xiàn)null了
}
}
3.回答你第三個(gè)問題:如何輸出這24個(gè)數(shù)呢?見下代碼
for (int i = 1; i 5; i++) {
for (int j = 1; j 5; j++) {
if (i!=j) {
for (int j2 = 1; j2 5; j2++) {
if (j2!=jj2!=i) {
System.out.println(""+i+j+j2); //這句話把數(shù)字轉(zhuǎn)換為字符串,
//便于輸出
}
}
}
}
}
4. 我對(duì)你的意思理解為:用一個(gè)字符替換指定位的字符,如果是這樣的話,replace不能夠做到。
replace的方法原型為:
String replace(char oldChar, char newChar) ;
意思為:返回一個(gè)新的字符串,它是通過用 newChar 替換此字符串中出現(xiàn)的所有 oldChar 得到的。
如果要完成樓主的要求,請(qǐng)看以下代碼,我寫了一個(gè)替換函數(shù):
String tihuan(String string,int index,char ch){
//index表示你要替換的字符位置,第一位為1
char[] chs=string.toCharArray();
chs[index-1]=ch;
String string1=new String(chs);
return string1;
}
//多多指教啊
//希望對(duì)你有幫助啊
AutoJava 是一款免費(fèi)的,針對(duì)于Oracle和SQLserver數(shù)據(jù)庫的、以面向?qū)ο竽J降腏ava代碼生成工具。AutoJava根據(jù)O/R Mapping規(guī)則生成表對(duì)應(yīng)的Java對(duì)象,并且生成了所有的添加、刪除、修改、查詢等底層數(shù)據(jù)庫操作代碼。借助于AutoJava我們基本上不用再寫與數(shù)據(jù)庫相關(guān)的操作代碼,只需要在此基礎(chǔ)上實(shí)現(xiàn)相關(guān)的業(yè)務(wù)邏輯,將我們從重復(fù)的無太大技術(shù)含量的工作中解放出來。
AutoJava 是我在工作中為了省時(shí)間而寫出來的一個(gè)小工具,希望AutoJava能給廣大的Java人員在編碼過程中節(jié)省時(shí)間。這是地址
zip包,然后自動(dòng)下載下來
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)建時(shí)間: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); 控制臺(tái)打印
/*生成的全部代碼壓縮成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”);
}
}