hibernate動態表名映射--僅僅有想不到,沒有作不到

      近期的一個項目有一個需求,有N個考覈單位,要對每個考覈單位生成一張考覈狀況表。這樣作的目的是橫切數據庫,這這個需求的實現中,個人組員遇到了一個技術問題,我將個人解決的方法和整個思考過程與你們分享,java


思路:

        用一個配置文件。一個類去映射多個表,(每個表的結構一樣)。依照平時的作法。有多少個表就要 寫多少個配置文件,豈不是很是麻煩。如何才幹僅僅寫一個配置文件就能達到上述目的呢? 通過研究,發現Hibernate中的NamingStrategy可以達到這個目的。數據庫

它是用來定義表名和列名映射規 則的一個接口。咱們要經過實現這個接口來實現本身的命名策略。這個接口中包括的十個方法,當中的 public String classToTableName(String className)是經過類名來映射表名的。實現咱們的想法就要用 到這種方法。好了,如下來看怎麼作: post


步驟:

一、本身定義一個類MyNamingStrategy來實現NamingStrategy。(這樣你要實現10個方法,假設其它方法 不需要,咱們可以經過繼承它的一個適配器類DefaultNamingStrategy來僅僅實現咱們需要的方法)好了。我 們就繼承DefaultNamingStrategy 吧。 


二、實現public String classToTableName(String className)方法來實現本身命名策略。 


我這的業務需要是每隔一個月就要換一個表。比方1月用biz_1,那麼2月就用biz_2….但是這些表的結構是一樣的。

咱們要作的就是經過得到月份來動態的選擇表。咱們從這種方法中這樣寫: 
spa


<span style="font-size:18px;">/**
 *這個類是又一次定義一個hibernate的命名規範
**/
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); 


	} 

} </span>



好了,這樣就可以依據月份來動態的選擇表名了。

 


三、使用命名策略。 


要使用這個命名策略可以這樣: 


hibernate

<span style="font-size:18px;">Configuration cfg = new Configuration() 
	.setNamingStrategy(MyNamingStrategy.INSTANCE) 
	.configure(「hibernate.cfg.xml」)
	.addFile(「biz.hbm.xml」); </span>






ok,這樣就可以實現咱們的動態表名映射啦!code


總結:

很是多時候,我是經常被本身的思惟所束縛,這是個人一種思惟慣性,而且我僅僅要找到一種解決這個問題的方法,就會看成寶典收藏,別人有比你好的,也會有種排斥的信息,兩者偏偏是阻礙咱們進步的牢籠,咱們應該衝破這曾牢籠。咱們應該更大膽些,想到且看到咱們和曾經大相徑庭的一面!xml

相關文章
相關標籤/搜索