生活随笔
收集整理的這篇文章主要介紹了
【JavaWeb】JDBC优化 之 数据库连接池、Spring JDBC
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 數據庫連接池
為什么要使用數據庫連接池?
數據庫連接是一件費時的操作,連接池可以使多個操作共享一個連接使用連接池可以提高對數據庫連接資源的管理節約資源且高效
概念:數據庫連接池其實就是一個容器,存放數據庫連接的容器。當系統初始化好后,容器被創建,容器中會申請一些連接對象,當用戶訪問數據庫時,從容器中獲取連接對象,用戶訪問完后,將連接對象歸還給數據庫。
實現:
標準接口:DataSource:javax.sql包下。使用getConnection()獲取連接,如果連接對象是從連接池中獲取的。調用Connection.close方法則不會關閉連接,而是歸還連接。一般不去實現它,由數據庫廠商來實現。實現技術由:C3P0和Druid【阿里巴巴提供 最好的數據庫連接池實現技術】
2 C3P0的使用
步驟
導入兩個c3p0的jar包
mchange-commons-java-0.2.12
c3p0-0.9.5.2
還需要數據庫驅動jar包定義配置文件
名稱:c3p0.properties或者c3p0-config.xml
路徑:直接將文件放在src目錄下即可創建核心對象,數據庫連接池對象 ComboPooledDataSource獲取連接:getConnection
public static void main(String
[] args
) throws SQLException
{DataSource ds
= new ComboPooledDataSource();ds
.getConnection();System
.out
.println(ds
);}
3 Druid的使用
步驟:
導入druid-1.0.9.jar包定義配置文件:druid.properties,可以叫任意名稱,可以放在任意目錄獲取數據庫連接池對象,通過工廠類DruidDataSourceFactory獲取獲取連接:getConnection
public class JDBCUtils {private static DataSource ds
;static{try {Properties pro
= new Properties();pro
.load(JDBCUtils
.class.getClassLoader().getResourceAsStream("druid.properties"));ds
= DruidDataSourceFactory
.createDataSource(pro
);} catch (IOException e
) {e
.printStackTrace();} catch (Exception e
) {e
.printStackTrace();}}public static Connection
getConnection() throws SQLException
{return ds
.getConnection();}public static void close(Statement stmt
,Connection conn
){close(null
,stmt
,conn
);}public static void close(ResultSet rs
, Statement stmt
, Connection conn
){if(rs
!= null
){try {rs
.close();} catch (SQLException e
) {e
.printStackTrace();}}if(stmt
!= null
){try {stmt
.close();} catch (SQLException e
) {e
.printStackTrace();}}if(conn
!= null
){try {conn
.close();} catch (SQLException e
) {e
.printStackTrace();}}}public static DataSource
getDataSource(){return ds
;}
}
4 Spring JDBC
Spring框架對JDBC的簡單封裝
提供了一個JDBCTemplate對象來簡化JDBC的開發
步驟:
導入jar包
創建JdbcTemplate對象,依賴于數據源DataSource使用JdbcTemplate對象的方法來完成CRUD的操作
- update():執行DML語句增刪改
- qureyForMap:查詢結果并將結果集封裝為map集合
注意:這個方法查詢的結果集長度只能是1 - qureyForList:查詢結果并將結果集封裝為list集合
注意:將每一條記錄封裝為Map集合,再將Map集合裝載到List集合中 - qurey():查詢結果,將結果封裝為JavaBean對象
注意:qurey的參數:RowMapper。一般使用BeanPropertyRowMapper實現類,可以完成數據到JavaBean的自動封裝。
-new BeanPropertyRowMapper<類型>(類型.class) - qureyForObject:查詢結果,將結果封裝為對象
注意:一般用于聚合函數的查詢
4.1 JDBC Template入門使用
已經導入的數據庫連接jar包JDBCUtils是用druid實現的工具類,druid包也需要導入導入JDBC Template的五個jar包
import org
.springframework
.jdbc
.core
.JdbcTemplate
;public class JDBCTemplateDemo {
public static void main
(String
[] args
) {JdbcTemplate template
= new JdbcTemplate
(JDBCUtils
.getDataSource
());String
sql = "update account set balance=5000 where id=?";int count
= template
.update(sql, 1);System
.out.println
(count
);}
}
4.2 JDBCTemplate執行DML語句
修改1號數據的balance為10000添加一條記錄刪除第2步添加的記錄查詢id為1的記錄,將結果封裝為map集合查詢所有記錄,將結果封裝為list集合查詢所有記錄,將結果封裝為Account對象的list集合查詢總記錄數
public class JDBCTemplateDemo2 {private JdbcTemplate template
= new JdbcTemplate(JDBCUtils
.getDataSource());@Testpublic void test1(){String sql
= "update account set balance=? where id=?";int count
= template
.update(sql
,999,1);Assert
.assertEquals(1,count
);}@Testpublic void test2(){String sql
= "insert into account values(null,?,?)";int count
= template
.update(sql
, "趙四", 888);Assert
.assertEquals(1,count
);}@Testpublic void test3(){String sql
= "delete from account where id = ?";int count
= template
.update(sql
, 4);Assert
.assertEquals(1,count
);}@Testpublic void test4(){String sql
= "select * from account where id = ?";Map
<String, Object> map
= template
.queryForMap(sql
,1);System
.out
.println(map
);}@Testpublic void test5(){String sql
= "select * from account";List
<Map
<String, Object>> maps
= template
.queryForList(sql
);System
.out
.println(maps
);}@Testpublic void test6(){String sql
= "select * from account";List
<Account> query
= template
.query(sql
, new BeanPropertyRowMapper<Account>(Account
.class));for(Account acc
: query
){System
.out
.println(acc
);}}@Testpublic void test7(){String sql
= "select count(id) from account";Long total
= template
.queryForObject(sql
, Long
.class);System
.out
.println(total
);}
}
總結
以上是生活随笔為你收集整理的【JavaWeb】JDBC优化 之 数据库连接池、Spring JDBC的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。