天天看點

bboss 持久層架構使用最佳實踐-帶連接配接(connection)參數接口和不帶連接配接參數接口的選擇bboss 持久層架構使用最佳實踐-帶連接配接(connection)參數接口和不帶連接配接參數接口的選擇

bboss 持久層架構使用最佳實踐-帶連接配接(connection)參數接口和不帶連接配接參數接口的選擇

bboss項目下載下傳清單 在sourceforge通路位址為:

https://sourceforge.net/project/showfiles.php?group_id=238653

bboss 持久層架構提供了兩類通路資料庫的接口:帶connection參數的接口和不帶connection參數的接口。這兩類接口在各種場合下面都可以使用,實作的功能都是一樣的,但是适用的場合還是不一樣的,下面分别描述。

  1. 帶連接配接connection參數的接口

帶連接配接connection參數的接口在通路資料庫時不再向bboss資料庫連接配接池申請連接配接而直接使用外部參數傳入的connection,這樣一個connection可以供多個資料庫操作使用,适用于資料庫操作比較密集的環境,這樣能夠大大地提升應用程式的性能;如果在這種情況下使用不帶connection參數的接口,意味着每次通路資料庫都要向bboss連接配接池申請connection,由于連接配接池是一種串行化的帶并發鎖定的元件,頻繁的申請和釋放将導緻嚴重的系統性能開銷,最終導緻系統性能緩慢。使用帶connection參數的方法時需要確定最後關閉connection,防止連接配接洩漏。使用的步驟如下:

   a.調用DBUtil.getConnection()或者DBUtil.getConnection(String dbname)方法申請一個資料庫連接配接

   b.通路DBUtil或者PreparedDBUtil或者CallableDBUtil的帶connection參數的方法傳入剛申請的connection對象進行資料庫操作

   c.操作完畢後在finally塊中關閉連接配接

這裡以預編譯操作接口(其他接口都提供了類似功能不一一枚舉)為例,舉例如下:

PreparedDBUtil db = new PreparedDBUtil();

  Connection con = null;

  try {

   con = DBUtil.getConection(); //申請連接配接

   db.preparedDelete("delete from test");

   db.executePrepared(con);//使用連接配接

   db.preparedInsert("insert into test(id,name) values(?,?)");

   db.setString(1, "1");

   db.setString(2, "name");

   db.preparedInsert("insert into test(name) values(?)");

   db.setString(1, "name");

   db.preparedInsert("insert into test(name,clobname,blobname) values(?,?,?)");

   db.setClob(2, "content");

   db.setBlob(3, "content".getBytes());

   db.preparedSelect("select * from test where name=?");

   //db.setString(1, "1");

   for(int i = 0; i < db.size(); i ++)

   {

    System.out.println(i + " id=" + db.getString(i, "id"));

    System.out.println(i + " name=" + db.getString(i, "name"));

   }

  } catch (Exception e) {

   // TODO Auto-generated catch block

   e.printStackTrace();

  }

  finally

  {

   try {

   if(con != null)

        con.close();//關閉連接配接

   } catch (SQLException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

2.不帶連接配接參數的接口

不帶connection參數的方法适用于以下場景:

    單一的資料庫操作環境

    事務環境中的資料庫操作接口

下面舉例說明:

  • 單一的資料庫操作

    try {

     db.preparedDelete("delete from test");

     db.executePrepared();//使用不帶連接配接的方法

} catch (Exception e) {

  • 事務環境下的多次資料庫操作

  TransactionManager tm = new TransactionManager();

   tm.begin();

   db.executePrepared();

   db.setString(1, "test1");

   db.setString(1, "name auto id");

   db.setString(1, "name with clob and blob");

   tm.commit();

    tm.rollback();

   } catch (RollbackException e1) {

    e1.printStackTrace();