【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; } }
相关文章推荐
- 制作网页---Freemarker小节
- shareprefererences.Editor的apply和commit异同
- Windows内核编程笔记(一)
- Android 图文混排spannableStringBuilder简单使用
- poj 1655 Balancing Act(树形DP)
- java毕向东听课笔记27(集合框架-Map)
- 学习总结
- 线程同步
- C++11 中的单例模式
- IDEA 主题、字体、编辑区主题、文件编码修改
- 设置UITabBarController的用法
- 【BZOJ4513】【Sdoi2016】储能表
- 苹果Mac OS X怎样设置鼠标滚轮滑动的方向/反向
- Python爬取并分析网页【基本版】
- 人脸识别技术大总结(1)——Face Detection & Alignment
- Java HashSet和HashMap源码剖析
- Codeforces--237C--Primes on Interval(二分水题)
- skia : --- SkImageDecoder::Factory returned null
- 线程面试题
- 在Mac中设置Ctrl+C/V进行复制/粘贴