开发者社区> bboss> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

bboss 持久层框架使用最佳实践-带连接(connection)参数接口和不带连接参数接口的选择

简介: bboss 持久层框架使用最佳实践-带连接(connection)参数接口和不带连接参数接口的选择 bboss项目下载列表 在sourceforge访问地址为:https://sourceforge.net/project/showfiles.php?group_id=238653   bboss 持久层框架提供了两类访问数据库的接口:带connection参数的接口和不带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.executePrepared(con);//使用连接
   
   db.preparedInsert("insert into test(name) values(?)");

   db.setString(1, "name");
   db.executePrepared(con);//使用连接
   
   db.preparedInsert("insert into test(name,clobname,blobname) values(?,?,?)");

   db.setString(1, "name");
   db.setClob(2, "content");
   db.setBlob(3, "content".getBytes());
   db.executePrepared(con);//使用连接
   
   db.preparedSelect("select * from test where name=?");
   //db.setString(1, "1");
   db.setString(1, "name");
   db.executePrepared(con);//使用连接
   
   
   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参数的方法适用于以下场景:

    单一的数据库操作环境

    事务环境中的数据库操作接口

 

下面举例说明:

 

  • 单一的数据库操作

 

PreparedDBUtil db = new PreparedDBUtil();
    try {
     db.preparedDelete("delete from test");
     db.executePrepared();//使用不带连接的方法


} catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

  • 事务环境下的多次数据库操作

PreparedDBUtil db = new PreparedDBUtil();
  TransactionManager tm = new TransactionManager();
  try {
   tm.begin();
   db.preparedDelete("delete from test");
   db.executePrepared();
   
   db.preparedInsert("insert into test(id,name) values(?,?)");
   db.setString(1, "test1");
   db.setString(2, "name");
   db.executePrepared();
   
   db.preparedInsert("insert into test(name) values(?)");

   db.setString(1, "name auto id");
   db.executePrepared();
   
   db.preparedInsert("insert into test(name,clobname,blobname) values(?,?,?)");

   db.setString(1, "name with clob and blob");
   db.setClob(2, "content");
   db.setBlob(3, "content".getBytes());
   db.executePrepared();
   
   db.preparedSelect("select * from test where name=?");
   //db.setString(1, "1");
   db.setString(1, "name");
   db.executePrepared();
   
   
   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"));
    
   }
   tm.commit();
  } catch (Exception e) {
   try {
    tm.rollback();
   } catch (RollbackException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
   }
  }

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
启动SpringBoot项目,报错:无法配置数据源:未指定“url”属性,并且无法配置嵌入式数据源。求解求解
启动SpringBoot项目,报错:无法配置数据源:未指定“url”属性,并且无法配置嵌入式数据源。求解求解
0 0
JDBC(四) 连接参数的配置(附DBUtil工具类)
进行JDBC操作时,连接参数的配置(附DBUtil工具类)
0 0
Spring练习,使用Properties类型注入方式,注入MySQL数据库连接的基本信息,然后使用JDBC方式连接数据库,模拟执行业务代码后释放资源,最后在控制台输出打印结果。
Spring练习,使用Properties类型注入方式,注入MySQL数据库连接的基本信息,然后使用JDBC方式连接数据库,模拟执行业务代码后释放资源,最后在控制台输出打印结果。
0 0
无参数名post数据客户端以及接口是如何实现的?
无参数名post数据客户端以及接口是如何实现的?
0 0
《Spring Data 官方文档》5.8. 使用自定义转换器重载默认映射至5.10. 异常解释
5.8. 使用自定义转换器重载默认映射 为了对映射过程有更细粒度的控制,你可以使用’CassandraConverter’实现来注册Spring转换器,例如’MappingCassandraConverter’。
1196 0
bboss持久层公共sql片段定义和引用方法说明
bboss持久层公共sql片段定义和引用方法说明 在配置sql语句时,经常会碰到多条sql语句里面使用同样的sql条件或者sql片段的情况,为了便于维护和提高配置的简洁性,一般会将这些公共部分剥离出来,配置成独立的sql片段,然后在所有需要的地方引入即可。
643 0
bboss session会话属性数据查询功能配置使用方法
bboss session会话属性数据查询功能配置使用方法. session管理在线试用地址: http://session.bbossgroups.com http://sessionmonitor.
760 0
bboss持久层设置数据库查询fetchsize参数方法
bboss持久层设置数据库查询fetchsize参数方法 jdbc驱动程序api提供了指定了查询语句fetchsize的方法,有些数据库(比如oracle)本身提供了fetchsize的默认值,这样进行大量数据查询时,不会因为返回的结果集太大导致jvm爆掉,有些数据库可能没有默认设置fetchsize,因此需要手动指定。
658 0
bbossgroups 持久层模板sql变量参数设置的三种方式
本文介绍bbossgroups 持久层模板sql变量参数设置的三种方式,切入正题。 概述 Map:所有的变量参数名和值以key/value的方式放入,如果值为null则以null方式替换变量 Bean:所有的变量参数和值以都与bean中对应的属性字段名和值相对应,如果值为null则以相应属...
519 0
+关注
bboss
热衷开源,主要开源作品:开源框架bboss,bboss session,bboss 序列化等 bboss特色:http://yin-bp.iteye.com/blog/1080824
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载