<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快速入門(一)

    本文是開發(fā)基于spring的web應用的入門文章,前端采用Struts MVC框架,中間層采用spring,后臺采用Hibernate。
    概覽
    本文包含以下內(nèi)容:
    •配置Hibernate和事務 •裝載Spring的applicationContext.xml文件
    •建立業(yè)務層和DAO之間的依賴關系 •將Spring應用到Struts中
    這個例子是建立一個簡單的web應用,叫MyUsers,完成用戶管理操作,包含簡單的數(shù)據(jù)庫增,刪,查,該即CRUD(新建,訪問,更新,刪除)操作。這是一個三層的web應用,通過Action(Struts)訪問業(yè)務層,業(yè)務層訪問DAO。應用的總體結(jié)構(gòu)-從web(UserAction)到中間層(UserManager),再到數(shù)據(jù)訪問層(UserDAO),然后將結(jié)果返回。
    Spring層的真正強大在于它的聲明型事務處理,幫定和對持久層支持(例如Hiberate和iBATIS)
    以下是完成這個例子的步驟:
     1)安裝Eclipse插件 2)數(shù)據(jù)庫建表 3)配置Hibernate和Spring
    4)建立Hibernate DAO接口的實現(xiàn)類 5)運行測試類,測試DAO的CRUD操作
    6)創(chuàng)建一個處理類,聲明事務  7)創(chuàng)建Struts Action的測試類
    8)創(chuàng)建web層的Action和model 9)運行Action的測試類測試CRUD操作
    10)創(chuàng)建jsp文件通過瀏覽器進行CRUD操作 11)通過瀏覽器校驗jsp
    開發(fā)環(huán)境
    Eclipse3.0.1 , MyEclispe 3.8.4, MySQL4.1.8, spring-framework-1.2.6-with-dependencies,Tomcat5.0
       數(shù)據(jù)庫建表   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中。
    創(chuàng)建持久層O/R mapping
    1. 在src/com.jandar.model下用hibernate插件從數(shù)據(jù)庫導出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;
    }
    }
    創(chuàng)建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);
    }
    }
    }
    在這個類中實現(xiàn)了IUserDAO接口的方法,并且繼承了HibernateDAOSupport類。這個類的作用是通過hibernate訪問、操作對象,進而實現(xiàn)對數(shù)據(jù)庫的操作。
    創(chuàng)建業(yè)務層,聲明事務
    業(yè)務層主要處理業(yè)務邏輯,提供給web層友好的訪問接口和實現(xiàn)訪問DAO層。用業(yè)務層的另一個好處是,可以適應數(shù)據(jù)訪問層從Hibernate技術轉(zhuǎn)移到其他數(shù)據(jù)訪問技術。
    1. 在src/com.jandar.service下新建一個IUserManager接口,該接口有幾乎于IUserDAO同樣的方法,不同的是處理參數(shù),應為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實現(xiàn)類,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接口實現(xiàn)業(yè)務邏輯和數(shù)據(jù)庫操作。同時該類中提供了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

    主站蜘蛛池模板: 边摸边吃奶边做爽免费视频99| 黄色片在线免费观看| 国产精品亚洲综合久久| 久久精品国产亚洲一区二区| 国产精品久免费的黄网站| 5555在线播放免费播放| 国产永久免费高清在线| 免费国产高清毛不卡片基地| 亚洲国产成人AV在线播放 | 国产免费黄色无码视频| 国产精品亚洲综合天堂夜夜| 91在线亚洲综合在线| 久久精品国产亚洲AV香蕉| 亚洲av综合avav中文| 国产亚洲精aa成人网站| 免费一级毛片免费播放| 成人午夜视频免费| 啦啦啦高清视频在线观看免费 | 亚洲AV无码久久精品成人| 亚洲午夜福利精品无码| 免费a在线观看播放| 国产成人免费a在线资源| 美女被免费视频网站a国产| 免费观看AV片在线播放| 国产免费AV片在线播放唯爱网 | 亚洲色WWW成人永久网址| 亚洲天堂免费在线视频| 亚洲av日韩av欧v在线天堂| 免费亚洲视频在线观看| 免费A级毛片无码A∨男男| 亚洲av午夜精品一区二区三区| 国产成人无码区免费A∨视频网站 国产成人涩涩涩视频在线观看免费 | 免费人成视频x8x8入口| 日韩免费在线观看| 国产在线19禁免费观看国产| 国产成人免费a在线视频app| 亚洲毛片不卡av在线播放一区 | 国产真人无码作爱免费视频 | 77777_亚洲午夜久久多人| 亚洲一区二区三区首页| 亚洲系列中文字幕|