JDBC小总结
一:小例子
这段代码是模板代码:需要自己管理连接,自己进行参数封装,自己处理接结果,自己处理异常。针对这些缺点,一些ORM框架就派上用场了:mybatis
二:自动加载驱动
在DriverManager中有一个静态方法:
首先检查是否通过配置的方式注册了驱动,基本上不用。
核心是下面的SPI方式加载:
这个iterator实际上代理到了:ServiceLoader的lookupIterator上
lookupIterator的hasNextService方法
lookupIterator的nextservice方法
三:优化效率
1:优化JDBC读取效率
setFetchSize设置:Statement和ResultSet都可以设置。
或者对结果集进行设置:
mysql驱动默认的行为是需要把整个结果全部读取到内存中才开始允许应用读取结果。如果查询数据太多可能导致内存OOM或者阻塞很长时间。所以期望使用流式方式读取,只要有数据就可以读。
如何mysql的流式解析?
需要满足三个条件:forward-only,read-only,fatch size=Integer.MIN_VALUE。
forward-only read-only也是mysql驱动的默认值·所以只需要指定fetchsize,ps.setFetchSize(Integer.MIN_VALUE)。
也可以在url上指定fetchsize:defaultFetchSize参数设置
2:批量写提高写操作效率
单条写入问题:大量io,大量事务日志操作消耗性能。批量提交提高效率。
url添加参数:rewriteBatchedStatements=true
然后使用 ps.addBatch();批量提交。
3:使用连接池管理连接
四:参考
http://www.mamicode.com/info-detail-197484.html
https://blog.****.net/qq_37556726/article/details/99002051(mybatis中使用批量)