JDBC连接池JDBCTemplate课堂笔记
生活随笔
收集整理的這篇文章主要介紹了
JDBC连接池JDBCTemplate课堂笔记
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
今日內容
1. 數據庫連接池2. Spring JDBC : JDBC Template數據庫連接池
1. 概念:其實就是一個容器(集合),存放數據庫連接的容器。當系統初始化好后,容器被創建,容器中會申請一些連接對象,當用戶來訪問數據庫時,從容器中獲取連接對象,用戶訪問完之后,會將連接對象歸還給容器。2. 好處:1. 節約資源2. 用戶訪問高效3. 實現:1. 標準接口:DataSource javax.sql包下的1. 方法:* 獲取連接:getConnection()* 歸還連接:Connection.close()。如果連接對象Connection是從連接池中獲取的,那么調用Connection.close()方法,則不會再關閉連接了。而是歸還連接2. 一般我們不去實現它,有數據庫廠商來實現1. C3P0:數據庫連接池技術2. Druid:數據庫連接池實現技術,由阿里巴巴提供的4. C3P0:數據庫連接池技術* 步驟:1. 導入jar包 (兩個) c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar ,* 不要忘記導入數據庫驅動jar包2. 定義配置文件:* 名稱: c3p0.properties 或者 c3p0-config.xml* 路徑:直接將文件放在src目錄下即可。3. 創建核心對象 數據庫連接池對象 ComboPooledDataSource4. 獲取連接: getConnection* 代碼://1.創建數據庫連接池對象DataSource ds = new ComboPooledDataSource();//2. 獲取連接對象Connection conn = ds.getConnection(); 5. Druid:數據庫連接池實現技術,由阿里巴巴提供的1. 步驟:1. 導入jar包 druid-1.0.9.jar2. 定義配置文件:* 是properties形式的* 可以叫任意名稱,可以放在任意目錄下3. 加載配置文件。Properties4. 獲取數據庫連接池對象:通過工廠來來獲取 DruidDataSourceFactory5. 獲取連接:getConnection* 代碼://3.加載配置文件Properties pro = new Properties();InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");pro.load(is);//4.獲取連接池對象DataSource ds = DruidDataSourceFactory.createDataSource(pro);//5.獲取連接Connection conn = ds.getConnection();2. 定義工具類1. 定義一個類 JDBCUtils2. 提供靜態代碼塊加載配置文件,初始化連接池對象3. 提供方法1. 獲取連接方法:通過數據庫連接池獲取連接2. 釋放資源3. 獲取連接池的方法* 代碼: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){/* if(stmt != null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();}}if(conn != null){try {conn.close();//歸還連接} catch (SQLException e) {e.printStackTrace();}}*/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;}}Spring JDBC
* Spring框架對JDBC的簡單封裝。提供了一個JDBCTemplate對象簡化JDBC的開發 * 步驟:1. 導入jar包2. 創建JdbcTemplate對象。依賴于數據源DataSource* JdbcTemplate template = new JdbcTemplate(ds);3. 調用JdbcTemplate的方法來完成CRUD的操作* update():執行DML語句。增、刪、改語句* queryForMap():查詢結果將結果集封裝為map集合,將列名作為key,將值作為value 將這條記錄封裝為一個map集合* 注意:這個方法查詢的結果集長度只能是1* queryForList():查詢結果將結果集封裝為list集合* 注意:將每一條記錄封裝為一個Map集合,再將Map集合裝載到List集合中* query():查詢結果,將結果封裝為JavaBean對象* query的參數:RowMapper* 一般我們使用BeanPropertyRowMapper實現類。可以完成數據到JavaBean的自動封裝* new BeanPropertyRowMapper<類型>(類型.class)* queryForObject:查詢結果,將結果封裝為對象* 一般用于聚合函數的查詢4. 練習:* 需求:1. 修改1號數據的 salary 為 100002. 添加一條記錄3. 刪除剛才添加的記錄4. 查詢id為1的記錄,將其封裝為Map集合5. 查詢所有記錄,將其封裝為List6. 查詢所有記錄,將其封裝為Emp對象的List集合7. 查詢總記錄數* 代碼:import cn.itcast.domain.Emp;import cn.itcast.utils.JDBCUtils;import org.junit.Test;import org.springframework.jdbc.core.BeanPropertyRowMapper;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.jdbc.core.RowMapper;import java.sql.Date;import java.sql.ResultSet;import java.sql.SQLException;import java.util.List;import java.util.Map;public class JdbcTemplateDemo2 {//Junit單元測試,可以讓方法獨立執行//1. 獲取JDBCTemplate對象private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());/*** 1. 修改1號數據的 salary 為 10000*/@Testpublic void test1(){//2. 定義sqlString sql = "update emp set salary = 10000 where id = 1001";//3. 執行sqlint count = template.update(sql);System.out.println(count);}/*** 2. 添加一條記錄*/@Testpublic void test2(){String sql = "insert into emp(id,ename,dept_id) values(?,?,?)";int count = template.update(sql, 1015, "張晨光", 10);System.out.println(count);}/*** 3.刪除剛才添加的記錄*/@Testpublic void test3(){String sql = "delete from emp where id = ?";int count = template.update(sql, 1015);System.out.println(count);}/*** 4.查詢id為1001的記錄,將其封裝為Map集合* 注意:這個方法查詢的結果集長度只能是1*/@Testpublic void test4(){String sql = "select * from emp where id = ? or id = ?";Map<String, Object> map = template.queryForMap(sql, 1001,1002);System.out.println(map);//{id=1001, ename=孫悟空, job_id=4, mgr=1004, joindate=2000-12-17, salary=10000.00, bonus=null, dept_id=20}}/*** 5. 查詢所有記錄,將其封裝為List*/@Testpublic void test5(){String sql = "select * from emp";List<Map<String, Object>> list = template.queryForList(sql);for (Map<String, Object> stringObjectMap : list) {System.out.println(stringObjectMap);}}/*** 6. 查詢所有記錄,將其封裝為Emp對象的List集合*/@Testpublic void test6(){String sql = "select * from emp";List<Emp> list = template.query(sql, new RowMapper<Emp>() {@Overridepublic Emp mapRow(ResultSet rs, int i) throws SQLException {Emp emp = new Emp();int id = rs.getInt("id");String ename = rs.getString("ename");int job_id = rs.getInt("job_id");int mgr = rs.getInt("mgr");Date joindate = rs.getDate("joindate");double salary = rs.getDouble("salary");double bonus = rs.getDouble("bonus");int dept_id = rs.getInt("dept_id");emp.setId(id);emp.setEname(ename);emp.setJob_id(job_id);emp.setMgr(mgr);emp.setJoindate(joindate);emp.setSalary(salary);emp.setBonus(bonus);emp.setDept_id(dept_id);return emp;}});for (Emp emp : list) {System.out.println(emp);}}/*** 6. 查詢所有記錄,將其封裝為Emp對象的List集合*/@Testpublic void test6_2(){String sql = "select * from emp";List<Emp> list = template.query(sql, new BeanPropertyRowMapper<Emp>(Emp.class));for (Emp emp : list) {System.out.println(emp);}}/*** 7. 查詢總記錄數*/@Testpublic void test7(){String sql = "select count(id) from emp";Long total = template.queryForObject(sql, Long.class);System.out.println(total);}}總結
以上是生活随笔為你收集整理的JDBC连接池JDBCTemplate课堂笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用 Flutter 开发真的NX
- 下一篇: HTMLCSS课堂笔记