日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

【JavaWeb】JDBC优化 之 数据库连接池、Spring JDBC

發布時間:2024/7/5 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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 {//1.定義成員變量 DataSourceprivate static DataSource ds ;static{try {//1.加載配置文件Properties pro = new Properties();pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));//2.獲取DataSourceds = 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);}//查詢id為1的記錄 封裝為map//注意queryForMap查詢的結果集長度只能是1@Testpublic void test4(){String sql = "select * from account where id = ?";Map<String, Object> map = template.queryForMap(sql,1);System.out.println(map);}@Test//查詢所有的記錄 封裝到list中 list中是map對應的一條條結果public void test5(){String sql = "select * from account";List<Map<String, Object>> maps = template.queryForList(sql);System.out.println(maps);}@Test//將結果封裝為類再存入list中public 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的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。