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

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

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

    Topquan's Blog

    分享價值----成就你我----我的博客----你的家

    eclipse下struts+spring+hibernate快速入門(一)

    本文是開發基于spring的web應用的入門文章,前端采用Struts MVC框架,中間層采用spring,后臺采用Hibernate。
    概覽
    本文包含以下內容:
    •配置Hibernate和事務 •裝載Spring的applicationContext.xml文件
    •建立業務層和DAO之間的依賴關系 •將Spring應用到Struts中
    這個例子是建立一個簡單的web應用,叫MyUsers,完成用戶管理操作,包含簡單的數據庫增,刪,查,該即CRUD(新建,訪問,更新,刪除)操作。這是一個三層的web應用,通過Action(Struts)訪問業務層,業務層訪問DAO。應用的總體結構-從web(UserAction)到中間層(UserManager),再到數據訪問層(UserDAO),然后將結果返回。
    Spring層的真正強大在于它的聲明型事務處理,幫定和對持久層支持(例如Hiberate和iBATIS)
    以下是完成這個例子的步驟:
     1)安裝Eclipse插件 2)數據庫建表 3)配置Hibernate和Spring
    4)建立Hibernate DAO接口的實現類 5)運行測試類,測試DAO的CRUD操作
    6)創建一個處理類,聲明事務  7)創建Struts Action的測試類
    8)創建web層的Action和model 9)運行Action的測試類測試CRUD操作
    10)創建jsp文件通過瀏覽器進行CRUD操作 11)通過瀏覽器校驗jsp
    開發環境
    Eclipse3.0.1 , MyEclispe 3.8.4, MySQL4.1.8, spring-framework-1.2.6-with-dependencies,Tomcat5.0
       數據庫建表   use appfuse;
    CREATE TABLE app_user (
      id int(11) NOT NULL auto_increment,
      firstname varchar(20) NOT NULL,
      lastname varchar(20) ,
      PRIMARY KEY  (id)
    );
        新建項目
    新建一個web project,分別add struts,hibernate capabilities.將spring 包中的dist文件夾中的jar文件拷貝到WEB-INF/lib中。
    創建持久層O/R mapping
    1. 在src/com.jandar.model下用hibernate插件從數據庫導出app_user的.hbm.xml文件改名為User.hbm.xml
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
                                "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
                                "

    <!-- DO NOT EDIT: This is a generated file that is synchronized -->
    <!-- by MyEclipse Hibernate tool integration.                   -->
    <!-- Created Mon Jul 24 11:48:15 CST 2006                         -->
    <hibernate-mapping package="">

        <class name="AppUser" table="app_user">
            <id name="id" column="id" type="integer">
                <generator class="identity"/>
            </id>
     
            <property name="firstName" column="firstname" type="string"  not-null="true" />
            <property name="lastName" column="lastname" type="string" />
        </class>
       
    </hibernate-mapping>
    2.在com.jandar.model下分別建 BaseObject.java 和User.java
    package com.jandar.model;
    import java.io.Serializable;
    import org.apache.commons.lang.builder.EqualsBuilder;
    import org.apache.commons.lang.builder.HashCodeBuilder;
    import org.apache.commons.lang.builder.ToStringBuilder;
    import org.apache.commons.lang.builder.ToStringStyle;
    public class BaseObject implements Serializable {
    public String toString() {
    return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
    }
    public boolean equals(Object o) {
    return EqualsBuilder.reflectionEquals(this, o);
    }
     public int hashCode() {
    return HashCodeBuilder.reflectionHashCode(this);
    }
    }
    package com.jandar.model;
    public class User extends BaseObject {
    private Long id;
    private String firstName;
    private String lastName;
    /**
    * @return Returns the id.
    */
    public Long getId() {
    return id;
     }
    /**
     * @param id The id to set.
    */
    public void setId(Long id) {
    this.id = id;
    }
    public void getFirstName() {
    return firstName;
    }

    public void setFirstName(String firstName) {
    this.firstName = firstName;
    }
     public String getLastName() {
     return lastName;
    }
    public void setLastName(String lastName) {
    this.lastName = lastName;
    }
    }
    創建DAO,訪問對象
    1. 在src/com.jandar.service.dao新建IDAO.java接口,所有的DAO都繼承該接口
    package com.jandar.service.dao;
    public interface IDAO {
    }
    2. 在src/com.jandar.service.dao下新建IUserDAO.java接口
    package com.jandar.service.dao;
    import java.util.List;
    public interface IUserDAO extends IDAO {
    List getUsers();
    User getUser(Integer userid);
    void saveUser(User user);
    void removeUser(Integer id);
    }
    該接口提供了訪問對象的方法,
    3. 在src/com.jandar.service.dao.hibernate下新建UserDAOHiberante.java
    package com.jandar.service.dao.hibernate;
    import java.util.List;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.springframework.orm.hibernate.support.HibernateDaoSupport;
    import com.jandar.model.User;
    import com.jandar.service.dao.IUserDAO;
    public class UserDaoHibernate extends HibernateDaoSupport implements IUserDAO {
    private Log log=LogFactory.getLog(UserDaoHibernate.class);
    /* (非 Javadoc)
    * @see com.jandar.dao.IUserDAO#getUsers()
    */
    public List getUsers() {
    return getHibernateTemplate().find("from User");
    }
    /* (非 Javadoc)
    * @see com.jandar.dao.IUserDAO#getUser(java.lang.Long)
    */
    public User getUser(Integer id) {
    // TODO 自動生成方法存根
    return (User) getHibernateTemplate().get(User.class,id);
    }
    /* (非 Javadoc)
    * @see com.jandar.dao.IUserDAO#saveUser(com.jandar.model.User)
    */
    public void saveUser(User user) {
    log.debug("xxxxxxx");
    System.out.println("yyyy");
    getHibernateTemplate().saveOrUpdate(user);
    if(log.isDebugEnabled())
    {
    log.debug("userId set to "+user.getId());
    }
    }
    /* (非 Javadoc)
    * @see com.jandar.dao.IUserDAO#removeUser(java.lang.Long)
    */
    public void removeUser(Integer id) {
    Object user=getHibernateTemplate().load(User.class,id);
    getHibernateTemplate().delete(user);
    if(log.isDebugEnabled()){
    log.debug("del user "+id);
    }
    }
    }
    在這個類中實現了IUserDAO接口的方法,并且繼承了HibernateDAOSupport類。這個類的作用是通過hibernate訪問、操作對象,進而實現對數據庫的操作。
    創建業務層,聲明事務
    業務層主要處理業務邏輯,提供給web層友好的訪問接口和實現訪問DAO層。用業務層的另一個好處是,可以適應數據訪問層從Hibernate技術轉移到其他數據訪問技術。
    1. 在src/com.jandar.service下新建一個IUserManager接口,該接口有幾乎于IUserDAO同樣的方法,不同的是處理參數,應為IUserManager是供web層訪問的。
    package com.jandar.service;
    import java.util.List;
    import com.jandar.model.User;
    public interface IUserManager {
    User getUser(String userid);
    List getUsers();
    User saveUser(User user);
    void removeUser(String userid);
    }
    2. 在src/com.jandar.service.spring下新建IUserManager實現類,UserManager.java
    package com.jandar.service.spring;
    import java.util.List;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import com.jandar.model.User;
    import com.jandar.service.IUserManager;
    import com.jandar.service.dao.IUserDAO; 
    public class UserManager implements IUserManager {
    /* (非 Javadoc)
    * @see com.jandar.service.IUserManager#getUser(java.lang.String)
    */
    private static Log log=LogFactory.getLog(UserManager.class);
    public IUserDAO userDao;
    /**
    * @return 返回 userDao。
    */
    public IUserDAO getUserDao() {
    return userDao;
    }
    /**
    * @param userDao 要設置的 userDao。
    */
    public void setUserDao(IUserDAO userDao) {
    this.userDao = userDao;
    }
    public User getUser(String userid) {
    User user=userDao.getUser(Integer.valueOf(userid));
    if(user==null){
    log.warn(" user id "+userid+" not found in database");
    }
    if(log.isDebugEnabled()){
    log.debug("get a user with id "+userid);
    }
    return user;
    }
    /* (非 Javadoc)
    * @see com.jandar.service.IUserManager#getUsers()
    */
    public List getUsers() {
    // TODO 自動生成方法存根
    return userDao.getUsers();
    }
    /* (非 Javadoc)
    * @see com.jandar.service.IUserManager#saveUser(com.jandar.model.User)
    */
    public User saveUser(User user) {
    // TODO 自動生成方法存根
    userDao.saveUser(user);
    return user;
    }
    /* (非 Javadoc)
    * @see com.jandar.service.IUserManager#removeUser(java.lang.String)
    */
    public void removeUser(String userid) {
    // TODO 自動生成方法存根
    userDao.removeUser(Integer.valueOf(userid));
    }
    }
    UserManager.java通過訪問dao接口實現業務邏輯和數據庫操作。同時該類中提供了set方法,運用了Spring的依賴注入機制。但尚未使用spring的AOP和聲明事務。
    配置applicationContext.xml
    在WEB-INF 下新建applicationContext.xml
    <?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

    "


    <beans>


    <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/appfuse</value></property>

    <property name="username"><value>root</value></property>

    <!-- Make sure <value> tags are on same line - if they''re not,

    authentication will fail -->

    <property name="password"><value>root</value></property>

    </bean>


    <!-- Hibernate SessionFactory -->

    <bean id="sessionFactory"

    class="org.springframework.orm.hibernate.LocalSessionFactoryBean">

    <property name="dataSource"><ref local="dataSource"/></property>

    <property name="mappingResources">

    <list>

    <value>com/jandar/model/User.hbm.xml</value>

    </list>

    </property>

    <property name="hibernateProperties">

    <props>

    <prop key="hibernate.dialect">net.sf.hibernate.dialect.MySQLDialect</prop>

    <prop key="hibernate.hbm2ddl.auto">create</prop>

    </props>

    </property>

    </bean>


    <!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->

    <bean id="transactionManager" class="org.springframework.orm.hibernate.HibernateTransactionManager">

    <property name="sessionFactory"><ref local="sessionFactory"/></property>

    </bean>


    <bean id="userDAO" class="com.jandar.service.dao.hibernate.UserDAOHibernate">

    <property name="sessionFactory"><ref local="sessionFactory"/></property>

    </bean>


    <bean id="userManagerTarget" class="com.jandar.service.spring.UserManager">

    <property name="userDAO"><ref local="userDAO"/></property>

    </bean>


    <bean id="userManager"

    class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

    <property name="transactionManager"><ref local="transactionManager"/></property>

    <property name="target"><ref local="userManagerTarget"/></property>

    <property name="transactionAttributes">

    <props>

    <prop key="save*">PROPAGATION_REQUIRED</prop>

    <prop key="remove*">PROPAGATION_REQUIRED</prop>

    <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>

    </props>

    </property>
    </bean>

    <bean name="/user" class="com.jandar.web.struts.action.UserAction"
    singleton="false">
    <property name="mgr">
    <ref bean="userManager" />
    </property>
    </bean>


    </beans>

     

    posted on 2006-08-09 23:14 topquan 閱讀(612) 評論(0)  編輯  收藏 所屬分類: Spring

    主站蜘蛛池模板: 亚洲午夜国产精品无码| 在线观看亚洲免费| 亚洲国产精品久久久久久| 精品国产呦系列在线观看免费 | j8又粗又长又硬又爽免费视频| 免费看片免费播放| 亚洲变态另类一区二区三区| 日本高清免费不卡在线| 怡红院亚洲红怡院在线观看| 国产午夜无码视频免费网站| 理论片在线观看免费| 中文字幕不卡亚洲| 91国内免费在线视频| 久久精品国产精品亚洲艾| 999久久久免费精品播放| 久久精品亚洲AV久久久无码| 国内外成人免费视频| 久久亚洲精品无码gv| 亚洲性日韩精品一区二区三区| 最近免费字幕中文大全| 91亚洲自偷手机在线观看| 无人在线观看完整免费版视频| 欧美色欧美亚洲另类二区| 伊人婷婷综合缴情亚洲五月| 四虎影视在线影院在线观看免费视频 | 亚洲爽爽一区二区三区| 免费一级毛片无毒不卡| 亚洲剧情在线观看| 丁香亚洲综合五月天婷婷| 可以免费观看的国产视频| 亚洲 欧洲 日韩 综合在线| 亚洲成A人片77777国产| 免费的全黄一级录像带| 亚洲国产成人久久综合一区| 国产精品免费电影| 久久久久国产精品免费网站| 亚洲三级在线免费观看| 亚洲伊人久久综合影院| 成年网站免费视频A在线双飞| 免费一级毛suv好看的国产网站| 久久精品国产亚洲av日韩|