通过java代码读取数据库表反向生成相应的pojo类

下午要根据数据库的一个表写一个pojo,那个累啊,80列名。写了大概10列就没心情写了。于是就想到通过数据库反向生成java类,但没有 myeclipse又不懂生成,于是手动写了一个大概的方法,暂时仅仅在sqlserver测试通过,对于包名跟引用类就没写了,把代码复制到 eclipse直接ctrl+shift+o就导入了


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;

import com.onedear.util.database.DataBaseType;

/**
 * 数据库工具类
 *
 * @author onedear
 * @data:2010-10-21 下午06:12:39
 */
public class DBUtil {高中英语重点语法有哪些


    public static final int SQLSERVER = 1;
    public static final int MYSQL = 2;
    public static final int ORACLE = 3;
    private static final String LINE = "\r\n";
    private static final String TAB = "\t";欠款

    /**
     * 用于调试,懒得写相应的参数
     *
     * @return
     * @throws SQLException
     * @throws ClassNotFoundException
     */
    public static Connection getConnection() throws ClassNotFoundException, SQLException {
            return getConnection("192.168.0.161:1997", "ETForMonitor_V2", "sa",
                    "password", DBUtil.SQLSERVER);
    }

    /**
     *
     * 通过jdbc获取相应的数据库链接connection
     *
     * @param ipport
     *            ip+port ,eg.: 192.168.0.161:1997
     * @param dbName
     *            databaseName ,eg. : ETForMonitor_V2
     * @param username
     *            eg.:sa
     * @param password
     *            eg. :password
     * @param type
     *            请看本类的静态变量
     * @return
     * @throws ClassNotFoundException
     * @throws SQLException
     */
    public static Connection getConnection(String ipport, String dbName,
            String username, String password, int type)
            throws ClassNotFoundException, SQLException {
        String jdbcString = null;
        if (type == SQLSERVER) {
            jdbcString = "jdbc:jtds:sqlserver://" + ipport + ";databaseName="
                    + dbName;
            Class.forName("net.sourceforge.jtds.jdbc.Driver");
        } else if (type == MYSQL) {
            jdbcString = "jdbc:mysql://" + ipport + "/" + dbName;
            Class.forName("org.gjt.mm.mysql.Driver");
        } else if (type == ORACLE) {
            jdbcString = "jdbc:oracle:thin:@" + ipport + ":" + dbName;
            Class.forName("oracle.jdbc.driver.OracleDriver");
        }

        Connection connection = null;
        connection = DriverManager
                .getConnection(jdbcString, username, password);
        return connection;
    }

    /**
     * 数据库表生成相应的java类,生成规则
     * 类名=        表名(第一个字母大写)
     * 属性名=   数据库列名
     * get/set方法 = 根据标准生成
     * 其中生成的基本类型均为包装类,例如Integer , Long , Boolean , String 
     * @param connection
     * @param tableName
     * @param dbType
     * @param path
     * @param isCreateFile
     * @return
     * @throws SQLException
     */
    public static String table2pojo(Connection connection, String tableName,
            int dbType, String path , boolean isCreateFile) throws SQLException {
        String sql = "select * from " + tableName + " where 1 <> 1";
        PreparedStatement ps = null;
        ResultSet rs = null;
        ps = connection.prepareStatement(sql);
        rs = ps.executeQuery();
        ResultSetMetaData md = rs.getMetaData();
        int columnCount = md.getColumnCount();
       
        StringBuffer sb = new StringBuffer();
        tableName = tableName.substring(0, 1).toUpperCase() +tableName.subSequence(1, tableName.length());
        sb.append("public class " + tableName + " {");
        sb.append(LINE);

        for (int i = 1; i <= columnCount; i++) {
            sb.append(TAB);
            sb.append("private "
                    + DataBaseType.getPojoType(md.getColumnTypeName(i)) + " "
                    + md.getColumnName(i) + ";");
            // System.out.println("name : " + md.getColumnName(i) +
            // "   , type :"
            // + md.getColumnTypeName(i));
            sb.append(LINE);
        }

        for (int i = 1; i <= columnCount; i++) {
            sb.append(TAB);

            String pojoType = DataBaseType.getPojoType(md.getColumnTypeName(i));
            String columnName = md.getColumnName(i);
            String getName = null;
            String setName = null;
            if (columnName.length() > 1) {
                getName = "public "+pojoType+" get" + columnName.substring(0, 1).toUpperCase()
                        + columnName.substring(1, columnName.length()) + "() {";
                setName = "public void set" + columnName.substring(0, 1).toUpperCase()
                        + columnName.substring(1, columnName.length()) + "("
                        + pojoType + " " + columnName + ") {";
            } else {
                getName = "public get" + columnName.toUpperCase() + "() {";
                setName = "public set" + columnName.toUpperCase() + "(" + pojoType
                        + " " + columnName + ") {";
            }
           
            sb.append(LINE).append(TAB).append(getName);
            sb.append(LINE).append(TAB).append(TAB);
            sb.append("return " + columnName +";");
            sb.append(LINE).append(TAB).append("}");
            sb.append(LINE);
            sb.append(LINE).append(TAB).append(setName);
            sb.append(LINE).append(TAB).append(TAB);
            sb.append("this." +  columnName + " = " + columnName +";" );
            sb.append(LINE).append(TAB).append("}");
            sb.append(LINE);
           
        }
        sb.append("}");

        System.out.println(sb.toString());
       
        if(isCreateFile)
            FileUtils.stringToFile(null,tableName +".java" , sb.toString());
        return null;
    }

    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        Connection con = getConnection();
        table2pojo(con, "PlayBackVisitorControl", DBUtil.SQLSERVER, "" , true);
       
    }


}


转载于:https://my.oschina.net/linuxred/blog/30368

POJOGenerator(POJO代码生成器 v1.2) 本POJO代码生成器采用Java的Swing技术编码实现,是绿色免费工具,可以自由传播。 由于本工具的内部实现较菜,所以还请反编译高手手下留情,让我留几分颜面。^_^ 作者本人只用过Oracle、MySQL、MS SQL Server这三款数据库产品,所以制作成exe 可执行文件时只添入了这三款数据库的驱动支持。如果您需要使用这款工具从其它 数据库生成POJO,那么您可以联系我(Email:CodingMouse@gmail.com),我会 添加其它数据库的驱动支持后通过电子邮件发送给您。 简单的使用说明: 1、先将压缩档解压到任意文件夹。 2、可以预先在配置档cmsdk4j.cfg.xml设定您的数据库服务器配置,配置档已经 提供了默认的配置信息,您仅需在此基础上修改部分参数(如:IP地址、端口号、 用户名、密码、数据库名等),这些参数将作为生成器的预设数据库连接配置参数。 3、可以预先在配置档generator.cfg.xml设定您的数据型映射方案,配置档已经 提供了MS SQL Server和Oracle两种映射方案,当然,可能有不太完整的地方,您可以 根据实际情况稍作修改即可。需要注意的一点是ref属性示引用同一映射方案的另一 映射,这样您便可以简化同一映射数据型的配置;而import属性是指定需要在最终 生成的源代码作为最开始的package型导入声明部分的导入型名称,因此,这 个名称是完整带包名的名称,否则不能正确生成最终代码。配置档提供的默认配置 如果不能满足你的需要,也可以自行根据实际情况进行修改。 4、所有配置档仅在工具启动初始读取一次并缓存到内存,因此,如果您是在工具运行 时修改的配置档,请重新启动本工具以使新的配置生效。并且,所有配置档的XML结构均 不能修改,只能修改其节点间的文本值或属性值,否则会导致本工具无法工作。 5、所有最终代码生成效果都可以在左边的代码预览区域查看和进行二次修改,点击 【写入磁盘文件】按钮生成到磁盘文件时将以代码预览区的内容为准。当然,通常 更好的做法是将最终代码生成后拷贝到您的项目对应文件夹。最好不要直接指向您的 项目文件夹,因为本工具会直接覆盖掉指定目录同名的文件。最终生成代码文件以 .java为扩展名。 如果您有好的建议,请发送留言到作者博客:http://blog.csdn.net/CodingMouse 或发送邮件到:CodingMouse@gmail.com 本工具已经打包成exe可执行文件,便于在Window环境下运行,但仍需要你的机器上 安装至少1.5版本的jre环境。 关联文章:http://blog.csdn.net/CodingMouse/archive/2009/07/13/4345782.aspx http://www.java2000.net/p17774 By CodingMouse 2009年7月14日
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值