您的位置:首页 > 其它

【Hibernate】Hibernate中查询表名、字段名以及字段类型等信息

2016-04-27 21:20 543 查看
Hibernate中查询表名、字段名以及字段类型等信息的工具类

package com.lmb.ui.util;

import org.hibernate.cfg.Configuration;
import org.hibernate.mapping.Column;
import org.hibernate.mapping.PersistentClass;
import org.hibernate.mapping.Property;

import java.util.Iterator;

/**
* 功能描述:根据实体类得到对应的表名、主键名、字段名工具类
*/
public class HibernateConfigurationHelper {

private static Configuration hibernateConf;

private static Configuration getHibernateConf() {
if (hibernateConf == null) {
return new Configuration();
}
return hibernateConf;
}

private static PersistentClass getPersistentClass(Class clazz) {
synchronized (HibernateConfigurationHelper.class) {
PersistentClass pc = getHibernateConf().getClassMapping(
clazz.getName());
if (pc == null) {
hibernateConf = getHibernateConf().addClass(clazz);
pc = getHibernateConf().getClassMapping(clazz.getName());

}
return pc;
}
}

/**
* 功能描述:获取实体对应的表名
*
* @param clazz 实体类
* @return 表名
*/
public static String getTableName(Class clazz) {
return getPersistentClass(clazz).getTable().getName();
}

/**
* 功能描述:获取实体对应表的主键字段名称
*
* @param clazz 实体类
* @return 主键字段名称
*/
public static String getPkColumnName(Class clazz) {

return getPersistentClass(clazz).getTable().getPrimaryKey()
.getColumn(0).getName();

}

/**
* 功能描述:通过实体类和属性,获取实体类属性对应的表字段名称
*
* @param clazz        实体类
* @param propertyName 属性名称
* @return 字段名称
*/
public static String getColumnName(Class clazz, String propertyName) {
PersistentClass persistentClass = getPersistentClass(clazz);
Property property = persistentClass.getProperty(propertyName);
Iterator it = property.getColumnIterator();
if (it.hasNext()) {
Column column = (Column) it.next();
return column.getName();
}
return null;
}

/**
* 功能描述:通过实体类和属性,获取实体类属性对应的表字段类型
*
* @param clazz        实体类
* @param propertyName 属性名称
* @return 字段名称
*/
public static String getColumnType(Class clazz, String propertyName) {
PersistentClass persistentClass = getPersistentClass(clazz);
Property property = persistentClass.getProperty(propertyName);
String type = property.getType().getName();
if (type.equals("timestamp")) {
return "java.sql." + type.substring(0, 1).toUpperCase() + type.substring(1);
} else {
return "java.lang." + type.substring(0, 1).toUpperCase() + type.substring(1);
}

}

/**
* 获得实体类的主键属性名称,如果没有返回null
*
* @param clazz 实体类的class对象
* @return 实体类主键属性名称
*/
public static String getPrimaryKeyName(Class clazz) {
PersistentClass persistentClass = getPersistentClass(clazz);
Property property = persistentClass.getIdentifierProperty();
if (property != null) {
return property.getName();
}
return null;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: