国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
水平切分-分表 Ibatis和Hibernate 數(shù)據(jù)庫分表(動(dòng)態(tài)表名映射)的實(shí)現(xiàn)方法

 自從ibatis 2.0.9以后,ibatis支持動(dòng)態(tài)表名。

 以下為用Map做參數(shù)的動(dòng)態(tài)表名實(shí)現(xiàn)方法:

示例代碼如下:
 Sample :

 < select  id ="getRighe"  
remapResults ="true" 
resultMap ="resultRighe"  
parameterClass ="java.util.Map" > 
select * from 
$tablePrefix$_righe
where IDUser = #IDUser#
 </ select > 
 
and java code :

param.put("IDUser", IDUser);
param.put("tablePrefix", "NAG");
utente = (Riga)getSqlMapClientTemplate().queryForObject("getRighe", param);


但 如果我們要插入一個(gè)對(duì)象,我們需傳進(jìn)一個(gè)POJO對(duì)象,由于Ibatis 只能接受一個(gè)參數(shù),這時(shí)用Map來傳對(duì)象,會(huì)比較麻煩

可不可以用POJO對(duì)象里的一個(gè)屬性來決定表名呢?

答案是肯定的。

在分表設(shè)計(jì)的數(shù)據(jù)庫中,一般存在許多結(jié)構(gòu)相同,但表名后綴不同的表。

我們?cè)诓迦胍粋€(gè)新對(duì)象到表中里,由自己制定的路由規(guī)則是可以得到這個(gè)對(duì)象要插到那個(gè)表里的。即程序知道插到哪個(gè)表里,那么

怎么讓Ibatis也知道呢?

當(dāng)然你可以把Pojo對(duì)象屬性全放到Map里,再在Map里加一個(gè)表名的屬性,傳給Ibatis,但這樣比較麻煩

我們可以為每一個(gè)POJO對(duì)象增加一個(gè)表名后綴的屬性(或表名),在Ibatis里直接用這個(gè)屬性做表名。

不過,且記,用“$”來界定這個(gè)屬性的名字,而不是“#”

因?yàn)椋贗batis里,每一個(gè)#,除了替換值,它都會(huì)加上一個(gè)單引號(hào)'.

如下例所示:(假設(shè),你在Pojo對(duì)象里,增加了一個(gè)suffix的屬性,就可以這樣來決定插入表名)

INSERT INTO myTable$suffix$  
     (column1,column2)   
   VALUES (#column1#,#column2#)
   
這時(shí)的parameterClass仍為你的Pojo類。


Ibatis能比較方便地實(shí)現(xiàn)數(shù)據(jù)庫的分表問題,Hibernate可以用NamingStrategy實(shí)現(xiàn)動(dòng)態(tài)表名映射


以下內(nèi)容引自:http://jinguo.javaeye.com/blog/209642

用一個(gè)配置文件,一個(gè)類去映射多個(gè)表,(每個(gè)表的結(jié)構(gòu)相同)。按照平時(shí)的做法,有多少個(gè)表就要 
寫多少個(gè)配置文件,豈不是很麻煩。怎樣才能只寫一個(gè)配置文件就能達(dá)到上述目的呢?

   經(jīng)過研究,發(fā)現(xiàn)Hibernate中的NamingStrategy可以達(dá)到這個(gè)目的。它是用來定義表名和列名映射規(guī) 
則的一個(gè)接口。我們要通過實(shí)現(xiàn)這個(gè)接口來實(shí)現(xiàn)自己的命名策略。這個(gè)接口中包含的十個(gè)方法,其中的 
public String classToTableName(String className)是通過類名來映射表名的。實(shí)現(xiàn)我們的想法就要用 
到這個(gè)方法。好了,下面來看怎么做:

   1、自定義一個(gè)類MyNamingStrategy來實(shí)現(xiàn)NamingStrategy。(這樣你要實(shí)現(xiàn)10個(gè)方法,如果其他方法 
不需要,我們可以通過繼承它的一個(gè)適配器類DefaultNamingStrategy來只實(shí)現(xiàn)我們需要的方法)好了,我 
們就繼承DefaultNamingStrategy 吧。 
   
      2、實(shí)現(xiàn)public String classToTableName(String className)方法來實(shí)現(xiàn)自己命名策略。

      例如業(yè)務(wù)需要是每隔一個(gè)月就要換一個(gè)表。比如1月用biz_1,那么2月就用biz_2....但是這些表的結(jié)構(gòu)是相同的。我們要做的就是通過獲得月份來動(dòng)態(tài)的選擇表。我們從這個(gè)方法中這樣寫: 
    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); 
        } 
    }

       好了,這樣就可以根據(jù)月份來動(dòng)態(tài)的選擇表名了。

    3、使用命名策略。 
       要使用這個(gè)命名策略可以這樣: 
       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; 
}

}

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
pojo+xDoclet生成ibatis映射文件
通俗易懂的Nhibernate教程(2) ---- 配置之Nhibernate配置
讓Hibernate生成的DDL腳本自動(dòng)增加注釋
hibernate 初學(xué)
ibatis介紹
Ibatis與Hibernate的區(qū)別
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服