数据库操作框架介绍 JDBC使用介绍 DbUtils使用介绍 数据库连接池

2016-01-13 22:59:00
admin
原创 2163
摘要:数据库操作框架介绍 JDBC使用介绍 DbUtils使用介绍 数据库连接池

一、数据库操作框架介绍

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.javadbutildemo.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.javapom.xmlpooldemo.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,并将连接归还给连接池;

发表评论
评论通过审核之后才会显示。