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

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

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

    Topquan's Blog

    分享價(jià)值----成就你我----我的博客----你的家

    Struts+Spring+Hibernate組合使用

    本文是開發(fā)基于 spring web 應(yīng)用的入門文章,前端采用 Struts MVC 框架,中間層采用 spring ,后臺(tái)采用 Hibernate
      
      本文包含以下內(nèi)容:
      
       · 配置 Hibernate 和事務(wù)
      
       · 裝載 Spring applicationContext.xml 文件
      
       · 建立業(yè)務(wù)層和 DAO 之間的依賴關(guān)系
      
       · Spring 應(yīng)用到 Struts
      
      簡(jiǎn)介
      
      這個(gè)例子是建立一個(gè)簡(jiǎn)單的 web 應(yīng)用,叫 MyUsers, 完成用戶管理操作,包含簡(jiǎn)單的 數(shù)據(jù)庫 增,刪,查,該即 CRUD (新建,訪問,更新,刪除)操作 這是一個(gè)三層的 web 應(yīng)用,通過 Action Struts )訪問業(yè)務(wù)層,業(yè)務(wù)層訪問 DAO 圖一簡(jiǎn)要說明了該應(yīng)用的總體結(jié)構(gòu) 圖上的數(shù)字說明了流程順序-從 web UserAction )到中間層( UserManager ),再到數(shù)據(jù)訪問層( UserDAO ),然后將結(jié)果返回
      
       Spring 層的真正強(qiáng)大在于它的聲明型事務(wù)處理,幫定和對(duì)持久層支持(例如 Hiberate iBATIS
      
      以下下是完成這個(gè)例子的步驟:
      
       1 安裝 Eclipse 插件
      
       2 數(shù)據(jù)庫 建表
      
       3 配置 Hibernate Spring
      
       4 建立 Hibernate DAO 接口的實(shí)現(xiàn)類
      
       5 運(yùn)行測(cè)試類,測(cè)試 DAO CRUD 操作
      
       6 創(chuàng)建一個(gè)處理類,聲明事務(wù)
      
       7 創(chuàng)建 web 層的 Action model
      
       8 運(yùn)行 Action 的測(cè)試類測(cè)試 CRUD 操作
      
       9 創(chuàng)建 jsp 文件通過瀏覽器進(jìn)行 CRUD 操作
      
       10 通過瀏覽器校驗(yàn) jsp
      
      安裝 eclipse 插件
      
       1 Hibernate 插件 http://www.binamics.com/hibernatesync
      
       2 Spring 插件 http://springframework.sourceforge.net/spring-ide/eclipse/updatesite/
      
       3 MyEclipse 插件 ( 破解版 )
      
       4 Tomcat 插件 . tanghan
      
       5 其他插件包括 xml jsp
      
       數(shù)據(jù)庫 建表
      
       create table app_user(id number not null primary,firstname vchar(32),lastname vchar(32));
      
      新建項(xiàng)目
      
      新建一個(gè) web project ,新建后的目錄結(jié)構(gòu)同時(shí)包含了新建文件夾 page 用于放 jsp 文件,和源文件夾 test 用于放 junit 測(cè)試文件 同時(shí)將用到的包,包括 struts hibernate spring 都導(dǎo)入到 lib 目錄下
      
      創(chuàng)建持久層 O/R mapping/ 小新技術(shù)網(wǎng) www.xker.com
      
       1 src/com.jandar.model 下用 hibernate 插件從 數(shù)據(jù)庫 導(dǎo)出 app_user .hbm.xml 文件改名為 User.hbm.xml
      
      < ?xml version="1.0"?
      < !DOCTYPE hibernate-mapping PUBLIC
       "-//Hibernate/Hibernate Mapping DTD//EN"
       "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"
      < hibernate-mapping package="com.jandar.model"
      < class name="User" table="APP_USER"
      < id
       column="ID"
       name="id"
       type="integer"
      >
      
      < generator class="assigned" /
      
      < /id
      
      < property
       column="LASTNAME"
       length="10"
       name="lastname"
       not-null="false"
       type="string"
       /
      
      < property
       column="FIRSTNAME"
       length="10"
       name="firstname"
       not-null="true"
       type="string"
       /
      
      < /class
      < /hibernate-mapping
      
       2 通過 hibernate synchronizer- synchronizer file 生成 User.java 文件 ,User 對(duì)象對(duì)應(yīng)于 數(shù)據(jù)庫 中的 app_user

    注:在 eclipse 下自動(dòng)生成的對(duì)象文件不完全相同,相同的是每個(gè)對(duì)象文件必須實(shí)現(xiàn) Serializable 接口,必需又 toString hashCode 方法;
      
       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);
       }
       }
      
       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;
       }
      
       /**
       * @return Returns the firstName.
       */
      
       public String getFirstName() {
       return firstName;
       }
      
       /**
       * @param firstName The firstName to set.
       */
      
       public void setFirstName(String firstName) {
       this.firstName = firstName;
       }
      
       /**
       * @return Returns the lastName.
       */
      
       public String getLastName() {
       return lastName;
       }
      
       /**
       * @param lastName The lastName to set.
       */
      
       public void setLastName(String lastName) {
       this.lastName = lastName;
       }
       }
      
      創(chuàng)建 DAO 訪問對(duì)象
      
       1 src/com.jandar.service.dao 新建 IDAO.java 接口,所有的 DAO 都繼承該接口
      
       package com.jandar.services.dao;
      
       public interface IDAO
      
       2 src/com.jandar.service.dao 下新建 IUserDAO.java 接口
      
       public interface IUserDAO extends DAO {
       List getUsers();
       User getUser(Integer userid);
       void saveUser(User user);
       void removeUser(Integer id);
       }
      該接口提供了訪問對(duì)象的方法,
      
       3 src/com.jandar.service.dao.hibernate 下新建 UserDAOHiberante.java
      
       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 自動(dòng)生成方法存根
       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);
       }
       }
       }
      在這個(gè)類中實(shí)現(xiàn)了 IUserDAO 接口的方法,并且繼承了 HibernateDAOSupport 類。這個(gè)類的作用是通過 hibernate 訪問、操作對(duì)象,進(jìn)而實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的操作。

    posted on 2006-05-08 22:46 topquan 閱讀(510) 評(píng)論(0)  編輯  收藏 所屬分類: Spring

    主站蜘蛛池模板: 中文字幕视频免费| 亚洲成人免费电影| 免费福利视频导航| 国产一区二区三区免费在线观看| 中文字幕在亚洲第一在线| 99亚洲精品高清一二区| 亚洲精品自偷自拍无码| 两性色午夜视频免费网| 免费电视剧在线观看| 亚洲午夜久久久久久久久久| 最新亚洲精品国偷自产在线 | 在线观看免费亚洲| a在线观看免费视频| 女人18毛片特级一级免费视频| 亚洲精品中文字幕乱码三区| 亚洲中文字幕无码亚洲成A人片| 青柠影视在线观看免费| 免费看大美女大黄大色| 亚洲欧洲日产国码久在线观看| 福利片免费一区二区三区| 国产精品免费观看| 久久亚洲高清综合| 亚洲国产精品无码久久久秋霞1| 日韩免费的视频在线观看香蕉| 免费人妻av无码专区| 456亚洲人成在线播放网站| 99久久国产精品免费一区二区 | 亚洲AV无码精品蜜桃| 99久久成人国产精品免费| 日韩成人免费aa在线看| 亚洲色图校园春色| 国产一级婬片A视频免费观看| 日本免费v片一二三区| 亚洲另类视频在线观看| 国产免费AV片在线观看 | 亚洲无av在线中文字幕| 亚洲精品乱码久久久久久蜜桃图片| 人妻无码一区二区三区免费 | 国产综合亚洲专区在线| 亚洲AV色无码乱码在线观看| 亚洲一区二区三区免费在线观看|