本代码是利用DB2数据字典自动创建表对应的Java Model,提高了表格太多,字段太多时手动创建Model时的效率。由于代码是本人写的,所以有任何问题敬请谅解。
代码中提供了创建单表Model的方法和对应schema下所有表格model的方法。请用到的网友自行测试。
下面直接贴代码:
package com.test.util;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class DBModelCreateManager {
private Connection con = null;
private String dbIP;
private String dbPort;
private String dbName;
private String userName;
private String password;
public DBModelCreateManager(String dbIP,String dbPort,String userName,String password,String dbName){
this.dbIP = dbIP;
this.dbName = dbName;
this.dbPort = dbPort;
this.userName = userName;
this.password = password;
getConnection();
}
private void getConnection(){
try {
Class.forName("com.ibm.db2.jcc.DB2Driver");
String url = "jdbc:db2://"+dbIP+":"+dbPort+"/"+dbName;
con = DriverManager.getConnection(url, userName, password);
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
catch (SQLException e) {
e.printStackTrace();
}
}
/** * 获取对应表的字段信息 * @param tableName * @return */
private List<Map<String,String>> getTableColumns(String tableName,String schema){
List<Map<String,String>> colList = new ArrayList<Map<String,String>>(0);
if(tableName==null){
System.err.println("Neither tableName nor schema can be null!");
} else{
if(con == null) getConnection();
if(con != null){
String sql = "select colname,typename from SYSCAT.COLUMNS where TABNAME='"+tableName.toUpperCase()+"' and TABSCHEMA='"+schema.toUpperCase()+"'" +" order by COLNO";
PreparedStatement st;
try {
st = con.prepareStatement(sql);
ResultSet rs = st.executeQuery();
if(rs != null){
while(rs.next()){
Map<String,String> map = new HashMap<String, String>();
map.put("colName",rs.getString("colname"));
map.put("className", getTypeClass(rs.getString("typename")));
colList.add(map);
}
}
}
catch (SQLException e) {
e.printStackTrace();
}
}
}
return colList;
}
/** * 根据数据库类型获取对应java类型 * @param type * @return */
private String getTypeClass(String type){
if(type != null){
if(type.equalsIgnoreCase("VARCHAR")||type.equalsIgnoreCase("CHARACTER")){
return "String";
} else if(type.equalsIgnoreCase("SAMLLINT")||type.equalsIgnoreCase("INTEGER")){
return "Integer";
} else if(type.equalsIgnoreCase("DOUBLE")){
return "double";
} else if(type.equalsIgnoreCase("BIGINT")){
return "long";
} else if(type.equalsIgnoreCase("Date")){
return "Date";
} else if(type.equalsIgnoreCase("TIMESTAMP")){
return "Timestamp";
}
}
return "Object";
}
/** * 创建单个表对应的model * @param tableName * @param packagePath * @return * @throws IOException */
public void createDBModel(String tableName,String packagePath,String schema) throws IOException{
//创建目录
File f = new File("src/"+packagePath.replace(".", "/")+"/"); f.mkdir();
//因为文件是追加写入,所以文件存在则删除
String tabName = tableName.toLowerCase();
tabName = tabName.substring(0, 1).toUpperCase()+tabName.substring(1);
if(tabName.contains("_")){
String[] items = tabName.toLowerCase().split("_");
tabName = items[0].substring(0, 1).toUpperCase()+items[0].substring(1);
for(int i = 1;i<items.length;i++){
tabName = tabName+items[i].substring(0, 1).toUpperCase()+items[i].substring(1);
}
}
File file = new File("src/"+packagePath.replace(".", "/")+"/"+tabName+".java");
if(file.exists()){
file.delete();
}
OutputStreamWriter out = new FileWriter(file,true);
List<Map<String,String>> colList = getTableColumns(tableName,schema);
StringBuffer fileContent = new StringBuffer("package "+packagePath+";/n");
fileContent.append("import java.util.Date;/n");
fileContent.append("import java.sql.Timestamp;/n");
fileContent.append("public class "+tabName+"{/n");
StringBuffer varStr = new StringBuffer();
StringBuffer methods = new StringBuffer();
for(Iterator<Map<String,String>> it = colList.iterator();it.hasNext();){
Map<String,String> obj = it.next();
String className = obj.get("className");
String colName = obj.get("colName");
String[] items = colName.toLowerCase().split("_");
colName = items[0];
for(int i = 1;i<items.length;i++){
colName = colName+items[i].substring(0, 1).toUpperCase()+items[i].substring(1);
}
//变量定义部分
varStr.append("/t"+"private "+className+" "+colName+";/n");
//set/get方法部分
methods.append("/t"+"public void set"+colName.substring(0, 1).toUpperCase()+colName.substring(1)+"("+className+" "+colName+"){/n");
methods.append("/t/t this."+colName+" = "+colName+";/n"); methods.append("/t}/n/n");
methods.append("/t"+"public "+className+" get"+colName.substring(0, 1).toUpperCase()+colName.substring(1)+"(){/n");
methods.append("/t/t return this."+colName+";/n"); methods.append("/t}/n/n");
}
fileContent.append(varStr.toString()+"/n");
fileContent.append(methods.toString());
fileContent.append("}");
//写入文件 out.write(fileContent.toString()); out.close();
}
/**
* 为对应schema下的所有表创建model
* @param schema
* @param packagePath
* @throws IOException
*/
public void createModelForSchema(String schema,String packagePath) throws IOException{
List<String> tableList = new ArrayList<String>(0);
if(schema==null){
System.err.println("Schema can not be null!");
}else{
if(con == null)
getConnection();
if(con != null){
String sql = "select tabname from SYSCAT.TABLES where TABSCHEMA='"+schema.toUpperCase()+"'";
PreparedStatement st;
try {
st = con.prepareStatement(sql);
ResultSet rs = st.executeQuery();
if(rs != null){
while(rs.next()){
tableList.add(rs.getString("tabname"));
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
for(Iterator<String> it = tableList.iterator();it.hasNext();){
String tableName = it.next();
createDBModel(tableName, packagePath,schema);
}
}
}
下面这个是我自己测试生成的一个model的类代码。
package com.test.model;
import java.util.Date;
import java.sql.Timestamp;
public class PatchAdvisory{
private long uid;
private Integer packageSid;
private long swcatUid;
private String vendorId;
private String vendorTitle;
private String rating;
private Timestamp vendorReleaseDate;
private Timestamp receiveDate;
private String sourceAvailable;
private Timestamp publishDate;
private String productType;
private String vendor;
private String product;
private String version;
private String releasename;
private String underlyingOs;
private String architecture;
private String createdby;
private String datasource;
private String lastmodifiedby;
private String deleted;
private String audUser;
private String audType;
private Timestamp audTime;
private Timestamp lastmodifiedtime;
private String validFlag;
private String vendorUrl;
private String sourceUrl;
private String primaryUrl;
private String dq;
private String updatePending;
private Timestamp ratingDate;
private String securityflag;
private String crcCode;
private String ratingDesignator;
private Integer varianceCode;
public void setUid(long uid){
this.uid = uid;
}
public long getUid(){
return this.uid;
}
public void setPackageSid(Integer packageSid){
this.packageSid = packageSid;
}
public Integer getPackageSid(){
return this.packageSid;
}
public void setSwcatUid(long swcatUid){
this.swcatUid = swcatUid;
}
public long getSwcatUid(){
return this.swcatUid;
}
public void setVendorId(String vendorId){
this.vendorId = vendorId;
}
public String getVendorId(){
return this.vendorId;
}
public void setVendorTitle(String vendorTitle){
this.vendorTitle = vendorTitle;
}
public String getVendorTitle(){
return this.vendorTitle;
}
public void setRating(String rating){
this.rating = rating;
}
public String getRating(){
return this.rating;
}
public void setVendorReleaseDate(Timestamp vendorReleaseDate){
this.vendorReleaseDate = vendorReleaseDate;
}
public Timestamp getVendorReleaseDate(){
return this.vendorReleaseDate;
}
public void setReceiveDate(Timestamp receiveDate){
this.receiveDate = receiveDate;
}
public Timestamp getReceiveDate(){
return this.receiveDate;
}
public void setSourceAvailable(String sourceAvailable){
this.sourceAvailable = sourceAvailable;
}
public String getSourceAvailable(){
return this.sourceAvailable;
}
public void setPublishDate(Timestamp publishDate){
this.publishDate = publishDate;
}
public Timestamp getPublishDate(){
return this.publishDate;
}
public void setProductType(String productType){
this.productType = productType;
}
public String getProductType(){
return this.productType;
}
public void setVendor(String vendor){
this.vendor = vendor;
}
public String getVendor(){
return this.vendor;
}
public void setProduct(String product){
this.product = product;
}
public String getProduct(){
return this.product;
}
public void setVersion(String version){
this.version = version;
}
public String getVersion(){
return this.version;
}
public void setReleasename(String releasename){
this.releasename = releasename;
}
public String getReleasename(){
return this.releasename;
}
public void setUnderlyingOs(String underlyingOs){
this.underlyingOs = underlyingOs;
}
public String getUnderlyingOs(){
return this.underlyingOs;
}
public void setArchitecture(String architecture){
this.architecture = architecture;
}
public String getArchitecture(){
return this.architecture;
}
public void setCreatedby(String createdby){
this.createdby = createdby;
}
public String getCreatedby(){
return this.createdby;
}
public void setDatasource(String datasource){
this.datasource = datasource;
}
public String getDatasource(){
return this.datasource;
}
public void setLastmodifiedby(String lastmodifiedby){
this.lastmodifiedby = lastmodifiedby;
}
public String getLastmodifiedby(){
return this.lastmodifiedby;
}
public void setDeleted(String deleted){
this.deleted = deleted;
}
public String getDeleted(){
return this.deleted;
}
public void setAudUser(String audUser){
this.audUser = audUser;
}
public String getAudUser(){
return this.audUser;
}
public void setAudType(String audType){
this.audType = audType;
}
public String getAudType(){
return this.audType;
}
public void setAudTime(Timestamp audTime){
this.audTime = audTime;
}
public Timestamp getAudTime(){
return this.audTime;
}
public void setLastmodifiedtime(Timestamp lastmodifiedtime){
this.lastmodifiedtime = lastmodifiedtime;
}
public Timestamp getLastmodifiedtime(){
return this.lastmodifiedtime;
}
public void setValidFlag(String validFlag){
this.validFlag = validFlag;
}
public String getValidFlag(){
return this.validFlag;
}
public void setVendorUrl(String vendorUrl){
this.vendorUrl = vendorUrl;
}
public String getVendorUrl(){
return this.vendorUrl;
}
public void setSourceUrl(String sourceUrl){
this.sourceUrl = sourceUrl;
}
public String getSourceUrl(){
return this.sourceUrl;
}
public void setPrimaryUrl(String primaryUrl){
this.primaryUrl = primaryUrl;
}
public String getPrimaryUrl(){
return this.primaryUrl;
}
public void setDq(String dq){
this.dq = dq;
}
public String getDq(){
return this.dq;
}
public void setUpdatePending(String updatePending){
this.updatePending = updatePending;
}
public String getUpdatePending(){
return this.updatePending;
}
public void setRatingDate(Timestamp ratingDate){
this.ratingDate = ratingDate;
}
public Timestamp getRatingDate(){
return this.ratingDate;
}
public void setSecurityflag(String securityflag){
this.securityflag = securityflag;
}
public String getSecurityflag(){
return this.securityflag;
}
public void setCrcCode(String crcCode){
this.crcCode = crcCode;
}
public String getCrcCode(){
return this.crcCode;
}
public void setRatingDesignator(String ratingDesignator){
this.ratingDesignator = ratingDesignator;
}
public String getRatingDesignator(){
return this.ratingDesignator;
}
public void setVarianceCode(Integer varianceCode){
this.varianceCode = varianceCode;
}
public Integer getVarianceCode(){
return this.varianceCode;
}
}