JDBCTemplate---方法介紹和簡單示例
當sql等查詢方式不能滿足效能或靈活性的要求,必須使用SQL時,大家有三種選擇:
第一、使用Hibernate 的sql 查詢函式,將查詢結果物件轉為Entity物件。
第二、使用Hibernate Session的getConnection 獲得JDBC Connection,然後進行純JDBC API操作;
第三、選擇把Spring的JDBCTemplate作為一種很不錯的JDBC Utils來使用。
[java] view plaincopyprint?-
/*使用jdbcTemplate查詢資料的時候可以使用queryForXXX等方法。下面我們就一一解析一下:*/
- 1、jdbcTemplate.queryForInt()和jdbcTemplate.queryForLong()
- //使用queryForInt返回user表中的記錄數量,queryForInt搭配這樣的sql可以在分頁的時候計算總記錄數
- jdbcTemplate.queryForInt("select count(*) from user");
- 2、jdbcTemplate.queryForObject()
- //本質上和queryForInt相同,只是可以返回不同的物件,例如返回一個String物件
-
String name = (String) jdbcTemplate.queryForObject( --3
- "SELECT name FROM USER WHERE id = ?",
- new Object[] {id},
- java.lang.String.class);
- 3、jdbcTemplate.queryForList(???)
- //返回一個裝有map的list,每一個map是一條記錄,map裡面的key是欄位名
- List rows = jdbcTemplate.queryForList("SELECT * FROM user"); //得到裝有map的list
-
for
- Map userMap=rows.get(i);
- System.out.println(userMap.get("id"));
- System.out.println(userMap.get("name"));
- System.out.println(userMap.get("age"));
- }
- 4、jdbcTemplate.queryForMap(SQL)
- //這個查詢只能是查詢一條記錄的查詢,返回一個map,key的值是column的值
- Map map = jdbcTemplate.queryForMap("select count(*) as keyval from user");
- map.get("keyval")
- 5、jdbcTemplate.queryForRowSet(???)
- //返回一個RowSet 然後呼叫.getString或者getInt等去取值
- 6、jdbc1.query(sql, new RowCallbackHandler()
- //返回一個ResultSet物件, processRow有自動迴圈的機制,它會自動執行processRow中的語句直到
- //rs的size執行完了為止。我們可以在這其中用list完成物件的轉移,只不過list要用final來修飾
- jdbc1.query(sql, new RowCallbackHandler() { //editing
- publicvoid processRow(ResultSet rs) throws SQLException {
- VideoSearch vs = new VideoSearch();
- vs.setRECORDINGFILENAME(rs.getString("RECORDINGFILENAME"));
- vs.setCALLID(rs.getString("CALLID"));
- list.add(vs);
- }
- }
- 7.更新操作
- //執行sql語句,無返回執,可用於插入等操作
- jdbcTemplate.execute(sql);
- //更新操作,返回受影響的行數
- jdbcTemplate.update(strSql.toString());
- //執行批量更新,引數為string陣列
- jdbcTemplate.batchUpdate(sql);
- //更新,args為物件陣列
- jdbcTemplate.update(strSql, args);
- /*
- 說明:
- JDBCTemplate的使用方法:
- 在ApplicationContext.xml中定義一個jdbcTemplate的節點,使用POJO注入,獲得注入後可以執行操作
- 不需要繼承什麼基類
- */
- <bean id="jdbcTemplate"
- class="org.springframework.jdbc.core.JdbcTemplate">
- <property name="dataSource" ref="dataSource"/>
- </bean>
- SqlRowSet rs = jdbcTemplate.queryForRowSet(sql, params);
- /*
- jdbcTemplate有很多的ORM化回撥操作將返回結果轉為物件列表,
- 但很多時候還是需要返回ResultSet,Spring有提供一個類似ResultSet的,實現JDBC3.0 RowSet介面的Spring SqlRowSet
- 注意
- jdbcTemplate儘量只執行查詢操作,莫要進行更新,否則會破壞Hibernate的二級快取體系
- */
以下轉載。
1. Spring的基本概念
Spring框架核心的思想就是建立一個Java物件的大工廠,使用者只要給工廠一個指令,工廠就能將使用者需要的物件根據配置檔案組裝好返還給使用者。使用者需要做的許多工作則可以寫成簡單的配置檔案。
2. 醜陋的JDBC程式碼
01 |
Connection
con = null ; |
02 |
PreparedStatement
pStmt = null ; |
03 |
ResultSet
rs = null ; |
04 |
try { |