hibernate配置文件工具类得到对应的表名、主键名、字段名和字段描述

本文介绍了一个Java工具类,用于从实体类中获取表名、主键名和字段名等信息,便于进行数据库操作。该工具类利用Hibernate框架,通过反射机制获取实体类对应的数据库映射信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.util.Iterator;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.hibernate.cfg.Configuration;
import org.hibernate.mapping.Column;
import org.hibernate.mapping.PersistentClass;
import org.hibernate.mapping.Property;

import com.osnt.entity.EqpInfo;
import com.osnt.entity.OillSpillAccident;

/**
 * HibernateConfigurationHelper.java
 *  * 功能描述:根据实体类得到对应的表名、主键名、字段名工具类
 * </p>
 * 注:po类名须与对应映射文件名一致,即EqpInfo.java与EqpInfo.hbm.xml
 * @author alongshow
 */
public class HibernateConfigurationTools {

	private static Configuration hibernateConf;

	@SuppressWarnings("unused")
	private static Configuration getHibernateConf() {
		if (hibernateConf == null) {
			return new Configuration();
		}
		return hibernateConf;
	}

	@SuppressWarnings("unchecked")
	private static PersistentClass getPersistentClass(Class clazz) {
		synchronized (HibernateConfigurationTools.class) {
			PersistentClass pc = getHibernateConf().getClassMapping(
					clazz.getName());
			if (pc == null) {
				hibernateConf = getHibernateConf().addClass(clazz);
				pc = getHibernateConf().getClassMapping(clazz.getName());
			}
			return pc;
		}
	}

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

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

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

	}

	/**
	 * 功能描述:通过实体类和属性,获取实体类属性对应的表字段名称
	 * 
	 * @param clazz
	 *            实体类
	 * @param propertyName
	 *            属性名称
	 * @return 字段名称
	 */
	@SuppressWarnings("unchecked")
	public static String getColumnName(Class clazz, String propertyName) {
		if(!StringUtils.isEmpty(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;
	}
	
	public static String getCommentContent(Class clazz,String fieldName){
		PersistentClass persistentClass = getPersistentClass(clazz);
		Property property = persistentClass.getProperty(fieldName);
		Iterator it = property.getColumnIterator();
		if (it.hasNext()) {
			Column column = (Column) it.next();
			return column.getComment();
		}
		return null;
	}
	/**
	 * 根据实体Class对象和数据库字段名得到实体属性名
	 * @param clazz
	 * @param attribName
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public static String getPropertyName(Class clazz, String attribName) {
		PersistentClass persistentClass = getPersistentClass(clazz);
		Iterator it = persistentClass.getPropertyIterator();
		//遍历Class对象的所有属性名
		while (it.hasNext()) {
			Property property = (Property) it.next();
			Iterator itr=property.getColumnIterator();
			//遍历该属性对应的数据库字段名
			while (itr.hasNext()) {
				Column c=(Column) itr.next();
				if(attribName.equals(c.getName())){
					return property.getName();
				}
			}
		}
		return null;
		
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
//		System.out.println(getTableName(EqpInfo.class));
//		System.out.println(getColumnName(EqpInfo.class, "eqpId"));
//		System.out.println(getPkColumnName(EqpInfo.class));
		System.out.println(getPropertyName(EqpInfo.class, "RNW_TM"));
		System.out.println(getCommentContent(EqpInfo.class, "rnwTm"));
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值