Java连接数据库技术的性能分析
一、 概述:
本文主要以Java连接数据库的框架和连接池的技术为主线逐步展开说明,用比对特点和案例相结合的方式分析各种技术的优劣。同时以项目开发为出发点对于各种技术的配置和代码实现进行说明,让读者感受到项目开发的魅力。
将相关格式的文件内容文本化的过程。另外针对于Excel文件内容的结构化和对象化进行实际案例分析,给出更适应Spring框架配置的解决方案。
二、 Hibernate和MyBatis的特点比对:
三、 数据连接池技术:
1、 常见的连接池技术:
a) DBCP;
b) Druid;
c) C3P0;
d) Tomcat-JDBC;
2、 功能对比:
3、 测试结论:
a) 性能方面:
druid>tomcat-jdbc>dbcp>c3p0;
b) 功能方面:
druid功能最为全面,sql拦截等功能,统计数据较为全面,具有良好的扩展性;
c) 综合性能和扩展性等方面:
可考虑使用druid;
d) 缓存方面:
可开启prepareStatement缓存,对性能会有大概20%的提升;
e) 实际情况方面:
实际项目druid更常用,但也有使用dbcp的情况;
四、 商业中间件连接池:
1、 WebLogic的连接池:
此连接池的持续运行稳定性很强,在大并发量的压力下性能也相当优秀,另外在一些异常情况下连接池里的连接也能够及时释放。连接池监控一目了然,及时到位;
2、 WebSphere的连接池:
此连接池的持续运行稳定性相当强,在大并发量的压力下性能也足够优秀,另外在一些异常情况下连接池里的连接能够及时释放,连接池监控配置有些复杂,但是配置好后各项指标一目了然并且有图形显示。简单地说就是功能强大,使用复杂;
五、 项目中的具体细节处理:
1、 获得数据库连接属性:
a) 通过文件进行配置:
i. 必须与Java代码分离,保证工程人员可自行修改;
ii. 应尽量避免修改相关配置文件后需经重启服务器才能生效的情况;
b) 通过中间件服务器进行配置:
应尽量降低工程人员配置难度,并提供说明文档或使用手册;
2、 获得数据库连接实例:
a) 应尽量使用框架配置的方式;
b) 如需自行开发,应尽量使用工厂模式或单例模式,以保障实例不会被重复创建;
3、 封装和执行SQL语句:
i. 应提供多种方式的执行方法,比如批处理、存储过程与函数等等;
ii. 应提供增删改的批量处理方式(建议使用Batch模式,此模式主要使用代码控制批次内的执行语句数量);
iii. 应尽量封装自定义的动态SQL标签,简化SQL开发,提高代码运行效率;
4、 提供分页查询方式:
a) 数组分页;
b) SQL分页:尽量避免使用此种分页查询方式;
c) 拦截器分页;
d) RowBounds分页;
5、 处理异常:
针对程序运行时异常和业务逻辑异常等情况应分别进行处理,同时释放相关资源;
六、 各种技术的处理方式:
1、 JDBC:
a) 说明:
利用properties.properties配置文件形式配置数据库连接属性,使用java.util.Properties读入相关信息;
b) 示例代码:
2、 C3P0:
a) 说明:
利用com.mchange.v2.c3p0.ComboPooledDataSource获得数据库连接;
b) 示例代码:
3、 DBCP:
a) 说明:
利用org.apache.commons.dbcp.BasicDataSourceFactory获得数据库连接;
b) 示例代码:
4、 MyBatis:
a) 说明:
利用org.apache.ibatis.session.SqlSessionFactoryBuilder获得数据库连接;利用org.springframework.orm.ibatis.support.SqlMapClientDaoSupport执行SQL语句;
b) 示例代码:
5、 Hibernate:
a) 说明:
利用org.hibernate.SessionFactory获得数据库连接;
b) 示例代码:
七、 案例分析:
1、 设计说明:
考虑到支持多种连接池的技术使用场景,因此将公共逻辑提取到父类。
2、 类图:
3、 公共类:
4、 Spring配置:
a) 公共配置:
b) C3P0配置:
c) DBCP配置:
d) druid配置:
e) iBatis配置:
f) Hibernate配置:
5、 连接属性配置:
a) JDBC连接属性配置:
b) DBCP连接属性配置: