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.csdn.net/qq_37556726/article/details/99002051(mybatis中使用批量)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章