1. 介紹
JDBCTemplate是Spring框架提供的對JDBC封裝對象,目的是簡化JDBC開發,是因為傳統JDBC代碼有着大量的重復。
2. 加載jar包
如果是Maven/Gradle項目則從Maven中央倉庫配置,如果是要手動導入,則從FTP下載。
(1) Apache Commons Logging:http://repo1.maven.org/maven2/commons-logging/commons-logging/
<!-- Maven -->
<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency> // Gradle // https://mvnrepository.com/artifact/commons-logging/commons-logging compile group: 'commons-logging', name: 'commons-logging', version: '1.2'
(2) Spring Beans:http://repo1.maven.org/maven2/org/springframework/spring-beans/
<!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.1.9.RELEASE</version>
</dependency> // https://mvnrepository.com/artifact/org.springframework/spring-beans compile group: 'org.springframework', name: 'spring-beans', version: '5.1.9.RELEASE'
(3) Spring Core:http://repo1.maven.org/maven2/org/springframework/spring-core/
(4) Spring JDBC:http://repo1.maven.org/maven2/org/springframework/spring-jdbc/
(5) Spring Transaction:http://repo1.maven.org/maven2/org/springframework/spring-tx/
springframework的這幾個包的區別就是<artifactId>標簽不同。
3. 使用JDBCTemplate
配合JDBCUtils,JDBCTemplate提供了多種功能的封裝,極大的簡化了語句,只要關心SQL語句即可。
(1) 創建JDBCTemplate對象
JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
可以將創建對象語句做成員變量,使用private修飾,這樣類中每一個業務就不需要重復創建對象,可以直接使用template了。
(2) 使用JdbcTemplate提供的方法
1) upadate(SQL語句, 參數列表):執行DML語句,執行添、刪、改語句。返回影響行數。
tring sql = "UPDATE user SET age = ? WHERE id = ?"; int count = template.update(sql, 60, 1);
2) queryForMap(SQL語句, 參數列表):執行DQL語句,執行查詢語句。返回被封裝到Map集合的數據集。
/* 注意,這個方法將列名和值作為鍵值對封裝為Map集合 只能查詢唯一一條結果集,如果是多條結果一定不能使用這個方法 */ String sql = "SELECT * FROM user WHERE id = ?"; Map<String,Object> map = template.queryForMap(sql, 1); System.out.println(map);
3) queryForList(SQL語句, 參數列表):執行DQL語句,執行查詢語句。返回被封裝到List集合的數據集。
/* 用這個方法可以打印多條封裝成Map集合的結果集 其實就是將每一條記錄封裝成一個Map集合,然后將Map集合裝到List集合中 */ String sql = "SELECT * FROM user WHERE id = ? OR id = ?"; List<Map<String,Object>> list = template.queryForList(sql, 1, 2); for(Map<String,Object> stirngObjectMap : list) { System.out.println(stirngObjectMap); }
4) query(SQL語句, 參數列表):執行DQL語句,執行查詢語句。返回的數據集封裝到JavaBean對象。
/* 使用提供的BeanPropertyRowMapper方法,完成數據到JavaBean的自動封裝 注意:domain類中的數據類型一定要是引用數據類型,否則可能會出錯 */ String sql = "SELECT * FROM user"; List<類型> list = template.query(sql, new BeanPropertyRowMapper<類型>(類型.class)); for(類型 user : list){ System.out.println(user); }
/* domain 類 */
public class User { private Integer id; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @Override public String toString() { return "User{" + "id=" + id + '}'; } }
5) queryForObject(SQL語句, 參數列表):執行DQL語句,執行查詢語句。返回的數據集封裝為對象。
/* queryForObject方法一般都是執行聚合函數的方法 */ String sql = "SELECT COUNT(id) from user"; Long total = template.queryForObject(sql, Long.class); System.out.println(total);