本文目錄一覽:
- 1、求助大神,要求用java代碼寫一個序列生成器
- 2、JAVA文件生成器怎麼用?(具體步驟)
- 3、java代碼生成器用途
- 4、大家對Java代碼生成器有什麼看法?全面回答
- 5、java代碼生成器能生成c語言代碼嗎?用什麼方法能實現呢?
- 6、java代碼生成器怎麼用
求助大神,要求用java代碼寫一個序列生成器
import java.util.HashMap;
import java.security.KeyException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* 類codeKey/code是一個數據庫主鍵生成器,用序列號的方式來產生數據庫中需要的主鍵值。
* p
* codeKey/code目前支持的數據庫包括Oracle的所有版本、MySql的3.x以上的版本
* 以及所有支持max()函數的數據庫,支持字段類型僅為數字類型的主鍵,對於字符及其它類型的主鍵尚不提供支持。
* p
* 在使用時只需提供表名、字段名(主鍵)以及到數據庫的JDBC連接,如果想要獲得message表的id字段的下一個 主鍵值時:
* p
* blockquote
*
* pre
* java.sql.Connection conn = …;
* org.shaoye.common.sql.Key key = org.shaoye.common.sql.Key.getInstance();
* int keyValue = key.getNextKey(“message”, “id”, conn);
* String sql = “insert into message (id,…) values (” + keyValue + “,…)”;
* //執行插入操作…
* /pre
*
* /blockquote
* p
*
* @author 令少爺(shaoye@vip.sina.com)
* @since magic 0.1
*/
public final class Key {
/**
* key的最大值,默認為9223372036854775807,即long類型的最大值
*/
private long max = 9223372036854775807L;
/**
* key的最小值,默認為1
* */
private long min = 1L;
/**
* Key的唯一實例,通過getInstance()方法獲得
* */
private static Key keygen = new Key();
/**
* KeyInfo類的實例列表,默認容量為5個
* */
private HashMapString, KeyInfo keyList = new HashMapString, KeyInfo(5); // keyInfo
// 列表
/**
* 私有的默認構造方法,防止外部構造類的實例
* */
private Key() {
}
/**
* 獲得Key的唯一實例
* */
public static Key getInstance() {
return keygen;
}
/**
* 用指定的表和字段獲得key的下一個值,主鍵的值不得超過2147483647
*
* @param tableName
* 數據庫中的表名,表中必須有一個數字主鍵
* @param keyName
* 表(tableName)中的字段名
* @param conn
* JDBC連接,如果欲獲得的key是第一次取值,則必須保證conn能連接到數據庫
* @return key的下一個主鍵的int值
* @throws codeKeyException/code
* 如果表名或字段名不存在、訪問數據庫錯誤或key的值大於2147483647時拋出
*/
public int getNextKey(String tableName, String keyName, Connection conn)
throws KeyException {
long value = getNextKeyLong(tableName, keyName, conn);
if (value 2147483647L) {
throw new KeyException(
“Key’s value too big,please call getNextKeyLong method!”);
}
return (new Long(value)).intValue();
}
/**
* 用指定的表和字段獲得key的下一個值,最大為9223372036854775807
* @param tableName 數據庫中的表名,表中必須有一個數字主鍵
* @param keyName 表(tableName)中的字段名
* @param conn JDBC連接,如果欲獲得的key是第一次取值,則必須保證conn能連接到數據庫
* @return key的下一個主鍵的long值
* @throws codeKeyException/code 如果表名或字段名不存在或訪問數據庫錯誤時拋出
*/
public long getNextKeyLong(String tableName, String keyName, Connection conn)
throws KeyException {
KeyInfo keyinfo;
String item = tableName + “.” + keyName;
try {
if (keyList.containsKey(item)) {
keyinfo = (KeyInfo) keyList.get(item);
} else {
keyinfo = new KeyInfo(tableName, keyName, conn);
keyList.put(item, keyinfo);
}
return keyinfo.getNextKey();
} catch (SQLException sqle) {
throw new KeyException(sqle);
}
}
/**
* 用指定的”表code./code字段”形式的字符串獲得key的下一個值,主鍵的值不得超過2147483647
* @param tableDotField “表.字段”形式的字符串,如:message.id
* @param conn JDBC連接,如果欲獲得的key是第一次取值,則必須保證conn能連接到數據庫
* @return key的下一個主鍵的int值
* @throws codeKeyException/code 如果表名或字段名不存在、訪問數據庫錯誤或key的值 大於2147483647時拋出
*/
public int getNextKey(String tableDotField, Connection conn)
throws KeyException {
long value = getNextKeyLong(tableDotField, conn);
if (value 2147483647L) {
throw new KeyException(
“Key’s value too big,please call getNextKeyLong method!”);
}
return (new Long(value)).intValue();
}
/**
* 用指定的”表code./code字段”形式的字符串獲得key的下一個值,最大為9223372036854775807
* @param tableDotField “表.字段”形式的字符串,如:message.id
* @param conn JDBC連接,如果欲獲得的key是第一次取值,則必須保證conn能連接到數據庫
* @return key的下一個主鍵的int值
* @throws codeKeyException/code 如果表名或字段名不存在或訪問數據庫錯誤時拋出
*/
public long getNextKeyLong(String tableDotField, Connection conn)
throws KeyException {
int dot_index = tableDotField.indexOf(“.”);
if (tableDotField.indexOf(“.”) 1) {
throw new KeyException(“Unknown Key ‘” + tableDotField + “‘!”);
}
String tab = tableDotField.substring(0, dot_index);
String key = tableDotField.substring(dot_index);
return getNextKeyLong(tab, key, conn);
}
/**
* 用指定的表和字段獲得key的當前值,主鍵的值不得超過2147483647
* @param tableName 數據庫中的表名,表中必須有一個數字主鍵
* @param keyName 表(tableName)中的字段名
* @param conn JDBC連接,如果欲獲得的key是第一次取值,則必須保證conn能連接到數據庫
* @return key的當前int值
* @throws codeKeyException/code
* 如果表名或字段名不存在、訪問數據庫錯誤或key的值大於2147483647時拋出
*/
public int getCurrentKey(String tableName, String keyName, Connection conn)
throws KeyException {
long value = getCurrentKeyLong(tableName, keyName, conn);
if (value 2147483647L) {
throw new KeyException(
“Key’s value too big,please call getCurrentKeyLong method!”);
}
return (new Long(value)).intValue();
}
/**
* 用指定的表和字段獲得key的當前值,最大為9223372036854775807
*
* @param tableName
* 數據庫中的表名,表中必須有一個數字主鍵
* @param keyName
* 表(tableName)中的字段名
* @param conn
* JDBC連接,如果欲獲得的key是第一次取值,則必須保證conn能連接到數據庫
* @return key的當前long值
* @throws codeKeyException/code 如果表名或字段名不存在或訪問數據庫錯誤時拋出
*/
public long getCurrentKeyLong(String tableName, String keyName,
Connection conn) throws KeyException {
KeyInfo keyinfo;
String item = tableName + “.” + keyName;
try {
synchronized (keyList) {
if (keyList.containsKey(item)) {
keyinfo = (KeyInfo) keyList.get(item);
} else {
keyinfo = new KeyInfo(tableName, keyName, conn);
keyList.put(item, keyinfo);
}
}
return keyinfo.getCurrentKey();
} catch (SQLException sqle) {
throw new KeyException(sqle);
}
}
/**
* 用指定的”表code./code字段”形式的字符串獲得key的當前值,主鍵的值不得超過2147483647
*
* @param tableDotField
* “表.字段”形式的字符串,如:message.id
* @param conn
* JDBC連接,如果欲獲得的key是第一次取值,則必須保證conn能連接到數據庫
* @return key的當前int值
* @throws codeKeyException/code 如果表名或字段名不存在、訪問數據庫錯誤或key的值
* 大於2147483647時拋出
*/
public int getCurrentKey(String tableDotField, Connection conn)
throws KeyException {
long value = getCurrentKeyLong(tableDotField, conn);
if (value 2147483647L) {
throw new KeyException(
“Key’s value too big,please call getNextKeyLong method!”);
}
return (new Long(value)).intValue();
}
/**
* 用指定的”表code./code字段”形式的字符串獲得key的當前值,最大為9223372036854775807
*
* @param tableDotField
* “表.字段”形式的字符串,如:message.id
* @param conn
* JDBC連接,如果欲獲得的key是第一次取值,則必須保證conn能連接到數據庫
* @return key的當前int值
* @throws codeKeyException/code 如果表名或字段名不存在或訪問數據庫錯誤時拋出
*/
public long getCurrentKeyLong(String tableDotField, Connection conn)
throws KeyException {
int dot_index = tableDotField.indexOf(“.”);
if (tableDotField.indexOf(“.”) 1) {
throw new KeyException(“Unknown Key ‘” + tableDotField + “‘!”);
}
String tab = tableDotField.substring(0, dot_index);
String key = tableDotField.substring(dot_index);
return getCurrentKeyLong(tab, key, conn);
}
}
/**
* 內部類,用來存儲主鍵信息
* */
class KeyInfo {
private long max = 9223372036854775807L;
private long min = 1L;
private long nextKey;
private String tableName;
private String keyName;
private Connection conn = null;
/**
* keyInfo 對象初始化
*
* @throws KeyException
*/
KeyInfo(String tableName, String keyName, Connection _conn)
throws SQLException, KeyException {
this.tableName = tableName;
this.keyName = keyName;
this.conn = _conn;
retrieveFromDB();
}
int getMax() {
return (new Long(max)).intValue();
}
long getMaxLong() {
return max;
}
int getMin() {
return (new Long(min)).intValue();
}
long getMinLong() {
return min;
}
/**
* 取下一鍵值
*/
int getNextKey() {
return (new Long(getNextKeyLong())).intValue();
}
/**
* 取下一鍵值
*/
synchronized long getNextKeyLong() {
nextKey++;
return nextKey;
}
/**
* 取當前鍵值
*/
synchronized int getCurrentKey() {
return (new Long(nextKey)).intValue();
}
/**
* 取當前鍵值
*/
synchronized long getCurrentKeyLong() {
return nextKey;
}
/**
* 從數據庫中取當前最大值
*
* @throws KeyException
*/
void retrieveFromDB() throws SQLException, KeyException {
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = “select max(” + keyName + “) from ” + tableName;
try {
pstmt = conn.prepareStatement(sql);
} catch (Exception ex) {
throw new KeyException(“Can’t connect DataBase!”);
}
try {
rs = pstmt.executeQuery();
} catch (SQLException sqle) {
if (pstmt != null)
pstmt.close();
throw new KeyException(“‘” + keyName + “‘ or ‘” + tableName
+ “‘ isn’t exist in DataBase!”, sqle);
}
try {
if (rs.next()) {
nextKey = rs.getLong(1);
if (nextKey min) {
nextKey = min;
}
} else {
nextKey = min;
}
} catch (SQLException sqle) {
throw (sqle);
} finally {
if (rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
}
}
}
JAVA文件生成器怎麼用?(具體步驟)
隨便找個地方..
你先雙擊安裝
然後打開那個軟件..
把jar放到上面..按開始生成..你jar旁邊就有jad了..
你再把jar和jad放到你手機里試試
怎麼樣了?可不可以吶?
java代碼生成器用途
代碼生成器就是根據特定的要求制定格式,靈活輸出在項目中重複要用到的代碼,節省項目時間,現在免費的代碼生成器codesmith我經常用的,小玩意,不花錢
大家對Java代碼生成器有什麼看法?全面回答
Java代碼生成器是什麼?
我只知道UML可以直接導出生成Java代碼。 MyEclipse可以自動生成get,set,constructor方法,不知道這算不算代碼生成器?
哪位高手回答,我也順便學習一下~~~~
java代碼生成器能生成c語言代碼嗎?用什麼方法能實現呢?
按照我的理解,可以的,代碼生成器是跨平台,而且是跨語言的(至少是跨文本語言的,UML暫時不好說,)。
代碼生成器作為一種開發工具,一般不直接作為程序的一部分,通常也不直接或間接(如通過AOP)被程序調用,他是通過編程的方式生成所需要的代碼,然後將生成的代碼作為源文件,複製到開發工具的代碼區,然後進行編譯。由於代碼生成器是在編譯之前運行的,因此它可以跨語言,你不但可以用代碼生成器生成高級語言,也可以生成彙編語言,甚至機器碼(0、1代碼)。
但編寫代碼生成器是一個難點,它需要你了解目標編程語言的語法。如果別人已經把你需要的代碼生成器寫好了,你只需按要求使用即可,此時就不需要了解目標編程語言的語法。
JNI是通過Java調用C語言(或其他語言,一般是C),它的實現機制與代碼生成器不同(JNI是通過代碼調用實現功能,而代碼生成器是生成代碼,複製代碼進行使用),由於C是底層語言,一些底層操作單靠Java無法實現,所以才需要JNI。
以上是我對代碼生成器的個人理解,雖然提問時間已過了很久,但依然希望能對你及其他網友有所幫助。
java代碼生成器怎麼用
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”);
}
}
原創文章,作者:LLFT,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/140496.html