数据库操作框架介绍 JDBC使用介绍 DbUtils使用介绍 数据库连接池
- 2016-01-13 22:59:00
- admin
- 原创 2163
一、数据库操作框架介绍
1、JPA,Java Persistence API,全自动ORM规范,Hibernate是一种实现;
2、Hibernate是全自动ORM框架,自动生成SQL语句,功能非常强大;
3、MyBatis是半自动ORM框架,手动编写SQL语句,使用非常灵活;
4、MyBatis由谷歌团队研发,前身是iBatis,从3.0版本开始更名;
5、DbUtils是轻量的数据库操作库,支持对象映射,使用非常简单;
二、JDBC使用介绍
1、JDBC帮助手册:https://dev.mysql.com/doc/connector-j/en/
2、API参考手册:https://docs.oracle.com/javase/8/docs/api/java/sql/package-summary.html
3、Statement执行普通语句,PreparedStatement执行预编译语句,后者效率更高,且防止SQL注入;
4、mysqld重启时,Connection需要重新创建;
5、代码示例:JDBCUtils.java
Statement示例:
String sql = "select * from user where name='feinen'";
Statement stmt = con.createStatement();
return stmt.executeQuery(sql);
PreparedStatement示例:
String sql = "select * from user where name=?";
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1, "feinen");
return ps.executeQuery();
三、DbUtils使用介绍
1、官方文档:https://commons.apache.org/proper/commons-dbutils
2、支持同步查询QueryRunner,支持异步查询AsyncQueryRunner;
3、查询结果通过Handler转换为各种对象,需要通过Connection手动处理事务;
4、Handler通过RowProcessor转换为各种对象,默认实现BasicRowProcessor,可以自定义实现;
5、BasicRowProcessor使用BeanProcessor转换对象,BeanProcessor比较列名和属性时忽略大小写;
6、columnToPropertyOverrides指定映射属性,@Column(name="colname")注解get方法指定映射列;
7、StringTrimmedResultSet去除返回字符串的空白字符;
8、SqlNullCheckedResultSet结果集为空时设置默认返回值;
9、代码示例:DBUtilsApp.java,dbutildemo.zip
四、HikariCP使用介绍
1、官方文档:https://github.com/brettwooldridge/HikariCP
2、MySQL性能建议:https://github.com/brettwooldridge/HikariCP/wiki/MySQL-Configuration
3、HikariConfig只需要设置jdbcUrl、username、password,其他按需设置即可;
4、HikariCP不支持缓存和打印Statement,因为数据库驱动本身就支持;
5、DriverDataSource是一个不缓存的数据源;
6、PropertyElf根据Properties设置对象成员;
7、FastList实现List接口,不检查越界,效率非常高;
8、代码示例:ConPoolApp.java,pom.xml,pooldemo.zip
HikariConfig常用配置:
1、poolName设置连接池名称,不设置时会自动生成默认值;
2、autoCommit设置自动提交事务,默认true自动提交事务;
3、maximumPoolSize最大连接数量,最小1个,默认10个;
4、minimumIdle最小空闲连接数量,最小0个,默认等于maximumPoolSize;
5、connectionTimeout从连接池获取连接超时时间,最小250ms,默认30秒;
6、maxLifetime连接最长存活时间,最小30秒,默认30分钟,0表示不限制时间;
7、idleTimeout连接最长空闲时间,最小10秒,默认10分钟,0表示不限制时间;
8、keepaliveTime连接检活心跳时间,最小30秒,默认0不检活,推荐2分钟;
9、connectionTestQuery连接检活语句,默认且推荐不设置,使用con.isValid;
HikariConfig不常用配置:
1、initializationFailTimeout连接池初始化最长验证时间,默认1ms;
2、<0不验证,=0验证获取连接,>0验证获取连接和设置连接;
3、connectionInitSql连接初始化语句,创建连接时执行一次;
4、validationTimeout验证连接时响应超时时间,最小250ms,默认5秒;
5、validationTimeout验证连接时进行设置,验证连接完成时恢复原值;
6、leakDetectionThreshold连接泄露检测阈值,最小2秒,默认0不检测;
HikariDataSource常用函数:
1、Connection getConnection(),获取数据库连接;
2、void evictConnection(connection),删除数据库连接;
3、boolean isRunning(),获取连接池运行状态;
4、boolean isClosed(),获取连接池关闭状态;
5、void close(),关闭连接池;
HikariDataSource使用详解:
1、houseKeepingExecutorService用于执行定时任务,使用一个线程执行定时任务;
2、addConnectionExecutor用于创建数据库连接,使用一个线程执行任务;
3、closeConnectionExecutor用于关闭数据库连接,使用一个线程执行任务;
4、HouseKeeper定时任务每隔30秒执行一次,更新连接池设置,删除长时间空闲连接,生成空闲数据库连接;
5、minimumIdle<maximumPoolSize,删除长时间空闲连接生效,只删除大于minimumIdle的空闲连接;
6、每个连接会生成一个定时任务MaxLifetimeTask,用于保证连接不超过最长存活时间;
7、每个连接会生成一个定时任务KeepaliveTask,周期性定时任务,用于连接检活;
8、每个连接可能生成一个定时任务ProxyLeakTask,用于检测连接泄露,仅输出告警;
9、连接池最终返回ProxyConnection,close方法关闭相关Statement,恢复连接状态;
10、close方法更新lastAccessed,并将连接归还给连接池;