1. 程式人生 > >Spring知識點總結(五)Spring整合JDBC

Spring知識點總結(五)Spring整合JDBC

 1. 回顧JDBC
        a. java操作關係型資料的API。匯入相關資料庫的驅動包後可以通過JDBC提供的介面來操作資料庫。
        b. 實現JDBC的六個步驟
            註冊資料庫驅動
            獲取資料庫連線
            獲取傳輸器物件
            傳輸sql執行獲取結果集物件
            遍歷結果集獲取資訊
            關閉資源
        c. 資料庫連線池(資料來源)
    C3P0連線池

2.Spring整合JDBC

      a. 匯入相關開發包
            

 


        b. 將資料來源交於Spring管理


            

         

 


       

c.通過spring獲取資料來源,獲取連線,操作資料庫

 

3.Spring中的JDBC模板類

        使用模板類,能夠極大的簡化原有JDBC的程式設計過程,讓資料庫操作變得簡單.
        a. 在Spring中配置JDBC模板類
            

 


        b. 使用JDBC模板類實現增刪改查


          

 1  @Test
 2             public void test02() throws SQLException{
 3                 DataSource source = (DataSource) context.getBean("dataSource");
 4                 Connection conn = source.getConnection();
 5                 PreparedStatement ps = conn.prepareStatement("select * from users");
 6                 ResultSet rs = ps.executeQuery();
 7                 while(rs.next()){
 8                     int id = rs.getInt("id");
 9                     String name = rs.getString("name");
10                     int age = rs.getInt("age");
11                     User user = new User(id,name,age);
12                     System.out.println(user);
13                 }
14             }
15         
16             @Test
17             public void test03() throws SQLException{
18                 JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
19                 List<Map<String,Object>> list = jdbcTemplate.queryForList("select * from users");
20                 System.out.println(list);
21             }
22             @Test
23             public void test04() throws SQLException{
24                 JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
25                 SqlRowSet srs = jdbcTemplate.queryForRowSet("select * from users where id = ?",2);
26                 srs.next();
27                 System.out.println(srs.getString("name"));
28             }
29             @Test
30             public void test05() throws SQLException{
31                 JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
32                 int n = jdbcTemplate.update("insert into users values (null,?,?)", "ddd",23);
33                 System.out.println("修改成功,影響到的行數為:"+n);
34             }
35             @Test
36             public void test06() throws SQLException{
37                 JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
38                 int n = jdbcTemplate.update("update users set age = ? where id = ?", 33,4);
39                 System.out.println("修改成功,影響到的行數為:"+n);
40             }
41             @Test
42             public void test07() throws SQLException{
43                 JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
44                 int n = jdbcTemplate.update("delete from users where id = ?", 4);
45                 System.out.println("修改成功,影響到的行數為:"+n);
46             }

 

 


        c. 使用RowMapper封裝bean
            RowMapper介面定義了物件到列的對映關係,可以幫助我們在查詢時自動封裝bean。

 1                 public class UserRowMapper implements RowMapper<User> {
 2                 
 3                     @Override
 4                     public User mapRow(ResultSet rs, int i) throws SQLException {
 5                         User user = new User();
 6                         user.setId(rs.getInt("id"));
 7                         user.setName(rs.getString("name"));
 8                         user.setAge(rs.getInt("age"));
 9                         return user;
10                     }
11                 
12                 }
13                 
14                 /**
15                  * 使用RowMap封裝bean
16                  */
17                 @Test
18                 public void test08(){
19                     JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
20                     List<User> list = jdbcTemplate.query("select * from users",new UserRowMapper());
21                     System.out.println(list);
22                 }
23                 /**
24                  * 使用RowMap封裝bean
25                  */
26                 @Test
27                 public void test09(){
28                     JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
29                     User user = jdbcTemplate.queryForObject("select * from users where id = ?",new UserRowMapper(),2);
30                     System.out.println(user);
31                 }

 

 


        d. 使用BeanPropertyRowMapper自動進行對映
            BeanPropertyRowMapper內部可以使用指定類進行反射(內省)來獲知類內部的屬性資訊,自動對映到表的列。使用它一定要注意,類的屬性名要和對應表的列名必須對應的上,否則屬性無法自動對映。BeanPropertyRowMapper底層通過反射(內省)來實現,相對於之前自己寫的RowMapper效率比較低

 1             /**
 2              * 通過BeanPropertyRowMapper實現自動封裝bean
 3              */
 4             @Test
 5             public void test10(){
 6                 JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
 7                 List<User> list = jdbcTemplate.query("select * from users", new BeanPropertyRowMapper(User.class));
 8                 System.out.println(list);
 9             }
10             /**
11              * 通過BeanPropertyRowMapper實現自動封裝bean
12              */
13             @Test
14             public void test11(){
15                 JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
16                 User user = jdbcTemplate.queryForObject("select * from users where id = ?", new BeanPropertyRowMapper(User.class),2);
17                 System.out.println(user);
18             }