天天看點

體驗Spring的“IoC容器”對開發過程中的簡化

<b>問題:</b>設計一個 DAO元件,完成對某個資料庫表的操作----将DataSource也注入到我們的程式中。

<b>1</b><b>、在本項目中再增加一個DAO</b><b>的接口</b>

名稱為DAOInterface,包名稱為springj2seapp

<b></b>

<b>在該接口中增加一個方法的定義</b>

package springj2seapp;

import java.sql.ResultSet;

public interface DAOInterface

{

       <b> public ResultSet SelectDBData(String select_SqlStatement);    //</b><b>代表對資料的查詢</b>

<b>public void closeCon();</b>

}

<b>2</b><b>、再對該接口加以實作</b>

<b>       </b>類名稱為DAOInterfaceImpl,包名稱為springj2seapp

<b>程式設計該DAO</b><b>元件類</b>

import java.sql.*;

import javax.sql.DataSource;

public class DAOInterfaceImpl implements DAOInterface

        <b>DataSource dataSource=null;</b>

<b>        Connection con=null;</b>

<b>//</b><b>以便能夠将dataSource</b><b>以屬性注入的方式來注入</b>

<b>        public void setDataSource(DataSource dataSource)</b>

<b>        {</b>

<b>                  this.dataSource = dataSource;</b>

<b>        }</b>

       public DAOInterfaceImpl()

       {

              super();

              // TODO 自動生成構造函數存根

       }

       <b>public ResultSet SelectDBData(String select_SqlStatement)</b>

           try

           {

             con = dataSource.getConnection();

           }

           catch (SQLException ex)

             System.out.println(ex.getMessage());

           ResultSet rs=null;

             java.sql.PreparedStatement pstmt = con.prepareStatement(select_SqlStatement,

                 ResultSet.TYPE_SCROLL_SENSITIVE,

                 ResultSet.CONCUR_UPDATABLE);

             rs = pstmt.executeQuery();

           catch (SQLException e)

             System.out.println(e.getMessage());

       <b>       return rs;</b>

       <b>public void closeCon()</b>

              try

              {

                     con.close();

              }

              catch (SQLException e)

                      System.out.println(e.getMessage());

<b>3</b><b>、修改前面的業務元件類</b>

import java.sql.SQLException;

import java.util.Date;

public class UserInfoManage implements UserInfoInterface

       boolean okOrNot;

       private Date dateBean=null;  

       <b>DAOInterface oneDAOBean=null;   </b>

       public UserInfoManage()

新增加一個DAO的對象參數

       <b>public UserInfoManage(UserInfoVO oneUserInfo, Date dateBean, DAOInterface oneDAOBean)</b>

              this.dateBean=dateBean;

       <b>       this.oneDAOBean=oneDAOBean;</b>

              doUserLogin(oneUserInfo);

       public  boolean doUserLogin(UserInfoVO oneUserInfo)

              String userName=oneUserInfo.getUserName();

              String userUserPassWord=oneUserInfo.getUserPassWord();             

<b>              String sqlText="select * from userInfo where userName ='"+userName+</b>

<b>                                       "' and userPassWord ='"+userUserPassWord+"'";</b>

<b>              ResultSet rs=oneDAOBean.SelectDBData(sqlText);</b>

<b>              try</b>

<b>              {</b>

<b>                     if(rs.next())</b>

<b>                     {</b>

<b>                            okOrNot=true;</b>

<b>                     }</b>

<b>                     else</b>

<b>                            okOrNot=false;</b>

<b>              }</b>

<b>              catch (SQLException e)</b>

<b>                     e.printStackTrace();</b>

記得注釋掉下面的哦

<b>              oneDAOBean.closeCon();</b>

       <b>       //okOrNot=userName.equals("yang")&amp;&amp;userUserPassWord.equals("1234");</b>

              String loginTime=dateBean.toLocaleString();

              System.out.println("您的登入時間是:"+loginTime);

              return okOrNot;

       public boolean getUserLogin()

       }    

<b>4</b><b>、在*.xml</b><b>配置檔案中添加DataSource</b><b>以及DAO</b><b>元件的注入</b>

&lt;bean id="oneUserInfoManage" class="springj2seapp.UserInfoManage"&gt;

  &lt;constructor-arg&gt;

      &lt;ref bean="oneUserInfo"/&gt;

  &lt;/constructor-arg&gt;

       &lt;ref bean="dateBean"/&gt;

  <b>&lt;constructor-arg&gt;</b>

<b>       &lt;ref bean="oneDAOBean"/&gt;</b>

<b>  &lt;/constructor-arg&gt;</b>

&lt;/bean&gt;

&lt;bean id="oneUserInfo" class="springj2seapp.UserInfo"&gt;

此時的使用者名稱和密碼可以是資料庫表中存在的

    &lt;property name="userName"&gt;

              <b>&lt;value&gt;admin&lt;/value&gt;</b>

       &lt;/property&gt;

新增加一個DataSource的聲明

       &lt;property name="userPassWord"&gt;

  &lt;bean id="dateBean" class="java.util.Date"/&gt;   

<b>  &lt;bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"&gt;</b>

<b>        &lt;property name="driverClassName"&gt;</b>

<b>            &lt;value&gt;com.microsoft.jdbc.sqlserver.SQLServerDriver&lt;/value&gt;</b>

<b>        &lt;/property&gt;</b>

<b>        &lt;property name="url"&gt;</b>

<b>            &lt;value&gt;jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=WebStudyDB&lt;/value&gt;</b>

<b>        &lt;property name="username"&gt;</b>

<b>            &lt;value&gt;sa&lt;/value&gt;</b>

<b>        &lt;property name="password"&gt;</b>

<b>            &lt;value&gt;1234&lt;/value&gt;</b>

<b>&lt;/bean&gt;</b>

<b>&lt;bean id="oneDAOBean"  class="springj2seapp.DAOInterfaceImpl"&gt;</b>

<b>       &lt;property name="dataSource"&gt;</b>

新增加一個DAO元件的聲明

<b>              &lt;ref bean="dataSource"/&gt;</b>

<b>       &lt;/property&gt;</b>

<b>5</b><b>、啟動資料庫伺服器</b>

<b>并且應該有一個資料庫檔案WebStudyDB</b><b>,在該資料庫中有一個userInfo</b><b>資料庫表</b>

<b>使用者帳号為sa,</b><b>并且密碼為1234</b>

<b>6</b><b>、将SQLServer2000</b><b>的JDBC</b><b>驅動程式的*.jar</b><b>檔案導入到我們的項目中</b>

<b>msbase.jar</b><b>、mssqlserver.jar</b><b>和msutil.jar</b>

<b>7</b><b>、執行本程式</b>

<b>将出現下面的登入成功的提示</b>

<b>8</b><b>、體驗IoC</b><b>對DAO </b><b>的松散的支援</b>

<b>也可以對前面的DataSource</b><b>改變為Apache DBCP</b><b>的DataSource</b><b>(org.apache.commons.dbcp.BasicDataSource</b><b>)</b>

<b>(1</b><b>)将*.xml</b><b>中的DataSource</b><b>的建立的實作類由</b>

<b>org.springframework.jdbc.datasource.DriverManagerDataSource</b>

<b>改變為org.apache.commons.dbcp.BasicDataSource</b><b>。</b>

<b>注意:</b>*.xml中的其它的配置标簽不需要改變。

&lt;bean id="dataSource" class="<b>org.apache.commons.dbcp.BasicDataSource</b>"&gt;

        &lt;property name="driverClassName"&gt;

            &lt;value&gt;com.microsoft.jdbc.sqlserver.SQLServerDriver&lt;/value&gt;

        &lt;/property&gt;

        &lt;property name="url"&gt;

            &lt;value&gt;jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=WebStudyDB&lt;/value&gt;

        &lt;property name="username"&gt;

            &lt;value&gt;sa&lt;/value&gt;

        &lt;property name="password"&gt;

            &lt;value&gt;1234&lt;/value&gt;

<b>  </b>

<b>(2</b><b>)在本項目中添加對應的DBCP</b><b>的驅動程式的*.jar</b><b>封包件</b>

<b>commons-collections.jar</b><b>、commons-dbcp-1.2.1.jar</b><b>和commons-pool-1.2.jar</b>

<b>(3</b><b>)再執行該項目</b>

<b></b> 

<b> </b>

本文轉自 weijie@java 51CTO部落格,原文連結:http://blog.51cto.com/weijie/66499,如需轉載請自行聯系原作者