成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

簡述Spring JDBC的學習

開發 后端
本文介紹Spring JDBC的基本設計理念,就是將JDBC編程中變化的和不變化的分開。

這里記錄我對Spring JDBC框架的學習。由于Spring JDBC和我之前做的工作有很多共同之處,學習經典Framework的設計,取長補短,為我所用。在這里,先佩服一下Rod JohnSon,他對數據庫,JDBC的理解非常深。看Spring jdbc框架的設計和源代碼,帶給了我很多以前沒有想到的東西。我們知道,Spring JDBC的主要目標是為了簡化JDBC的編程,方便我們構建健壯的應用程序。這里,它的一個基本設計理念,就是將JDBC編程中變化的和不變化的分開。在JDBC中,什么是變化的?毫無疑問,SQL語句是變化的。那什么是不變化的?正確的使用JDBC的方式是不變化的。

先看一段代碼。(自己的代碼就不拿來做示范了,先看Rod書吧)

  1. public List getAvailableSeatlds(DataSource ds, int performanceld,    
  2.         int seatType) throws ApplicationException {         
  3.      String sql = "SELECT seat_id AS id FROM available_seats " +    
  4.                    "WHERE performance_id = ? AND price_band_id = ?";List seatlds = new LinkedList();    
  5.     Connection con = null;    
  6.       PreparedStatement ps = null;    
  7.       ResultSet rs = null;    
  8.      try {    
  9.         con = ds.getConnection();   //1。建立Connection  
  10.        ps = con.prepareStatement(sql);  //2。創建preparedStatement  
  11.         ps.setlnt(1, performanceld);  //3。設置ps的參數  
  12.        ps.setlnt(2, seatType);  
  13.        rs = ps.executeQuery();      //4.執行查詢
  14.        while (rs.next()) {         //5.解析ResultSet
  15.         int seatld = rs.getlnt(1);    
  16.           seatlds.add(new Integer(seatld));    
  17.        }                                                                                                                        
  18.        rs.close();                //6.關閉資源,做好善后工作。rs,ps,connection  
  19.        ps.close(); 
  20.          }    
  21.       catch (SQLException ex) {    
  22.        throw new ApplicationException ("Couldn't run query [" + sql + "]", ex);    
  23.      }    
  24.      finally {    
  25.         try {    
  26.          if (con != null)    
  27.           con.close();  //如果沒有連接池的話,不要輕易關。connection屬于耗費資源:)  
  28.        }    
  29.        catch (SQLException ex) {    
  30.          // Log and ignore    
  31.        }    
  32.      }    
  33.      return seatlds;    
  34.     }    

從上面看,什么是不變的。首先,咱們這個使用JDBC的方式是良好的,正確的,也是不變的,也就是workflow不變。其次,這里頭的很多操作是不變的,比如說:關閉資源,處理異常。
◆什么是變的?設置PreparedStament的參數是變化的,利用PreparedStatement做什么是變化的。
◆還有什么是變的?取得Connection可能是變化的,我們可以從ConnectionPool中取,也可以裸從Database取。
◆還有什么是變的?在主工作流之外,還可以對PreparedStament設置一些屬性。比如fetchSize等。
◆還有什么是變的?解析ResultSet是變的。但是可以抽象,都是從結果集中取得你想要的東西。
    
很好。經過分析,我們會自然而然的想到Template設計模式。用模板方法來描述我們的工作流。對于固定的操作,我們會把它建模為一些幫助類,利用這些類來完成固定操作,這些操作在Template方法中被調用。

對于哪些可以變的方法。我們也發現,其實它要實現的功能是一樣的。抽象起來,我們可以用一些接口來描述這些功能。比如說數據庫連接管理的功能。

設計取決于我們考慮問題的深度,以及我們對過程劃分的粒度。

【編輯推薦】

  1. Spring MVC框架的高級配置(上)
  2. Spring MVC框架的高級配置(下)
  3. 用Factory Bean讓Spring配置動起來
  4. Spring AOP使用心得
  5. Acegi安全框架在基于Spring框架應用
責任編輯:佚名 來源: JavaEye
相關推薦

2009-06-24 11:39:45

學習JSF

2009-06-30 17:03:49

Spring集成Str

2009-06-29 17:17:57

Spring

2009-07-20 10:42:55

Spring JDBC

2009-09-29 17:22:30

Hibernate S

2009-07-15 17:11:31

JDBC的概念

2009-09-25 11:27:19

Hibernate J

2009-06-08 17:56:00

SpringJDBC事務

2009-06-19 18:38:01

Spring

2018-12-12 22:33:47

2009-07-14 17:01:24

JDBC基礎

2022-12-09 08:00:00

深度學習人工智能機器學習

2009-07-23 13:30:46

JDBC事務

2021-05-13 07:58:05

JDBC接口PreparedSta

2018-04-23 14:49:31

表征句子深度學習自然語言

2018-07-24 09:38:35

JavaMySQLJDBC

2009-09-23 09:16:25

Hibernate復合

2010-07-27 14:52:37

Batch Telne

2010-07-12 11:44:54

向量路由協議

2012-09-19 15:06:45

Lucene
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费观看一级特黄欧美大片 | 视频二区国产 | 亚洲视频在线观看 | 成人av电影在线 | 中文字幕在线三区 | 99精品福利视频 | 精品一区二区三区在线视频 | 亚洲综合二区 | 亚洲成av人影片在线观看 | 国产高清在线精品 | 亚洲一区二区国产 | 日韩电影一区 | 日本免费小视频 | 欧美极品在线 | 久久视频精品 | 亚洲福利av | 久久久久久免费精品一区二区三区 | 国产在线a | 日美女逼逼 | 久久一二 | 一a级片| 久久国产精品无码网站 | 国产亚洲一区二区三区在线观看 | 亚洲国产成人在线视频 | 麻豆精品一区二区三区在线观看 | 日韩第一夜 | 久久国产精品99久久久久 | 91久久精品国产 | 91私密视频 | 亚洲综合日韩精品欧美综合区 | av在线天堂 | 亚洲一区二区三区在线播放 | 在线一级片 | 欧美日本在线 | 日韩不卡一区二区 | 日韩在线播放第一页 | 亚洲精品电影在线观看 | 日韩精品亚洲专区在线观看 | 在线观看午夜视频 | 久久99蜜桃综合影院免费观看 | 超碰最新在线 |