`

NamingStrategy实现动态表名映射

阅读更多
NamingStrategy实现动态表名映射2008-06-02 10:25    用一个配置文件,一个类去映射多个表,(每个表的结构相同)。按照平时的做法,有多少个表就要
写多少个配置文件,岂不是很麻烦。怎样才能只写一个配置文件就能达到上述目的呢?

   经过研究,发现Hibernate中的NamingStrategy可以达到这个目的。它是用来定义表名和列名映射规
则的一个接口。我们要通过实现这个接口来实现自己的命名策略。这个接口中包含的十个方法,其中的
public String classToTableName(String className)是通过类名来映射表名的。实现我们的想法就要用
到这个方法。好了,下面来看怎么做:

   1、自定义一个类MyNamingStrategy来实现NamingStrategy。(这样你要实现10个方法,如果其他方法
不需要,我们可以通过继承它的一个适配器类DefaultNamingStrategy来只实现我们需要的方法)好了,我
们就继承DefaultNamingStrategy 吧。
  
      2、实现public String classToTableName(String className)方法来实现自己命名策略。

      例如业务需要是每隔一个月就要换一个表。比如1月用biz_1,那么2月就用biz_2....但是这些表的结构是相同的。我们要做的就是通过获得月份来动态的选择表。我们从这个方法中这样写:
    public class MyNamingStrategy extends DefaultNamingStrategy {
        public static final MyNamingStrategy INSTANCE = new MyNamingStrategy();
        public String classToTableName(String className) {
        return "biz_" + Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
        }
    }

       好了,这样就可以根据月份来动态的选择表名了。

    3、使用命名策略。
       要使用这个命名策略可以这样:
       Configuration cfg = new Configuration()
               .setNamingStrategy(MyNamingStrategy.INSTANCE)
               .configure("hibernate.cfg.xml")
               .addFile("biz.hbm.xml");
----------------------------------
for exemple


package com.etong.common.hibernate;

import net.sf.hibernate.cfg.NamingStrategy;
import net.sf.hibernate.util.StringHelper;

/**
* <p>Title: TNamingStrategy</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2005</p>
* <p>Company: </p>
* <p>Created on 2005-5-30 </p>
* @author jinguo
* @version 1.0
*
*/

public class TNamingStrategy implements NamingStrategy {

/**
* @see net.sf.hibernate.cfg.NamingStrategy#classToTableName(java.lang.String)
*/
public String classToTableName(String className) {
return tableName(StringHelper.unqualify(className).toUpperCase());
}

/**
* @see net.sf.hibernate.cfg.NamingStrategy#propertyToColumnName(java.lang.String)
* @todo
*/
public String propertyToColumnName(String arg0) {
return null;
}

/**
* @see net.sf.hibernate.cfg.NamingStrategy#tableName(java.lang.String)
*/
public String tableName(String tableName) {
return "TBL_" + tableName.toUpperCase();
}

/**
* @see net.sf.hibernate.cfg.NamingStrategy#columnName(java.lang.String)
*/
public String columnName(String columnName) {
return "COL_" + columnName;
}

/**
* @see net.sf.hibernate.cfg.NamingStrategy#propertyToTableName(java.lang.String, java.lang.String)
* @todo
*/
public String propertyToTableName(String arg0, String arg1) {
return null;
}

}
分享到:
评论
1 楼 huihai 2016-06-07  
有demo吗?

相关推荐

    hibernate实现动态表查询的多种解决方案

    hibernate实现动态表查询的多种解决方案.自行整理的动太实现方案,总有一个适合你.

    NHibernate中文帮助手册API

    实现NamingStrategy  3.8. XML配置文件  4. 持久化类(Persistent Classes)  4.1. 一个简单的POCO例子  4.1.1. 为持久化成员变量声明读写属性  4.1.2. 实现一个默认的构造器(constructor)  4.1.3. ...

    Hibernate3的帮助文档

    4.6. 实现NamingStrategy 4.7. XML配置文件 4.8. J2EE应用程序服务器的集成 4.8.1. 事务策略配置 4.8.2. JNDI绑定的SessionFactory 4.8.3. JTA和Session的自动绑定 4.8.4. JMX部署 5. 持久化类(Persistent ...

    hibernate+中文api

    前言 1. 翻译说明 2. 版权声明 1. Hibernate入门 1.1. 前言 ...3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory

    hibernate 框架详解

    实现NamingStrategy 4.7. XML配置文件 4.8. J2EE应用程序服务器的集成 4.8.1. 事务策略配置 4.8.2. JNDI绑定的SessionFactory 4.8.3. JTA和Session的自动绑定 4.8.4. JMX部署 5. 持久化类(Persistent ...

    hibernate 体系结构与配置 参考文档(html)

    实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理 3.8.4...

    Hibernate参考文档

    3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理 ...

    Hibernate中文详细学习文档

    3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理 ...

    hibernate3.04中文文档.chm

    4.6. 实现NamingStrategy 4.7. XML配置文件 4.8. J2EE应用程序服务器的集成 4.8.1. 事务策略配置 4.8.2. JNDI绑定的SessionFactory 4.8.3. JTA和Session的自动绑定 4.8.4. JMX部署 5. 持久化类...

    Hibernate教程

    4.6. 实现NamingStrategy 4.7. XML配置文件 4.8. J2EE应用程序服务器的集成 4.8.1. 事务策略配置 4.8.2. JNDI绑定的SessionFactory 4.8.3. JTA和Session的自动绑定 4.8.4. JMX部署 5. 持久化类(Persistent ...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理 ...

    Hibernate+中文文档

    3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理 ...

    Hibernate 中文 html 帮助文档

    3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理 ...

    HibernateAPI中文版.chm

    3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理 ...

    hibernate3.2中文文档(chm格式)

    3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下使用Current Session context (当前session上下文)管理 ...

    最全Hibernate 参考文档

    3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. JTA和Session的自动绑定 3.8.4. JMX部署 4. 持久化类(Persistent ...

    Hibernate3+中文参考文档

    3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. JTA和Session的自动绑定 3.8.4. JMX部署 4. 持久化类(Persistent ...

    NHibernate参考文档 2.0.0 chm

    3.7. 实现NamingStrategy 3.8. XML配置文件 4. 持久化类(Persistent Classes) 4.1. 一个简单的POCO例子 4.1.1. 为持久化成员变量声明读写属性 4.1.2. 实现一个默认的构造器(constructor) 4.1.3. 提供一个标识属性...

    NHibernate中文帮组文档(2008.11月更新)

    3.7. 实现NamingStrategy 3.8. XML配置文件 4. 持久化类(Persistent Classes) 4.1. 一个简单的POCO例子 4.1.1. 为持久化成员变量声明读写属性 4.1.2. 实现一个默认的构造器(constructor) 4.1.3. 提供一个标识属性...

    hibernate 教程

    实现NamingStrategy(命名策略) 3.8. XML配置文件 4. 持久化类(Persistent Classes) 4.1. POJO简单示例 4.1.1. 为持久化字段声明访问器(accessors)和是否可变的标志(mutators) 4.1.2. 实现一个默认...

Global site tag (gtag.js) - Google Analytics