修改自网络:http://blog.youkuaiyun.com/fhwbj/article/details/3267787
import java.util.Iterator;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
import org.hibernate.mapping.Column;
import org.hibernate.mapping.PersistentClass;
import org.hibernate.mapping.PrimaryKey;
import org.hibernate.mapping.Property;
/**
* 功能描述:根据实体类得到对应的表名、主键名、字段名工具类
* </p>
* 注:po类名须与对应映射文件名一致,即Student.java与Student.hbm.xml<br>
* //修改为主注解方式,此hbm文件已经不需要
*
*
* @Date:Nov 10, 2008
* @Time:3:13:07 PM
*
*/
public class EntityUtil {
private static Configuration hibernateConf;
private static Configuration getHibernateConf() {
if (hibernateConf == null) {
// hibernateConf=new Configuration();//*.hbm.xml方式
hibernateConf=new AnnotationConfiguration().configure();//注解方式
hibernateConf.buildSessionFactory();//注解方式必须的
}
return hibernateConf;
}
private static PersistentClass getPersistentClass(Class<?> clazz) {
synchronized (EntityUtil.class) {
PersistentClass pc = getHibernateConf().getClassMapping(
clazz.getName());
if (pc == null) {
// hibernateConf = getHibernateConf().addClass(clazz);//*.hbm.xml方式
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 getPrimaryKey(Class<?> clazz) {
return getPrimaryKeys(clazz).getColumn(0).getName();
}
/**
* 功能描述:获取实体对应表的主键字段名称
*
* @param clazz
* 实体类
* @return 主键对象primaryKey ,可用primaryKey.getColumn(i).getName()
*/
public static PrimaryKey getPrimaryKeys(Class<?> clazz) {
return getPersistentClass(clazz).getTable().getPrimaryKey();
}
/**
* 功能描述:通过实体类和属性,获取实体类属性对应的表字段名称
*
* @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;
}
}
hibernate.cfg.xml:需要这个文件,这是唯一的缺点。
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/managerdb</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!--
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/shop</property>
<property name="connection.username">root</property>
<property name="connection.password">ynb</property>
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
-->
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">10</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<!-- <mapping package="pp.entity"/> -->
<mapping class="pp.entity.Department"/>
<mapping class="pp.entity.Element"/>
<mapping class="pp.entity.Employee"/>
<mapping class="pp.entity.EmployeeType"/>
<mapping class="pp.entity.Goods"/>
<mapping class="pp.entity.GoodsType"/>
<mapping class="pp.entity.GoodsFactoryType"/>
<mapping class="pp.entity.ProductAssembleRecord"/>
<mapping class="pp.entity.PersonalInfo"/>
<mapping class="pp.entity.Product"/>
<mapping class="pp.entity.SalaryType"/>
<mapping class="pp.entity.Storage"/>
<!-- <mapping class="pp.entity.StoreroomKeeper"/> -->
<mapping class="pp.entity.CheckRecord"/>
<mapping class="pp.entity.CheckRecordType"/>
<mapping class="pp.entity.EncourageRecord"/>
<mapping class="pp.entity.EncourageRecordType"/>
<mapping class="pp.entity.MonthSalaryRecord"/>
<mapping class="pp.entity.MonthSalaryType"/>
<mapping class="pp.entity.MonthSalary"/>
<mapping class="pp.entity.StorageRecord"/>
<mapping class="pp.entity.TradeRecord"/>
<mapping class="pp.entity.TradeRecordType"/>
<mapping class="pp.entity.FundRecordType"/>
<mapping class="pp.entity.FundRecord"/>
<mapping class="pp.entity.Fund"/>
<mapping class="pp.entity.SalaryCareInfo"/>
<mapping class="pp.entity.StaticInfo"/>
<mapping class="pp.entity.SaleAchievementTakePercent"/>
<mapping class="pp.entity.ProductionRecord"/>
<!-- <mapping class="pp.entity.EmployeeProductionRecord"/>
<mapping class="pp.entity.DepartmentProductionRecord"/> -->
<mapping class="pp.entity.ProductionRecordType"/>
<mapping class="pp.entity.TestEntity"/>
</session-factory>
</hibernate-configuration>
本文介绍了一个用于Hibernate框架的工具类,该类能够帮助开发者从实体类中获取表名、主键名及字段名等信息,适用于使用注解方式配置的Hibernate应用。
4902

被折叠的 条评论
为什么被折叠?



