ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

SeasarコミュのS2DAOテーブル定義のマッピングBean自動生成ツールを作ってみました

  • mixiチェック
  • このエントリーをはてなブックマークに追加
S2DAOには大変お世話になっております。
お世話になりっぱなしで何か還元できることはないかなということでツールを1本作りました。

DB上のテーブル定義からjava beanのマッピングソースを自動生成します。
定型なので簡単なものですが、よろしければお使い下さい。
変なところもありますが。。

------------------------------
出力例:

public static final String TABLE = "calendar";

private int cl_id;
public int getCl_id() {
return cl_id;
}
public void setCl_id(int cl_id) {
this.cl_id = cl_id;
}

private String cl_yyyymmdd;
public String getCl_yyyymmdd() {
return cl_yyyymmdd;
}
public void setCl_yyyymmdd(String cl_yyyymmdd) {
this.cl_yyyymmdd = cl_yyyymmdd;
}

private String cl_yyyymm;
public String getCl_yyyymm() {
return cl_yyyymm;
}
public void setCl_yyyymm(String cl_yyyymm) {
this.cl_yyyymm = cl_yyyymm;
}
.
.
.
------------------------------------------------

import java.sql.*;

/**
* DBテーブル定義からjava beanのjavaソースを標準出力するツールクラス<br>
* DB及び取得したいテーブル定義を行った後mainをキックしてください
*
* @author t.kawahara
*
*/
public class GenerateTableDataBeanTool {

// ///////////////////////////////////////////
// 以下定義すること

// JDBCドライバを定義する
private static final String JDBC_DRIVER = "org.postgresql.Driver";

// JDBC接続文字列を定義する
private static final String CONNECTION_STRING = "jdbc:postgresql:hogedb";

// DBのユーザ名を定義する
private static final String DB_USER_NM = "hogeuser";

// DBのユーザパスワードを定義する
private static final String DB_USER_PWD = "hogepwd";

// DBのテーブル名を定義する
private static final String TABLE_NM = "hogetable";

//
// //////////////////////////////////////////

/**
* DBテーブル定義からjava beanのjavaソースを標準出力する
*
* @param args
*/
public static void main(String[] args) {
generate();
}

/**
* DBに接続しjava beanのjavaソースを標準出力する
*
*/
private static void generate() {

Connection con = null;
Statement stmt = null;
try {
Class.forName(JDBC_DRIVER); // PostgreSQLの場合

// データベースへ接続
con = DriverManager.getConnection(CONNECTION_STRING, DB_USER_NM,
DB_USER_PWD); // PostgreSQLの場合

// ステートメントオブジェクトを生成
stmt = con.createStatement();
String sql = "SELECT * FROM " + TABLE_NM;
// クエリーを実行して結果セットを取得
ResultSet rs = stmt.executeQuery(sql);
ResultSetMetaData meta = rs.getMetaData();
int columnCount = meta.getColumnCount();

// ヘッダを出力する
System.out.println(sourceHeaderOutput(TABLE_NM) + "\n");

// 列定義を出力する
String curColumnNm, curColumnType;
int i;
for (i = 0; i < columnCount; i++) {

curColumnNm = meta.getColumnName(i + 1);
curColumnType = typesToJavaType(meta.getColumnType(i + 1));

System.out.println(sourceColumnOutput(curColumnNm,
curColumnType));

}
} catch (Exception e) {
e.printStackTrace();
} finally {
// データベースから切断
if (stmt != null) {
try {
stmt.close();
} catch (Exception e) {
}
}
if (con != null) {
try {
con.close();
} catch (Exception e) {
}
}
}
}

/**
* テーブル名よりヘッダ宣言を取得する
*
* @param tableNm
* @return
*/
private static String sourceHeaderOutput(String tableNm) {
StringBuffer sb = new StringBuffer();
sb.append("public static final String TABLE = \"").append(tableNm)
.append("\";");

return sb.toString();
}

/**
* 列名・列タイプより宣言・getter・setterを取得する
*
* @param columnNm
* @param columnType
* @return
*/
private static String sourceColumnOutput(String columnNm, String columnType) {
StringBuffer sb = new StringBuffer();
// 宣言構築
sb.append("private ").append(columnType).append(" ").append(columnNm)
.append(";\n");
// getter構築
sb.append("public ").append(columnType).append(" get").append(
columnNm.substring(0, 1).toUpperCase()).append(
columnNm.substring(1, columnNm.length())).append("() {\n");
sb.append("\t return ").append(columnNm).append(";\n");
sb.append("}\n");
// setter構築
sb.append("public void ").append(" set").append(
columnNm.substring(0, 1).toUpperCase()).append(
columnNm.substring(1, columnNm.length())).append("(").append(
columnType).append(" ").append(columnNm).append(") {\n");
sb.append("\t this.").append(columnNm).append(" = ").append(columnNm)
.append(";\n");
sb.append("}\n");

return sb.toString();
}

/**
* Types値からjavaのデータ型名を返す
*
* @param sqlTypes
* @return
*/
private static String typesToJavaType(int sqlTypes) {
switch (sqlTypes) {
case Types.ARRAY:
return "Array";
case Types.BIGINT:
return "long";
case Types.BINARY:
return "byte[]";
case Types.BIT:
return "boolean";
case Types.BLOB:
return "Blob";
case Types.BOOLEAN:
return "boolean";
case Types.CHAR:
return "String";
case Types.CLOB:
return "Clob";
case Types.DATALINK:
// 不明!!
return "???";
case Types.DATE:
return "java.sql.Date";
case Types.DECIMAL:
return "java.math.BigDecimal";
case Types.DISTINCT:
// それぞれで対応すること
return "???";
case Types.DOUBLE:
return "double";
case Types.FLOAT:
return "double";
case Types.INTEGER:
return "int";
case Types.JAVA_OBJECT:
return "Object";
case Types.LONGVARBINARY:
return "byte[]";
case Types.LONGVARCHAR:
return "String";
case Types.NULL:
// 不明!!
return "???";
case Types.OTHER:
return "???";
case Types.REAL:
return "float";
case Types.REF:
return "Ref";
case Types.SMALLINT:
return "short";
case Types.STRUCT:
return "Struct";
case Types.TIME:
return "java.sql.Time";
case Types.TIMESTAMP:
return "java.sql.Timestamp";
case Types.TINYINT:
return "byte";
case Types.VARBINARY:
return "byte[]";
case Types.VARCHAR:
return "String";
default:
// 今後JDKが拡張された場合にあるかもしれない
return "?????";
}
}
}

コメント(0)

mixiユーザー
ログインしてコメントしよう!

Seasar 更新情報

Seasarのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング