<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 閱讀(619) 評論(0)  編輯  收藏 所屬分類: Spring

    主站蜘蛛池模板: 最近免费中文字幕大全视频| 四虎影视在线永久免费看黄| 91禁漫免费进入| 国产精品国产自线拍免费软件| 国产亚洲精AA在线观看SEE| 亚洲伦理中文字幕| 人人鲁免费播放视频人人香蕉| 日本在线免费观看| 国产亚洲精品免费| 久久人午夜亚洲精品无码区| 95老司机免费福利| 亚洲最新在线视频| 在线观看片免费人成视频播放| 最新欧洲大片免费在线| 亚洲午夜未满十八勿入网站2| 人人狠狠综合久久亚洲| 免费人成网站在线高清| 亚洲精品天堂在线观看| 日本一卡精品视频免费| 亚洲女同成av人片在线观看| 一个人免费视频在线观看www | 丁香五月亚洲综合深深爱| 亚洲女女女同性video| 免费观看无遮挡www的小视频| 亚洲一区爱区精品无码| 久久久高清日本道免费观看| 自拍日韩亚洲一区在线| 免费国内精品久久久久影院| 中文字幕久无码免费久久| 亚洲精品成人片在线观看| 久久狠狠爱亚洲综合影院| 在线免费观看国产| 亚洲色成人WWW永久在线观看| 久久免费看黄a级毛片| 亚洲an天堂an在线观看| 一个人看的www免费视频在线观看 一个人免费视频观看在线www | 亚洲成Av人片乱码色午夜| 免费无遮挡无遮羞在线看| 国产高清在线精品免费软件| 一级做a爰片久久毛片免费看| 亚洲真人日本在线|