<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    all gone

    all gone

    SSH(Spring + Struts + Hibernate)小試 之二

    Spring和Struts結合有幾種方法,我選了最常用的PlugIn方式,在struts-config.xml中加入

    <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
    ??????<set-property property="contextConfigLocation"
    ?????????? ?value="/WEB-INF/action-servlet.xml" />
    ?</plug-in>

    WEB-INF目錄下的action-servlet.xml就是Spring的配置文件,下面給出的是整個的action-servlet.xml文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "<beans>

    //Data Source

    ?<bean id="dataSource"
    ??class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    ??<property name="driverClassName">
    ???<value>com.mysql.jdbc.Driver</value>
    ??</property>
    ??<property name="url">
    ???<value>jdbc:mysql://localhost:3306/forum</value>
    ??</property>
    ??<property name="username">
    ???<value>test</value>
    ??</property>
    ??<property name="password">
    ???<null />
    ??</property>
    ?</bean>

    // For Hibernate
    ?<bean id="sessionFactory"
    ??class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    ??<property name="dataSource">
    ???<ref local="dataSource" />
    ??</property>
    ??<property name="mappingResources">
    ???<list>
    ????<value>com/lzy/forum/domain/User.hbm.xml</value>
    ????<value>com/lzy/forum/domain/Article.hbm.xml</value>
    ????<value>com/lzy/forum/domain/Board.hbm.xml</value>
    ???</list>
    ??</property>
    ??<property name="hibernateProperties">
    ???<props>
    ????<prop key="hibernate.dialect">
    ?????org.hibernate.dialect.MySQLDialect
    ????</prop>
    ????<prop key="hibernate.show_sql">true</prop>
    ???</props>
    ??</property>
    ?</bean>

    ?<bean id="transactionManager"
    ??class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    ??<property name="sessionFactory">
    ???<ref local="sessionFactory" />
    ??</property>
    ?</bean>

    ?

    // For DAO
    ?<bean id="userDAO"
    ??class="com.lzy.forum.dao.impl.UserDAOHibernate">
    ??<property name="sessionFactory">
    ???<ref local="sessionFactory" />
    ??</property>
    ?</bean>

    ?

    ?<bean id="boardDAO"
    ??class="com.lzy.forum.dao.impl.BoardDAOHibernate">
    ??<property name="sessionFactory">
    ???<ref local="sessionFactory" />
    ??</property>
    ?</bean>

    ?<bean id="articleDAO"
    ??class="com.lzy.forum.dao.impl.ArticleDAOHibernate">
    ??<property name="sessionFactory">
    ???<ref local="sessionFactory" />
    ??</property>
    ?</bean>

    //For Struts Action

    ?<bean name="/regist" class="com.lzy.forum.action.RegistAction"
    ??singleton="false">
    ??<property name="userDAO">
    ???<ref local="userDAO" />
    ??</property>

    ?</bean>


    ?<bean name="/login" class="com.lzy.forum.action.LoginAction"
    ??singleton="false">
    ??<property name="userDAO">
    ???<ref local="userDAO" />
    ??</property>

    ?</bean>

    ?<bean name="/boardManage"
    ??class="com.lzy.forum.action.BoardManageAction" singleton="false">
    ??<property name="userDAO">
    ???<ref local="userDAO" />
    ??</property>
    ??<property name="boardDAO">
    ???<ref local="boardDAO" />
    ??</property>

    ?</bean>

    ?<bean name="/boardNavigate"
    ??class="com.lzy.forum.action.BoardNavigateAction" singleton="false">
    ??<property name="boardDAO">
    ???<ref local="boardDAO" />
    ??</property>

    ?</bean>

    ?<bean name="/boardDisplay"
    ??class="com.lzy.forum.action.BoardDisplayAction" singleton="false">
    ??<property name="boardDAO">
    ???<ref local="boardDAO" />
    ??</property>

    ?</bean>

    ?<bean name="/articleManage"
    ??class="com.lzy.forum.action.ArticleManageAction" singleton="false">
    ??<property name="userDAO">
    ???<ref local="userDAO" />
    ??</property>
    ??<property name="boardDAO">
    ???<ref local="boardDAO" />
    ??</property>
    ??<property name="articleDAO">
    ???<ref local="articleDAO" />
    ??</property>


    ?</bean>


    </beans>

    經過這樣的配置之后,Hibernate事務交由Spring管理,sessionFactory從Spring容器獲得。下面通過其中的一個DAO實例來看看這樣做帶來的方便。


    //BoardDAO.java

    package com.lzy.forum.dao;

    import java.util.ArrayList;

    import com.lzy.forum.domain.Board;

    public interface BoardDAO {
    ?
    ?public boolean isBoardExist(String name);
    ?
    ?public void addBoard(Board board);
    ?
    ?public void deleteBoard(Board board);
    ?
    ?public Board loadBoard(int id);
    ?
    ?public Board loadBoard(String name);
    ?
    ?public Board loadBoardWithArticles(int id);
    ?
    ?public ArrayList getRootBoardsList();
    ?
    ?
    ?
    }


    //BoardDAOHibernate.java

    package com.lzy.forum.dao.impl;

    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.ListIterator;
    import java.util.Set;

    import org.hibernate.Hibernate;
    import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

    import com.lzy.forum.dao.BoardDAO;
    import com.lzy.forum.domain.Board;

    public class BoardDAOHibernate extends HibernateDaoSupport implements BoardDAO {

    ?public void deleteBoard(Board board) {
    ??// TODO Auto-generated method stub
    ??this.getHibernateTemplate().delete(board);
    ?}

    ?public void addBoard(Board board) {
    ??// TODO Auto-generated method stub
    ??this.getHibernateTemplate().saveOrUpdate(board);

    ?}

    ?public boolean isBoardExist(String name) {
    ??// TODO Auto-generated method stub
    ??ArrayList list = (ArrayList) this.getHibernateTemplate().find(
    ????"from Board where name = ? ", new Object[] { name });
    ??if (list.size() > 0) {
    ???// System.out.println("find it");
    ???return true;
    ??}
    ??return false;
    ?}

    ?public Board loadBoard(int id) {
    ??// TODO Auto-generated method stub
    ??ArrayList list = (ArrayList) this.getHibernateTemplate().find(
    ????"from Board where id = ? ", new Object[] { id });

    ??Board b = null;
    ??if (list.size() > 0) {
    ???b = (Board) list.get(0);
    ??}

    ??return b;
    ?}

    ?public Board loadBoard(String name) {
    ??// TODO Auto-generated method stub
    ??ArrayList list = (ArrayList) this.getHibernateTemplate().find(
    ????"from Board where name = ? ", new Object[] { name });

    ??Board b = null;
    ??if (list.size() > 0) {
    ???b = (Board) list.get(0);
    ??}

    ??return b;
    ?}

    ?public ArrayList getRootBoardsList() {
    ??// TODO Auto-generated method stub
    ??ArrayList list = (ArrayList) this.getHibernateTemplate().find(
    ????"from Board b left join fetch b.ChildBoards where b.Parent = null order by b.id");
    ??System.out.println(list.size() + " root boards found ");
    ??

    ??ListIterator index = list.listIterator();
    ??while (index.hasNext()) {

    ???Board s = (Board) index.next();
    ???//this.getSession(true);
    ???//Hibernate.initialize(s.getChildBoards());
    ???///*
    ??? Set children? = (Set) s.getChildBoards();
    ??? Iterator it = children.iterator();
    ???
    ??? while(it.hasNext()){
    ??? Board b = (Board)it.next();
    ??? //Hibernate.initialize(b);
    ??? System.out.println(b.getName());
    ??? }
    ??? //*/

    ???//System.out.println(children.size() + "child(ren) found ");
    ???//s.setChildBoards(s.getChildBoards());
    ??}

    ??return list;
    ?}

    ?public Board loadBoardWithArticles(int id) {
    ??// TODO Auto-generated method stub
    ??ArrayList list = (ArrayList) this.getHibernateTemplate().find(
    ????"from Board b left join fetch b.Articles where b.Id = ? ", new Object[] { id });

    ??Board b = null;
    ??if (list.size() > 0) {
    ???b = (Board) list.get(0);
    ??}

    ??return b;

    ?}


    }


    BoardDAOHibernate繼承 HibernateDaoSupport后,通過getHibernateTemplate()得到一個HibernateTemplate實例,然后執行CRUD操作,非常簡單。需要注意的是,由于執行一次CRUD操作后,Hibernate session關閉,如果有使用延遲加載策略的對象沒有加載,在后面的Web層很容易出現如下錯誤:
    failed to lazily initialize a collection of role
    從網上搜到的解決方法是Open Session In View,
    <filter>
    ???? <filter-name>hibernateFilter</filter-name>
    ???? <filter-class> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
    ???? </filter-class>

    ???? <!-- singleSession默認為true,若設為false則等于沒用OpenSessionInView -->
    ??? <init-param>
    ?????? <param-name>singleSession</param-name>
    ?????? <param-value>true</param-value>
    ??? </init-param>
    ? </filter>

    ?? <filter-mapping>
    ???? <filter-name>hibernateFilter</filter-name>
    ???? <url-pattern>*.do</url-pattern>
    ?? </filter-mapping>
    我試了試,還是有一些問題,所以后來還是放棄了這種方法,所有在Web層中需要的對象都必須在Business層中加載完成。如下面的代碼所示:

    ArrayList list = (ArrayList) this.getHibernateTemplate().find(
    ????"from Board b left join fetch b.Articles where b.Id = ? ", new Object[] { id });


    這樣Hibernate和Spring的結合也算完成了。其他的一些DAO類和實現代碼我沒有給出,但是大同小異,和Board的實現類似。


    最后將是Struts 和Spring的結合,將在下一篇給出。(未完待續)





    posted on 2006-07-18 16:09 all gone 閱讀(950) 評論(0)  編輯  收藏 所屬分類: Java

    主站蜘蛛池模板: 97久久国产亚洲精品超碰热| 久久亚洲精品国产精品婷婷| 久久久久久久久久久免费精品| 成年女人毛片免费观看97| 亚洲图片一区二区| 99精品视频在线观看免费播放| 久久精品国产亚洲| 亚洲免费福利视频| 无码视频免费一区二三区| 亚洲人成图片网站| 日韩激情无码免费毛片| 国产亚洲精品美女| 亚洲精品国产精品乱码不卡| 国产日韩在线视频免费播放| 久久精品亚洲一区二区| 37pao成人国产永久免费视频 | 中文字幕在线观看亚洲日韩| 青青视频免费在线| 不卡一卡二卡三亚洲| 久久免费精彩视频| jlzzjlzz亚洲jzjzjz| 国产一区二区三区免费在线观看| 色多多A级毛片免费看| 亚洲成色www久久网站夜月| 黄在线观看www免费看| 亚洲国产精品18久久久久久| 亚洲高清国产拍精品青青草原| a级片免费在线播放| 亚洲一区电影在线观看| 国产午夜影视大全免费观看| 国产一二三四区乱码免费| 亚洲电影在线免费观看| 国产一级淫片a视频免费观看| av永久免费网站在线观看| 国产成人亚洲合集青青草原精品| 国产高清在线免费视频| 免费日本一区二区| 中国亚洲呦女专区| 亚洲精品免费视频| 亚洲色大成网站www永久网站| 国拍在线精品视频免费观看|