eclipse中SSH三大框架環境搭建<二>


  通過上一篇博客我們可以輕松搭建strtus2的環境,接下來由我來繼續介紹spring的環境搭建以及spring注入的簡單使用

  相關鏈接:eclipse中SSH三大k框架環境搭建<一>
  eclipse中SSH三大框架環境搭建<三>

  本例業務需求:將數據庫一張表的信息通過JDBC查詢出來並顯示在頁面中

  流程:action控制層-->service業務層-->dao數據層-->數據庫

  第1步:我們還是需要加入spring開發中所需要的jar包

  找到下載並解壓好的spring文件,然后找到該文件下的libs目錄下文件,我們可以將所有jar包復制到我們web項目下的lib目錄下

  

  注意:1>***.javadoc.jar文檔和***.sources.jar源碼我們可以不拷貝到我們的項目中,如果想加深自己的理解小編建議大家看看源碼(畢竟這是第一手資料)

     2>我們還需要加入commons-logging.jar包。用來記錄程序運行時的活動的日志記錄。該文件在struts2文件中app目錄下的struts2-showcase.war包目錄下的WEB-INF下的lib中

  3>我們還需要加入struts2中的一個插件包struts2-spring-plugin-2.3.30.jar(經常容易忘記)

   4>由於本例我們還需要操作mySql數據庫因此還需加入數據庫驅動包mysql-connector-java-5.1.39-bin.jar

  第2步:由於本例用到了struts所以還是需要先配置strtus.xml文件

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 4     "http://struts.apache.org/dtds/struts-2.3.dtd">
 5 
 6 <struts>
 7     <!-- 告知Struts2運行時使用Spring來創建對象 -->
 8     <constant name="struts.objectFactory" value="spring" />
 9     <package name="001pck" extends="struts-default">
10         <action name="Index" class="myIndexAction">
11             <result name="success">/WEB-INF/jsp/index.jsp</result>
12         </action>
13         
14     </package>
15 </struts>

  注意:這里的class並沒有引用一個具體的類而是取了一個別名,接下來再由spring給它注入

  第3步:配置applicationContext.xml文件

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"    
 3         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
 4         xmlns:p="http://www.springframework.org/schema/p"  
 5         xmlns:aop="http://www.springframework.org/schema/aop"   
 6         xmlns:context="http://www.springframework.org/schema/context"  
 7         xmlns:jee="http://www.springframework.org/schema/jee"  
 8         xmlns:tx="http://www.springframework.org/schema/tx"  
 9         xsi:schemaLocation="    
10             http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd  
11             http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd  
12             http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
13             http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.2.xsd  
14             http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">
15     <!-- 類似於財務部門一樣,類就是錢,所有需要類的實例都由srping去管理, pojo除外-->
16     <bean id="myIndexAction" class="action.IndexAction" scope="prototype">
17         <property name="index" ref="myService1"></property>
18     </bean>
19     <!-- index = new IndexServiceImpl() -->
20     <bean id="myDao1" class="dao.BookCardDaoImpl" scope="prototype">
21         <property name="c" ref="myConnection1"></property>
22     </bean>
23     
24     <bean id="myService1" class="service.IndexServiceImpl" scope="prototype">
25         <property name="bcd" ref="myDao1"></property>
26     </bean>
27     
28     <bean id="myConnection1" class="util.MyConnection_mysql" scope="prototype"></bean>
29     
30     <bean id="myConnection2" class="util.MyConnection_sqlserver" scope="prototype"></bean>
31 
32 </beans>

  在這里我介紹一下這份配置文件的相關信息吧

  1 頭文件我們一般從官方模板中拷貝過來,需要注意一下版本號

  2 bean標記就是我們需要給項目中的每一個實例配置一個bean(pojo除外),當哪一層需要調用時,spring會幫我們注入。

  3 bean標記中id屬性為在本文件中起一標識作用用來區分其他bean,class屬性的值便是當前bean引用了哪一個類 ,scope屬性的值為prototype為非單例的意思

  4 bean標記中的子標記property便是當前這個類中需要注入的屬性,name屬性值為我們java類中的屬性名,ref屬性值為當前類需要引用哪一個實現類。

  本例中我們可以看到dao中引用了myConnection1也就是引用了mysql的連接,如此一來便可以輕松切換mySQL和sqlServer兩個數據庫,而並不需要改動我們的任何邏輯代碼。

  下面我給出一個dao的樣例代碼

 1 public class BookCardDaoImpl implements BookCardDao {
 2     
 3     //只做屬性的申明,不寫死具體的實現
 4     private MyConnection c;
 5     
 6     //提供一個set方法spring會自動注入
 7     public void setC(MyConnection c) {
 8         this.c = c;
 9     }
10 
11     @Override
12     public List<BookCard> getAllCardInfo() {
13         
14         // 第一步:獲取數據庫連接
15         Connection conn = c.getConnection();
16 
17         // 第二步:查詢數據庫
18         // (操作JDBC,需要sql語句,需要執行sql語句對象,需要執行sql語句后結果集合)
19         String sql = "select * from BookCard";// 需要執行的sql語句
20         PreparedStatement stmt = null;// 執行sql語句對象
21         ResultSet rs = null;// 執行sql語句后的結果集
22         try {
23             stmt = conn.prepareStatement(sql);
24             rs = stmt.executeQuery();
25         } catch (Exception e) {
26             e.printStackTrace();
27         }
28 
29         // 第三步
30         // 拿到rs后,執行一個遍歷以及封裝
31         List<BookCard> myBookCardList = new ArrayList<BookCard>();
32         try {
33             while (rs.next()) {
34                 // 風格:實體類是一個pojo對象,一般直接new就行
35                 BookCard bc = new BookCard();
36                 // 進行數據庫封裝
37                 bc.setCid(rs.getInt("cid"));
38                 bc.setName(rs.getString("name"));
39                 bc.setSex(rs.getString("sex"));
40                 bc.setCardDate(rs.getDate("cardDate"));
41                 bc.setDeposit(rs.getBigDecimal("deposit"));
42                 myBookCardList.add(bc);
43             }
44         } catch (Exception e1) {
45             e1.printStackTrace();
46         }
47         
48         //關閉資源
49         try {
50             rs.close();
51             stmt.close();
52             conn.close();
53         } catch (Exception e) {
54             e.printStackTrace();
55         }
56 
57         // 第5步返回結果集List給客戶端
58         return myBookCardList;
59     }

 

 spring的環境在這一步已經是搭建完成了,我再來介紹一下spring的注入。

  大家可以清晰的看到左邊這幅圖呢是傳統的面向對象編程的寫法,每一層都與另外一層緊密耦合,當一層出現問題,層層都需要變動,在軟件工程中是大忌

  右圖中,層與層之間都已經分離出來了,這里具體實現是通過在每一層都定義一個接口,層與層之間調用的都是接口並不關心是哪一個實現類,真正的實現類是誰不在代碼中出現而是交給spring讓他給我們注入。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM