把数据库表转成javaBean, 有人支持大小写按java标准转换, 个人经验表明: 全部用数据库大写使用更方便, 不容易出错.
本工具可以转换成标准bean格式, 也可以数据库字段原始的方式创建bean
使用本工具的前提: 必须提供 DataSource 数据源对象, 本代码是从spring中获取数据源, 兄弟们可以改写这个代码, 用自己的数据源.
BYTE,SHORT对象用INTEGE,不再区别处理.
FLOAT,DOUBLE对象用BIGDECIMAL,不再区别处理.
生成的属性全部是对象,没有使用 int, long 这类基本属性.
生成的文件在工程目录下面与src目录平级.
全部代码如下:
package com.test.util;
import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.sql.DataSource;
import org.springframework.jdbc.datasource.DataSourceUtils;
//此类请自己定义
import com.test.Const;
import com.test.ServiceLocator;
/**
* 数据库表转换成javaBean对象工具,
* 1,bean属性按原始数据库字段经过去掉下划线,并大写处理首字母等等.
* 2,可以按原始表中的列名生成bean字段(大写),不做任何修改.
* @author guishuanglin 2013-11-26
*/
public class TableToEntityUtils {
//BYTE,SHORT对象用INTEGE,不再区别处理.
//FLOAT,DOUBLE对象用BIGDECIMAL,不再区别处理.
private final int jINTEGER = 1;
private final int jLONG = 2;
private final int jDATE = 3;
private final int jSTRING = 4;
private final int jBIGDECIMAL = 5;
private final int jOBJECT = 6;
private final String sINTEGER ="Integer";
private final String sLONG = "Long";
private final String sDATE = "Date";
private final String sSTRING = "String";
private final String sBIGDECIMAL = "BigDecimal";
private final String sOBJECT = "Object";
//资料
private int dataBaseType =-1;
private String tablename = "";
private String beanName = "";
private int colCount;//列数
private String[] benFieldName;
private String[] benClassName;
private int[] benClassType;
private String[] colnames;
private String[] colTypes;//列类型名字.
private int[] colSizes; // 列字符大小
private int[] colScale; // 列小数精度
//引用包
private boolean importUtil = false; // 导入包java.util.*
private boolean importSql = false; // 包java.sql.*
private boolean importMath = false; // 包java.math.*
//控制变量
private boolean isConvertColName =true;//是否把列名转成java规范的名字.
private boolean onlyCreateBean =true; //只生成Bean.
//类附加注释
private SimpleDateFormat DateFormat = new SimpleDateFormat("yyyy-MM-dd");
private String strDate=null;
private String author="table tool";
/** 入口 */
public void execute(String dbTableName) {
if(dbTableName ==null) return;
if(strDate ==null)
strDate = DateFormat.format(new Date());
tablename = dbTableName;
beanName = this.firstUpperCase(this.toJavaName(dbTableName.toLowerCase()));
boolean b = processTableMetaData(dbTableName);
if(b){
//初始 bean字段数组.
benFieldName = new String[colCount];
benClassName = new String[colCount];
benClassType = new int[colCount];
//处理每列对应的bean属性与java类型
this.processClassnames();
//生成实体 bean
b =tableToEntity(beanName);
}
}
/**
* 处理数表媒体数据, spring数据源名称: dataSource0,dataSource1,dataSource2,dataSource3,dataSource4,dataSource5.
*/
private boolean processTableMetaData(String tName) {
boolean b =false;
// 请改成自己的数据源
DataSource ds = (DataSource) ServiceLocator.getService("dataSource0");
Connection conn = DataSourceUtils.getConnection(ds); // 得到数据库连接
String strsql = "SELECT * FROM " + tablename;//+" WHERE ROWNUM=1";
try {
System.out.println("================ "+tName+" ====&