文档章节

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

墙头草
 墙头草
发布于 2011/08/26 10:11
字数 654
阅读 280
收藏 0

下午要根据数据库的一个表写一个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);
       
    }


}


© 著作权归作者所有

墙头草
粉丝 16
博文 145
码字总数 117172
作品 0
卢湾
私信 提问
加载中

评论(1)

AndyLam
AndyLam
这个不是原创的,是转过来的吧?
MyEclipse开发教程:使用REST Web Services管理JPA实体(二)

MyEclipse 在线订购年终抄底促销!火爆开抢>> MyEclipse最新版下载 使用REST Web Services来管理JPA实体。在逆向工程数据库表后生成REST Web服务,下面的示例创建用于管理博客条目的简单Web...

电池盒
2018/12/21
12
0
hibernate反向工程 (eclipse和myeclipse)(转)

hibernate反向工程 (eclipse和myeclipse) 如何提取数据库的模式信息,想通过hibernate的反向工具尝试下。 一、myeclipse下hibernate反向工程: 1、选择myeclipse hibernate视图 2、建立与后...

随智阔
2014/03/21
69
0
自己手写一个Mybatis框架(简化)

继上一篇手写SpringMVC之后,我最近趁热打铁,研究了一下Mybatis。MyBatis框架的核心功能其实不难,无非就是动态代理和jdbc的操作,难的是写出来可扩展,高内聚,低耦合的规范的代码。本文完...

我叫刘半仙
2018/03/07
3K
3
Mybatis应用学习——简单使用示例

传统JDBC程序中存在的问题 1. 一个简单的JDBC程序示例: 2. 上面代码造成的问题: 频繁的创建和释放数据库连接对象,极大消耗数据库性能,解决:可以通过数据库连接池技术(c3p0、DBCP、dru...

江左煤郎
2018/11/22
21
0
Java程序员从笨鸟到菜鸟之(五十二)细谈Hibernate(三)Hibernate常用API详解及源码分析

新接触一个框架的目的就是想利用这个框架来为我们做一些工作,或者是让他来简化我们的工作,利用这个框架无非就是要利用这个框架所给我们提供的API去操作我们的数据,所以利用一个框架的好坏...

长平狐
2012/11/12
144
0

没有更多内容

加载失败,请刷新页面

加载更多

Java 文件类操作API与IO编程基础知识

阅读目录: https://www.w3cschool.cn/java/java-io-file.html Java 文件 Java 文件 Java 文件操作 Java 输入流 Java 输入流 Java 文件输入流 Java 缓冲输入流 Java 推回输入流 Java 数据输入...

boonya
43分钟前
5
0
SDKMAN推荐一个好

是在大多数基于Unix的系统上管理多个软件开发工具包的并行版本的工具。它提供了一个方便的命令行界面(CLI)和API来安装,切换,删除和列出sdk相关信息。以下是一些特性: By Developers, fo...

hotsmile
今天
9
0
什么是 HDFS

是什么? HDFS 是基于 Java 的分布式文件系统,允许您在 Hadoop 集群中的多个节点上存储大量数据。 起源: 单机容量往往无法存储大量数据,需要跨机器存储。统一管理分布在集群上的文件系统称...

Garphy
今天
7
0
一起来学Java8(四)——复合Lambda

在一起来学Java8(二)——Lambda表达式中我们学习了Lambda表达式的基本用法,现在来了解下复合Lambda。 Lambda表达式的的书写离不开函数式接口,复合Lambda的意思是在使用Lambda表达式实现函...

猿敲月下码
今天
11
0
debian10使用putty配置交换机console口

前言:Linux的推广普及,需要配合解决实际应用方能有成效! 最近强迫自己用linux进行实际工作,过程很痛苦,还好通过网络一一解决,感谢各位无私网友博客的帮助! 系统:debian10 桌面:xfc...

W_Lu
今天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部