一:小例子
這段代碼是模板代碼:需要自己管理連接,自己進行參數封裝,自己處理接結果,自己處理異常。針對這些缺點,一些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.csdn.net/qq_37556726/article/details/99002051(mybatis中使用批量)