一个自动生成Hibernate ORM映射文件的工具函数

没啥,前几天有人问我如何生成Hibernate的映射文件,我随口说,就那点儿东西,自己随便写个函数不就得了,谁知对方这伙计有够懒,直接就开口说兄弟帮忙了,无奈之下随手应付了一个

import java.io.FileWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.sql.Types;
import java.util.Date;

public class ConfigGenerator
...{

    public static void main(String[] args) throws Exception
    ...{
        String table_name = "user_list";
        String root_path = "C:/";
        String pkgName = "lld.test.hibernate";
        Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
        DriverManager.registerDriver(new com.microsoft.jdbc.sqlserver.SQLServerDriver());
        Connection conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test", "sa", "sa");
        System.out.println("connected to database successfully.");
        Statement st = conn.createStatement();
        String sql = "select * from " + table_name + " where 1 = 2";
        ResultSet rs = st.executeQuery(sql);
        ResultSetMetaData meta = rs.getMetaData();
        String hbmFile = getHbmFile(root_path, table_name);
        String beanFile = getBeanFile(root_path, table_name);
        System.out.println("output hbm file: " + hbmFile);
        System.out.println("output bean file: " + beanFile);
        
        String beanName = getBeanName(table_name);
        FileWriter outHbm = new FileWriter(hbmFile);
        FileWriter outBean = new FileWriter(beanFile);
        outHbm.write("<?xml version="1.0" encoding="UTF-8"?>");
        outHbm.write(" ");
        outHbm.write("<!DOCTYPE hibernate-mapping PUBLIC");
        outHbm.write(" ");
        outHbm.write("    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"");
        outHbm.write(" ");
        outHbm.write("    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">");
        outHbm.write(" ");
        outHbm.write("<hibernate-mapping>");
        outHbm.write(" ");
        outHbm.write("    <class name="" + pkgName + "." + beanName + "" table="" + table_name + "">");
        outHbm.write(" ");
        
        outBean.write("package " + pkgName + ";");
        outBean.write(" ");
        outBean.write(" ");
        outBean.write("public class " + beanName);
        outBean.write(" ");
        outBean.write("{");
        outBean.write(" ");
        
        StringBuffer toStr = new StringBuffer();
        
        for(int iCol = 1; iCol <= meta.getColumnCount(); iCol++)
        ...{
            String colName = meta.getColumnName(iCol);
            int colType = meta.getColumnType(iCol);
            String propName = getPropertyName(colName);
            String javaType = getJavaType(colType).getName();
            outHbm.write("        <property name="" + propName + "" column="" + colName + ""/>");
            outHbm.write(" ");
            
            outBean.write("    private " + javaType + " " + propName + ";");
            outBean.write(" ");
            outBean.write(" ");
            outBean.write("    public " + javaType + " " + getGetterMethod(propName) + "()");
            outBean.write(" ");
            outBean.write(" {");
            outBean.write(" ");
            outBean.write("        return this." + propName + ";");
            outBean.write(" ");
            outBean.write(" }");
            outBean.write(" ");
            outBean.write(" ");

            outBean.write("    public void " + getSetterMethod(propName) + "(" + javaType + " " + propName + ")");
            outBean.write(" ");
            outBean.write(" {");
            outBean.write(" ");
            outBean.write("        this." + propName + " = " + propName + ";");
            outBean.write(" ");
            outBean.write(" }");
            outBean.write(" ");
            outBean.write(" ");
            
            toStr.append(""" + propName + " = " + this." + propName + " + "rn" ");
            if(iCol != meta.getColumnCount())
            ...{
                toStr.append("              + ");
            }
                
        }

        outHbm.write("    </class>");
        outHbm.write(" ");
        outHbm.write("</hibernate-mapping>");
        outHbm.flush();
        outHbm.close();
        System.out.println("hbm file generated sucessfully!");

        outBean.write("    @Override");
        outBean.write(" ");
        outBean.write("    public String toString()");
        outBean.write(" ");
        outBean.write("    {");
        outBean.write(" ");
        outBean.write("        return " + toStr.toString() + ";");
        outBean.write(" ");
        outBean.write(" }");
        outBean.write(" ");
        outBean.write("}");
        outBean.flush();
        outBean.close();
        System.out.println("bean file generated sucessfully!");
    }
    
    private static String getHbmFile(String root_path, String table_name)
    ...{
        return root_path + table_name + ".hbm.xml";
    }
    
    private static String getBeanFile(String root_path, String table_name)
    ...{
        String beanName = getBeanName(table_name);
        return root_path + beanName + ".java";
    }
    
    private static String getBeanName(String table_name)
    ...{
        String[] segs = table_name.split("_");
        String beanName = "";
        for(int i = 0; i < segs.length; i++)
        ...{
            beanName += segs[i].substring(0, 1).toUpperCase() + segs[i].substring(1, segs[i].length()).toLowerCase();
        }
        return beanName;
    }

    private static String getPropertyName(String col_name)
    ...{
        String[] segs = col_name.split("_");
        String propName = "";
        for(int i = 0; i < segs.length; i++)
        ...{
            if(i == 0)
                propName += segs[i];
            else
                propName += segs[i].substring(0, 1).toUpperCase() + segs[i].substring(1, segs[i].length()).toLowerCase();
        }
        return propName;
    }

    private static String getGetterMethod(String prop_name)
    ...{
        return "get" + prop_name.substring(0, 1).toUpperCase() + prop_name.substring(1, prop_name.length());
    }

    private static String getSetterMethod(String prop_name)
    ...{
        return "set" + prop_name.substring(0, 1).toUpperCase() + prop_name.substring(1, prop_name.length());
    }
    
    @SuppressWarnings("unchecked")
    private static Class getJavaType(int colType)
    ...{
        switch(colType)
        ...{
            case Types.BIT:
            case Types.TINYINT:
            case Types.SMALLINT:
                return Short.class;
            case Types.INTEGER:
                return Integer.class;
            case Types.BIGINT:
                return Long.class;
            case Types.CHAR:
            case Types.VARCHAR:
            case Types.CLOB:
            case Types.LONGNVARCHAR:
                return String.class;
            case Types.FLOAT:
                return Float.class;
            case Types.DOUBLE:
                return Double.class;
            case Types.DATE:
            case Types.TIME:
            case Types.TIMESTAMP:
                return Date.class;
            default:
                return Object.class;
        }
    }
}
 

时间: 2024-08-01 23:29:40

一个自动生成Hibernate ORM映射文件的工具函数的相关文章

android-Android编程自动生成的r.java文件,里面的代码特别多

问题描述 Android编程自动生成的r.java文件,里面的代码特别多 和视频教程里面看到的都不一样.我用的Android6.0SDK.刚接触Android,什么都不懂,求助各位.谢谢 解决方案 Android R.java文件没有生成android R.java资源文件不自动生成的原因Android: 如何手工生成R.java文件? 解决方案二: 由系统管理的,不用动它. 解决方案三: 这个文件不用动,里边放的是宏以及函数地址. 解决方案四: 系统自动创建的R.java,这个文件相当于资源字

hibernate-Oracle数据库中新增一个字段,Hibernate中映射怎样加?

问题描述 Oracle数据库中新增一个字段,Hibernate中映射怎样加? 问题:我在oracle数据库中新增一个字段,那么在Hibernate映射中,需要手动加进去吗?在中. 谢谢!! 解决方案 类似这样,第一个name对应实体中,第二个name对应数据库 解决方案二:

数据库-实现一个自动生成的订单ID

问题描述 实现一个自动生成的订单ID 我在做一个POS机收费系统,然后打算写一个java类生成订单ID,因为ID不能重复,所以我打算是按"日期+流水号"的格式. 在生成一张订单的订单号的时候,需要获取数据库上一订单的ID 然后+1来实现. 想求问一下大神们,如何才能获取上一订单的ID号呢? 解决方案 自动生成ID 解决方案二: 可以获取所有的id,之后对其进行拆分,去掉前面的日期部分,将剩余的部分进行比较大小,去最大者+1,再拼接上当前的时间就成了新的id

c# c++ dll-C#调用C++和opencv生成的dll库文件,其中函数中带有指针

问题描述 C#调用C++和opencv生成的dll库文件,其中函数中带有指针 大家好,我用C#调用C++的dll,其中一个函数中有指针,参数的定义在C++中是一个结构体,但是我现在遇到的问题是无法获取托管类型的地址和大小,或无法声明指向它的指针,下面我把这个函数在C++中的定义和我自己转到C#中的定义给大家贴出来,大家帮帮忙,本人属于C++和C#新手. C++ 1. int THFI_Create (short nChannelNum,THFI_Param* pParam) 功能:初始化THFa

关于c# 自动生成不需要的文件夹

问题描述 各位高手,问题是这样的:在做一个程序,在以前一个程序的框架基础上修改,以前的工程名称为GCGL,系统为三层,数据层DBSQL,应用层BUSINESS,表示层GCGL:新的工程前两层一样,表示层为HTGL.系统运行后,在工程目录下自动生成GCGL文件夹,里面有DBSQL.dll,BUSINESS.dll两个文件,这个文件夹是不需要的.不知道从那里修改设置? 解决方案 解决方案二:根据名字GCGL等去代码中搜,看看哪个地方创建了这个目录,或者看看这个文件夹是不是项目自动生成的,比如输出目录

sublime打开文件时自动生成并打开.dump文件

转载:http://www.cnblogs.com/ayseeing/p/3910784.html GBK Encoding Support 没有安装前打开ASNI格式编码文件会乱码,安装成功重启则可以打开正常 关于.dump文件生成的解释: 当打开一个非utf-8格式且包含汉字的文件时,sublime text 2会自动生成一个dump文件,文件修改过程中,不会修改原文件,只有按"保存"了才会将dump的数据更新到原文件里,关闭当前编辑的dump文件则会自动删除dump文件.   但

MyEclipse自动生成hibernate映射文件

http://blog.csdn.net/blacklin520/article/details/6854163  

Hibernate根据映射文件生成数据库表

问题描述 package com.xy.HibernateUtil; import org.hibernate.cfg.Configuration; import java.io.File; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.h

一个自动生成交叉报表的小工具,用vb.net开发的,蛮不错的,共享一下。

问题描述 自己开发的,觉得不错,不忍心烂在自己的硬盘里:http://pan.baidu.com/s/1jHgwTim 解决方案 解决方案二:唉,校验码还可以再模糊点吗,我仅仅刷新8次就成功了.