Spring JDBC 框架使用JdbcTemplate 類的一個實例

JDBC 框架概述

在使用普通的 JDBC 數據庫時,就會很麻煩的寫不必要的代碼來處理異常,打開和關閉數據庫連接等。但 Spring JDBC 框架負責所有的低層細節,從開始打開連接,準備和執行 SQL 語句,處理異常,處理事務,到最後關閉連接。

所以當從數據庫中獲取數據時,你所做的是定義連接參數,指定要執行的 SQL 語句,每次迭代完成所需的工作。

Spring JDBC 提供幾種方法和數據庫中相應的不同的類與接口。我將給出使用 JdbcTemplate 類框架的經典和最受歡迎的方法。這是管理所有數據庫通信和異常處理的中央框架類。

JdbcTemplate 類

JdbcTemplate 類執行 SQL 查詢、更新語句和存儲過程調用,執行迭代結果集和提取返回參數值。它也捕獲 JDBC 異常並轉換它們到 org.springframework.dao 包中定義的通用類、更多的信息、異常層次結構。

JdbcTemplate 類的實例是線程安全配置的。所以你可以配置 JdbcTemplate 的單個實例,然後將這個共享的引用安全地注入到多個 DAOs 中。

使用 JdbcTemplate 類時常見的做法是在你的 Spring 配置文件中配置數據源,然後共享數據源 bean 依賴注入到 DAO 類中,並在數據源的設值函數中創建了 JdbcTemplate。

環境:導入: mysql-connector-java.jarorg.springframework.jdbc.jar這兩個包 連接在這裏:https://www.cnblogs.com/ysource/p/12869779.html

 

1.創建數據訪問對象接口文件 StudentDAO.java 的內容:

 1 package com.spring.jdbcTemplate;
 2 
 3 import java.util.List;
 4 
 5 import javax.sql.DataSource;
 6 /**
 7  * 接口StudentDao,是用來封裝查詢方法
 8  * @author Administrator
 9  *
10  */
11 
12 public interface StudentDao {
13     
14     public void setDataSource(DataSource ds);
15     //添加記錄
16     public void addStudent(String name,Integer age);
17     //通過Student ID查詢學生記錄,返回值爲Student類型
18     public Student getStudentId(Integer id);
19     //刪除數據通過Student ID
20     public void delectStudent(Integer id);
21     //更新數據
22     public void updata(Integer id,Integer age);
23     //查詢所有數據
24     public List<Student> SelectAllStudent();
25 }

 

2.創建一個實體類Student:

 1 package com.spring.jdbcTemplate;
 2 
 3 public class Student {
 4     /**
 5      * 定義學生類
 6      */
 7     private String name;
 8     private Integer age;
 9     private Integer id;
10 
11     public Integer getId() {
12         return id;
13     }
14 
15     public void setId(Integer id) {
16         this.id = id;
17     }
18 
19     public String getName() {
20         return name;
21     }
22 
23     public void setName(String name) {
24         this.name = name;
25     }
26 
27     public Integer getAge() {
28         return age;
29     }
30 
31     public void setAge(Integer age) {
32         this.age = age;
33     }
34 
35     public void printAdvice() {
36         System.out.println("name:" + name + ",age:" + age);
37 
38     }
39 
40 }

 

3.創建一個StudentMapper.java 文件,用來映射結果集(通常用於查詢語句~)內容如下:

 1 package com.spring.jdbcTemplate;
 2 
 3 import java.sql.ResultSet;
 4 import java.sql.SQLException;
 5 
 6 import org.springframework.jdbc.core.RowMapper;
 7 
 8 public class StudentMapper implements RowMapper<Student>{
 9     /**
10      * 接口RowMapper被JdbcTemplate 用來映射每一行結果集的數據  
11      * JdbcTemplate 用來執行query方法或者調用存儲過程 包含方法mapRow(ResultSet rs, int rowNum)
12      * 第一個參數表示獲取到的結果集、第二個表示結果集中獲取到的結果個數,通常用於查詢語句~
13      */
14     @Override
15     public Student mapRow(ResultSet rs, int row) throws SQLException {
16         Student student=new Student();
17         student.setId(rs.getInt("id"));
18         student.setName(rs.getString("name"));
19         student.setAge(rs.getInt("age"));
20         return student;
21     }
22 
23 }

 

4.下面是爲定義的 DAO 接口 StudentDAO 的實現類文件 StudentJDBCTemplate.java,具體實現到數據庫的操作

1 package com.spring.jdbcTemplate;
 2 
 3 import java.util.List;
 4 
 5 import javax.sql.DataSource;
 6 
 7 import org.springframework.jdbc.core.JdbcTemplate;
 8 /**
 9  * 利用Spring 內置jdbc JdbcTemplate來實現StudentDao接口,連接數據庫。
10  * @author Administrator
11  *
12  */
13 public class StudentJdbcTemplate implements StudentDao {
14     private DataSource dataSource;
15     private JdbcTemplate jdbcTemplateObject;
16 
17     // 設置數據源
18     @Override
19     public void setDataSource(DataSource dataSource) {
20         this.dataSource = dataSource;
21         this.jdbcTemplateObject = new JdbcTemplate(dataSource);
22     }
23 
24     // 添加學生數據
25     @Override
26     public void addStudent(String name, Integer age) {
27         String sql = "insert into Student(name,age) value(?,?)";
28         jdbcTemplateObject.update(sql, name, age);
29         System.out.println("Created Record Name = " + name + " Age = " + age);
30         return;
31     }
32 
33     // 查詢學生
34     @Override
35     public Student getStudentId(Integer id) {
36         String sql = "select * from Student where id=?";
37         Student student = jdbcTemplateObject.queryForObject(sql, new Object[] { id }, new StudentMapper());
38         return student;
39     }
40 
41     // 刪除學生記錄
42     @Override
43     public void delectStudent(Integer id) {
44         String sql = "delete  from Student where id=?";
45         jdbcTemplateObject.update(sql, id);
46         System.out.println("Deleted Record with ID = " + id);
47         return;
48     }
49     //更新數據
50     @Override
51     public void updata(Integer id,Integer age) {
52         String SQL = "update Student set age = ? where id = ?";
53         jdbcTemplateObject.update(SQL, age, id);
54         System.out.println("Updated Record with ID = " + id);
55         return;
56     }
57     //查詢所有數據
58     @Override
59     public List<Student> SelectAllStudent() {
60         String SQL = "select * from Student";
61         List<Student> students = jdbcTemplateObject.query(SQL, new StudentMapper());
62         return students;
63     }
64 
65 
66 }

5.建立一個 MainApp.java 文件,用於測試。內容如下:

 1 package com.spring.jdbcTemplate;
 2 
 3 import java.util.List;
 4 
 5 import org.springframework.context.support.ClassPathXmlApplicationContext;
 6 import org.springframework.jdbc.core.JdbcTemplate;
 7 
 8 public class MainApp {
 9 
10     public static void main(String[] args) {
11         ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring_xml/bean.xml");
12             //獲取getBean("StudentJdbcTemplate")對象,調用其方法操作數據庫
13         StudentJdbcTemplate jdbcTemplate = (StudentJdbcTemplate)applicationContext.getBean("StudentJdbcTemplate");
14         
15             //插入數據
16         /*    jdbcTemplate.addStudent("張三", 23);
17             jdbcTemplate.addStudent("李四", 24);
18             jdbcTemplate.addStudent("王五", 25);
19             jdbcTemplate.addStudent("趙六", 26);
20             jdbcTemplate.addStudent("田七", 27);*/
21             
22             //查詢所有數據
23         /*    List<Student> list=jdbcTemplate.SelectAllStudent();
24             for(Student student:list){
25                 System.out.println(student.getId()+student.getName()+student.getAge());
26             }*/
27             //查詢單條記錄
28         /*    Student student=jdbcTemplate.getStudentId(1);
29             System.out.println(student.getId()+student.getName()+student.getAge());*/
30             
31             //刪除單條記錄
32             /*jdbcTemplate.delectStudent(2);*/
33             
34             //更新數據
35             jdbcTemplate.updata(3, 45);
36     }
37 
38 }

測試結果:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章