通过Hibernate配置获取数据库表的具体信息

来源:互联网 发布:衣服打版软件 编辑:程序博客网 时间:2024/05/18 04:48
/**
* 通过Hibernate配置获取数据库表的具体信息
*
*
*/
Java代码 复制代码 收藏代码
  1. import java.util.ArrayList;
  2. import java.util.Iterator;
  3. import java.util.List;
  4. import org.hibernate.cfg.Configuration;
  5. import org.hibernate.mapping.Column;
  6. import org.hibernate.mapping.PersistentClass;
  7. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
  8. /**
  9. * 通过Hibernate配置获取数据库表的具体信息
  10. *
  11. *
  12. */
  13. public class HibernatePluginsUtilextends HibernateDaoSupport {
  14. // public static String getTablenameByObject(Class c){
  15. // SingleTableEntityPersister
  16. // entityPersister=(SingleTableEntityPersister).getSessionFactory().getClassMetadata(POJO.class).
  17. //
  18. // //获得pojo对应表名:
  19. // String tableName = entityPersister.getTableName();
  20. // //entityPersister中还包含pojo的属性、属性值、以及属性对应的数据库表字段等配置信息。
  21. //
  22. // }
  23. private static Configuration hibernateConf =new Configuration();
  24. /**
  25. * 获得Hibernate持久化类
  26. * @param clazz
  27. * @return PersistentClass
  28. */
  29. @SuppressWarnings("unchecked")
  30. private static PersistentClass getPersistentClass(Class clazz) {
  31. synchronized (HibernatePluginsUtil.class) {
  32. PersistentClass pc = hibernateConf.getClassMapping(clazz.getName());
  33. if (pc == null) {
  34. hibernateConf = hibernateConf.addClass(clazz);
  35. pc = hibernateConf.getClassMapping(clazz.getName());
  36. }
  37. return pc;
  38. }
  39. }
  40. /**
  41. * 获得表名
  42. *
  43. * @param clazz 映射到数据库的po类
  44. * @return String
  45. */
  46. @SuppressWarnings("unchecked")
  47. public static String getTableName(Class clazz) {
  48. return getPersistentClass(clazz).getTable().getName();
  49. }
  50. /**
  51. * 获得列名
  52. *
  53. * @param clazz 映射到数据库的po类
  54. * @param icol 第几列
  55. * @return String
  56. */
  57. @SuppressWarnings("unchecked")
  58. public static String getColumnName(Class clazz,int icol) {
  59. // return getPersistentClass( clazz
  60. // ).getTable().getPrimaryKey().getColumn( 0 ).getName(); //獲取主鍵名
  61. return getPersistentClass(clazz).getTable().getColumn(icol).getName();
  62. }
  63. /**
  64. * 获得所有列名
  65. *
  66. * @param clazz 映射到数据库的po类
  67. * @return List<String> 列名
  68. */
  69. @SuppressWarnings("unchecked")
  70. public static List<String> getColumnNames(Class clazz) {
  71. Iterator<Column> itr = getPersistentClass(clazz).getTable().getColumnIterator();
  72. List<String> columns = new ArrayList<String>();
  73. while (itr.hasNext()) {
  74. Column tmp = itr.next();
  75. columns.add(tmp.getName());
  76. }
  77. return columns;
  78. }
  79. }