2011年3月29日 星期二

Spring 教學 - 配置 DBCP 連接池

Spring 集合了很多的資料庫連接池,DBCP 即是其中之一了

開發者只要透過一些簡單的配置即可使用 DBCP,以下以一個範例來介紹如何使用

下面的範例我是以 Java Web 的專案測試,並非一般的 Java Application

所以 如果到最後程式沒錯但是出現一堆 bug 的問題,我之後再撰文一一說明

如果是以 Java Web 為專案的,請先檢查該專案下是否已經存在了

Spring-2.5.6、commons-dbcp-1.4、commons-pool-1.5.5 否則會跑不起來唷!!

首先在 Spring 框架中有一部份即是整合了 DAO、ORM.....等

其中以下以一個 Good (商品) 和 GoodDao 為例,來看看Spring 如何整合 DAO 和連接池

GoodDao.java
package org.database;
import java.util.List;
import java.util.Map;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
public class GoodDao extends JdbcDaoSupport //自定義的 DAO 必須繼承 JdbcDaoSupport 
{
    public List getAll(){
         List list = (List)getJdbcTemplate().queryForList("SELECT * FROM goods");
         return list;
    }

    //another method....
}


以上的 DAO 必須繼承 org.springframework.jdbc.core.support.JdbcDaoSupport

下面為 Good 的 javabean

Good.java
package org.pojo;
import java.util.Date;
public class Good 
{
    private int id;
    private String viewpic;
    private String name;
    private int price;
    private int storenum;
    private Date uptime;
    private String maaker;
    private String info;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getViewpic() {
        return viewpic;
    }
    public void setViewpic(String viewpic) {
        this.viewpic = viewpic;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getPrice() {
        return price;
    }
    public void setPrice(int price) {
        this.price = price;
    }
    public int getStorenum() {
        return storenum;
    }
    public void setStorenum(int storenum) {
        this.storenum = storenum;
    }
    public Date getUptime() {
        return uptime;
    }
    public void setUptime(Date uptime) {
        this.uptime = uptime;
    }
    public String getMaaker() {
        return maaker;
    }
    public void setMaaker(String maaker) {
        this.maaker = maaker;
    }
    public String getInfo() {
        return info;
    }
    public void setInfo(String info) {
        this.info = info;
    }
}

以上完成後就來看看Spring 中最重要的配置檔案了 applicationContext.xml

建議將該檔案放置在 ClassPath 目錄下喔


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN"
  "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/shopcar"/>
    <property name="username" value="root"/>
    <property name="password" value="1111"/>
    </bean>

    
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource"/>
    </bean>
   
    
    <bean id="GoodDao" class="org.database.GoodDao">
    <property name="jdbcTemplate" ref="jdbcTemplate"/>
    </bean>
</beans>

 還記得我們的 GoodDao 有繼承 org.springframework.jdbc.core.support.JdbcDaoSupport

所以以上的配置檔中的最後一個 bean 的配置中

就將 JdbcTemplate 注入到 GoodDao jdbcTemplate 屬性中,

而此屬性就是繼承JdbcDaoSupport而來的

最後可以寫個 測試程式來測試一下

public static void main(String[] args)
{
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    GoodDao goodDao = (shopCarDao)context.getBean("GoodDao");
    List<Map> list = goodDao.findAll();
  
    for(int i=0;i<list.size();i++){
        Map good = (Map)list.get(i);
        System.out.println(good.get("name"));
    }
}

沒有留言:

張貼留言