`

Hibernate NamingStrategy方式 向月表中写日志

阅读更多
按月命名的日志表如 log_YYMM : log_1011,log_1012,表结构完全相同,只是表名不同,通过命名策略实现存数据时自动创建和写入到相应的月表中。

自动创建表,在Hibernate的配置文件中设hbm2ddl.auto 为 update
<hibernate-configuration>

<session-factory>
	<property name="dialect">
		org.hibernate.dialect.MySQLDialect
	</property>
	<property name="connection.url">jdbc:mysql:///test</property>
	<property name="connection.username">root</property>
	<property name="connection.password">root</property>
	<property name="connection.driver_class">
		com.mysql.jdbc.Driver
	</property>
	<property name="myeclipse.connection.profile">mysql</property>

	<property name="hbm2ddl.auto">[b]update[/b]</property>

	<mapping class="db.TDiykey" />
	<mapping class="db.Person" />

</session-factory>

</hibernate-configuration>


/**
 * 月表命名策略
 * 
 * @author hzhlu
 * 
 */
public class MyNamingStrategy extends DefaultNamingStrategy {

	private static final long serialVersionUID = 1L;

	public static final MyNamingStrategy INSTANCE = new MyNamingStrategy();
	private static final DecimalFormat df = new DecimalFormat();
	private static ArrayList<String> rollingTables = new ArrayList<String>();
	static {
		rollingTables.add("PERSON");
		df.applyPattern("00");
	}

	/**
	 * 向月表中保存数据
	 * 
	 * @see net.sf.hibernate.cfg.NamingStrategy#tableName(java.lang.String)
	 */
	public String tableName(String tableName) {
		String stroeTable = tableName;
		// 对指定的表名计算月表的实际存储表名
		if (rollingTables.contains(tableName.toUpperCase())) {
			stroeTable += "_" + df.format(Calendar.getInstance().get(Calendar.YEAR) % 100)
					+ df.format(Calendar.getInstance().get(Calendar.MONTH) + 1);
			System.out.println("store record into [" + stroeTable + "]");
		}

		return stroeTable;
	}

}


修订自动生成的HibernateSessionFactory 增加命名策略,只需添加一行即可。

configuration.setNamingStrategy(MyNamingStrategy.INSTANCE);


public class MySessionFactory {
	private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
	private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
	private static Configuration configuration = new AnnotationConfiguration();
	private static org.hibernate.SessionFactory sessionFactory;
	private static String configFile = CONFIG_FILE_LOCATION;

	static {
		try {
			// 添加月表命名策略
			configuration.setNamingStrategy(MyNamingStrategy.INSTANCE);
			
			configuration.configure(configFile);
			sessionFactory = configuration.buildSessionFactory();
		} catch (Exception e) {
			System.err.println("%%%% Error Creating SessionFactory %%%%");
			e.printStackTrace();
		}
	}




测试程序
public class MyNamingStrategyTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		test2();
	}

	public static void test2() {
 		Session session = MySessionFactory.getSession();
		Transaction tx = session.beginTransaction();

		Person person = new Person();
		person.setId(new Random().nextInt());
		person.setFirstName("firstName");
		person.setLastName("lastName");
		session.save(person);

		TDiykey tDiykey = new TDiykey();
		tDiykey.setDbid("" + System.currentTimeMillis() % 999999);
		tDiykey.setNotes("notes");
		session.save(tDiykey);

		tx.commit();
		session.close();

		System.out.println("ok!");
 	}

}
0
0
分享到:
评论
2 楼 jsboy123 2015-10-30  
大神可以给我一份吗,757624760@qq.com
1 楼 tuoxiaohu 2011-08-25  
能否给我一份完整代码 谢谢!thoot_235@163.com

相关推荐

    Hibernate+中文文档

    3.9. Hibernate日志类别 3.10. JTA TransactionManagers 9.1. 继承映射特性(Features of inheritance mappings) 16.1. 别名注射(alias injection names) 19.1. 缓存策略提供商(Cache Providers) 19.2. 各种...

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

    HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate...

    Hibernate中文详细学习文档

    3.1. 可编程的配置方式 3.2. 获得SessionFactory 3.3. JDBC连接 3.4. 可选的配置属性 3.4.1. SQL方言 3.4.2. 外连接抓取(Outer Join Fetching) 3.4.3. 二进制流 (Binary Streams) 3.4.4. 二级缓存与查询缓存 ...

    Hibernate 中文 html 帮助文档

    3.1. 可编程的配置方式 3.2. 获得SessionFactory 3.3. JDBC连接 3.4. 可选的配置属性 3.4.1. SQL方言 3.4.2. 外连接抓取(Outer Join Fetching) 3.4.3. 二进制流 (Binary Streams) 3.4.4. 二级缓存与查询缓存 ...

    HibernateAPI中文版.chm

    HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate...

    最全Hibernate 参考文档

    1. 在Tomcat中快速上手 1.1. 开始Hibernate之旅 1.2. 第一个持久化类 1.3. 映射cat 1.4. 与Cat同乐 1.5. 结语 2. 架构(Architecture) 2.1. 概况(Overview) 2.2. 实例状态 2.3. JMX整合 2.4. 对JCA的支持 3. 配置 ...

    Hibernate教程

    Hibernate参考文档 目录 前言 1. 翻译说明 2. 版权声明 1. 在Tomcat中快速上手 1.1. 开始Hibernate之旅 1.2. 第一个持久化类 1.3. 映射cat 1.4. 与Cat同乐 1.5. 结语 2. Hibernate入门 2.1. 前言 2.2. 第...

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

    HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate...

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

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

    hibernate3.04中文文档.chm

    4.1. 可编程的配置方式 4.2. 获得SessionFactory 4.3. JDBC连接 4.4. 可选的配置属性 4.4.1. SQL方言 4.4.2. 外连接抓取(Outer Join Fetching) 4.4.3. 二进制流 (Binary Streams) 4.4.4. 二级缓存与...

    Hibernate3+中文参考文档

    3.1. 可编程的配置方式 3.2. 获得SessionFactory 3.3. JDBC连接 3.4. 可选的配置属性 3.4.1. SQL方言 3.4.2. 外连接抓取(Outer Join Fetching) 3.4.3. 二进制流 (Binary Streams) 3.4.4. 二级缓存与查询缓存 ...

    hibernate 框架详解

    可编程的配置方式 4.2. 获得SessionFactory 4.3. JDBC连接 4.4. 可选的配置属性 4.4.1. SQL方言 4.4.2. 外连接抓取(Outer Join Fetching) 4.4.3. 二进制流 (Binary Streams) 4.4.4. 二级缓存与查询缓存 ...

    Hibernate参考文档

    3.1. 可编程的配置方式 3.2. 获得SessionFactory 3.3. JDBC连接 3.4. 可选的配置属性 3.4.1. SQL方言 3.4.2. 外连接抓取(Outer Join Fetching) 3.4.3. 二进制流 (Binary Streams) 3.4.4. 二级缓存与查询缓存 ...

    hibernate_reference中文文档.pdf

    3.1. 可编程的配置方式 ...................................................... 33 3.2. 获得 SessionFactory .................................................. 34 3.3. JDBC 连接 .............................

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

    3.1. 可编程的配置方式 3.2. 获得ISessionFactory 3.3. 用户自行提供ADO.NET连接 3.4. NHibernate提供ADO.NET连接 3.5. 可选的配置属性 3.5.1. SQL方言 3.5.2 外连接抓取(Outer Join Fetching) 3.5.3. 查询...

    NHibernate中文帮助手册API

    可编程的配置方式  3.2. 获得ISessionFactory  3.3. 用户自行提供ADO.NET连接  3.4. NHibernate提供ADO.NET连接  3.5. 可选的配置属性  3.5.1. SQL方言  3.5.2 外连接抓取(Outer Join Fetching)  ...

    NHibernate参考文档 2.0.0 chm

    3.1. 可编程的配置方式 3.2. 获得ISessionFactory 3.3. 用户自行提供ADO.NET连接 3.4. NHibernate提供ADO.NET连接 3.5. 可选的配置属性 3.5.1. SQL方言 3.5.2 外连接抓取(Outer Join Fetching) 3.5.3. 查询...

Global site tag (gtag.js) - Google Analytics