天天看點

bboss持久層資料庫擴充卡編寫和注冊方法

bboss持久層資料庫擴充卡編寫和注冊方法

bboss持久層預設提供了以下資料庫的擴充卡:

  • as400
  • db2app
  • db2net
  • cloudscape
  • hypersonic
  • interbase
  • instantdb
  • mssql
  • mysql
  • mariadb
  • oracle
  • postgresql
  • sapdb
  • sybase
  • weblogic
  • axion
  • informix
  • odbc
  • msaccess
  • derby
  • sqlite

随着資料庫技術的發展,不斷有新的資料庫技術出現,是以我們需要針對這些新的資料庫實作特定的擴充卡,本文介紹如何實作具體的擴充卡,以國内的達夢資料庫為示例。

1.編寫擴充卡

所有的擴充卡都需要繼承抽象類:

com.frameworkset.orm.adapter.DB

可以任意擴充實作抽象類中DB的方法,比如生成分頁sql的方法,如果不需要則無需覆寫。擴充擴充卡的分頁機制執行個體:

http://yin-bp.iteye.com/blog/1278360

達夢資料庫擴充卡:

package com.frameworkset.orm.adapter;
import java.sql.Connection;
import java.sql.SQLException;

import com.frameworkset.orm.adapter.DB;

public class DBDM extends DB{

	@Override
	public String toUpperCase(String in) {
		// TODO Auto-generated method stub
		return in;
	}

	@Override
	public String getIDMethodType() {
		// TODO Auto-generated method stub
		return NO_ID_METHOD;
	}

	@Override
	public String getIDMethodSQL(Object obj) {
		// TODO Auto-generated method stub
		return "";
	}

	@Override
	public void lockTable(Connection con, String table) throws SQLException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void unlockTable(Connection con, String table) throws SQLException {
		// TODO Auto-generated method stub
		
	}

	@Override
	public String ignoreCase(String in) {
		// TODO Auto-generated method stub
		return in;
	}

}
      

2.注冊擴充卡

寫好後,在poolman.xml中進行配置注冊即可:

<poolman>  
    <adaptor dbtype="dm">com.frameworkset.orm.adapter.DBDM</adaptor> 
     <adaptor dbtype="dm.jdbc.driver.DmDriver">com.frameworkset.orm.adapter.DBDM</adaptor>
....
</poolman>
      

這裡需要注冊了兩次,一次以dm資料庫的驅動程式dm.jdbc.driver.DmDriver進行注冊,一個以dm作為别名進行注冊,這樣便于在編寫多資料庫sql語句時使用這個别名配置特定資料庫的sql語句,bboss持久層配置多資料庫語句的文檔請參考:

http://yin-bp.iteye.com/blog/1180111

注意:

adaptor 的dbtype屬性值可以是一個别名,或者直接是對應資料庫的驅動包路徑,例如:oracle.jdbc.driver.OracleDriver

上面也用達夢資料庫的驅動dm.jdbc.driver.DmDriver注冊了我們自己寫的達夢資料庫擴充卡,同時也用一個簡寫的别名dm注冊了達夢資料庫擴充卡。

預設的dbtype别名有:

如果dbtype使用的别名與預設别名重複,則将覆寫預設的資料庫擴充卡,如果不想,則需要指定其他的别名,比如下面的dbtype="myoracle",這樣我們要引用這個擴充卡的話,需要在datasource中明确指定這個别名:

<datasource>
       ...........
   <dbtype>myoracle</dbtype>
..............
</datasource>      

如果資料源指定了dbtype,則bboss持久層加載資料源會通過對于的dbtype檢索注冊的資料庫擴充卡,否則會通過資料庫驅動包路徑檢索對應的資料庫擴充卡。