免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1711 | 回复: 0
打印 上一主题 下一主题

Struts2+Spring+Hibernate In Action(一) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-23 14:09 |只看该作者 |倒序浏览

前言:
关于Struts2系列的文章网上基本上都有了,但鲜有比较系统的Demo。这几天朋友要我做了一个面试题,于是我用Struts2做了这个比较完整的Demo。
本程序用到的主要技术为:
Struts2,Spring,Hibernate,DWR,JavaMail,以及少部分正则表达式。其实都是非常基础简单的应用,目的就是让大家看看这些框架是如何协同工作的。开发平台为:Winxp2+JDK1.5+Tomcat5.5+MySQL5.0。

以下是本例子的需求:

每5分钟遍历一下页面(http://post.baidu.com/f?kw=%D2%EC%C8%CB%B0%C1%CA%C0%C2%BC),
请统计页面中"《"和"》"之间有多少个"异人"这两个字,
将这数值弹出一个alert并且发信给指定的邮件地址 获取页面内所有地方的以">"为标示的这个符号代表书名号,获取之中的内容 > 功能点:
1)URL抓取页面。
2)正则表达式匹配。
3)邮件系统调用 请注意设计思路和代码规范。


第一部分:
1.       设计实体
本程序共有四个实体:
User:用户基本信息,可用来登录本系统。
Article:存储每次通过正则从URL抓取的目标数据总数。
Log:邮件发送时的日志类。
Mail:邮件发送列表。

两个抽象实体,目的是为了承继。
PrimaryEntiry:承继主键(id)
CommonEntity:承继候选键(name)
实体之间的关系:
只有Log与Mai之间是多对一的关系。在看下面的Pojo类的时候需要注意一下,我这里用的是JPA,关系都写在Annotation里了。


以下是这几个实体详细信息:

PrimaryEntity.java
java 代码
/**   
* @author SuperLeo   
* @date 2007-6-15   
* @version 1.0   
* �实体类的父类,抽象出ID部分   
*/   
package com.leo.po;   
   
import javax.persistence.GeneratedValue;   
import javax.persistence.GenerationType;   
import javax.persistence.Id;   
import javax.persistence.MappedSuperclass;   
   
/**   
* @author SuperLeo   
*/   
@MappedSuperclass   
// 用来声明这个是父类,子类可以继承属   
public abstract class PrimaryEntity {   
   
    @Id   
    @GeneratedValue(strategy = GenerationType.AUTO)   
    private long id;   
   
    /**   
     * @return 返回id   
     */   
    public long getId() {   
        return id;   
    }   
   
    /**   
     * @param id   
     *            设置id   
     */   
    public void setId(long id) {   
        this.id = id;   
    }   
   
}   
CommonEntity.java
java 代码
/**   
* @author SuperLeo   
* @date 2006-6-15   
* @version 1.0   
* 名称抽象实体类   
*/   
package com.leo.po;   
   
import javax.persistence.Column;   
import javax.persistence.MappedSuperclass;   
   
/**   
* @author SuperLeo   
*   
*/   
@MappedSuperclass   
// 用来声明这个是父类,子类可以继承属性   
public abstract class CommonEntity extends PrimaryEntity {   
   
    @Column(name = "name")   
    private String name;   
   
    /**   
     * @return 返回名称   
     */   
    public String getName() {   
        return name;   
    }   
   
    /**   
     * @param name   
     *            设置名称   
     */   
    public void setName(String name) {   
        this.name = name;   
    }   
   
}   

Article.java
java 代码
/**   
* 存储每次抓取的数量   
*/   
package com.leo.po;   
   
import java.util.Date;   
   
import javax.persistence.Column;   
import javax.persistence.Entity;   
import javax.persistence.Table;   
   
/**   
* @author superleo   
*   
*/   
@Entity   
@Table(name = "tbl_article")   
public class Article extends PrimaryEntity {   
   
    /**   
     * 文章点击量   
     */   
    @Column(name = "count_size")   
    private int count;   
   
    /**   
     * 文章建立时间   
     */   
    @Column(name = "create_date")   
    private Date createDate;   
   
    public int getCount() {   
        return count;   
    }   
   
    public void setCount(int count) {   
        this.count = count;   
    }   
   
    public Date getCreateDate() {   
        return createDate;   
    }   
   
    public void setCreateDate(Date createDate) {   
        this.createDate = createDate;   
    }   
   
}   
Log.java
java 代码
/**   
* 邮件列表   
*/   
package com.leo.po;   
   
import java.util.Date;   
   
import javax.persistence.Column;   
import javax.persistence.Entity;   
import javax.persistence.JoinColumn;   
import javax.persistence.ManyToOne;   
import javax.persistence.Table;   
   
/**   
* @author superleo   
*   
*/   
   
@Entity   
@Table(name = "tbl_log")   
public class Log extends PrimaryEntity {   
   
    @Column(name = "log")   
    private String log;   
   
    @Column(name = "create_date")   
    private Date createDate;   
   
    @ManyToOne   
    @JoinColumn(name = "fk_mail_id")   
    private Mail mail;   
   
    public Mail getMail() {   
        return mail;   
    }   
   
    public void setMail(Mail mail) {   
        this.mail = mail;   
    }   
   
    public String getLog() {   
        return log;   
    }   
   
    public void setLog(String log) {   
        this.log = log;   
    }   
   
    public Date getCreateDate() {   
        return createDate;   
    }   
   
    public void setCreateDate(Date createDate) {   
        this.createDate = createDate;   
    }   
   
}   

Mail.java
java 代码
/**   
* 邮件列表   
*/   
package com.leo.po;   
   
import java.util.List;   
   
import javax.persistence.CascadeType;   
import javax.persistence.Column;   
import javax.persistence.Entity;   
import javax.persistence.OneToMany;   
import javax.persistence.Table;   
   
/**   
* @author superleo   
*   
*/   
   
@Entity   
@Table(name = "tbl_mail")   
public class Mail extends CommonEntity {   
   
    @Column(name = "email")   
    private String email;   
   
    @OneToMany(mappedBy = "mail", cascade = { CascadeType.ALL })   
    private List log;   
   
    public String getEmail() {   
        return email;   
    }   
   
    public void setEmail(String email) {   
        this.email = email;   
    }   
   
    public List getLog() {   
        return log;   
    }   
   
    public void setLog(List log) {   
        this.log = log;   
    }   
   
}   

User.java
java 代码
/**   
* @author SuperLeo   
* @date 2006-6-15   
* @version 1.0   
* 用户实体类   
*/   
package com.leo.po;   
   
import javax.persistence.Column;   
import javax.persistence.Entity;   
import javax.persistence.Table;   
   
/**   
* @author SuperLeo   
*   
*/   
   
@Entity   
@Table(name = "tbl_user")   
// 映射的表叫 person   
public class User extends CommonEntity {   
   
    @Column(name = "password")   
    private String password;   
   
    @Column(name = "email")   
    private String email;   
   
    /**   
     * @return 返回电子邮件   
     */   
    public String getEmail() {   
        return email;   
    }   
   
    /**   
     * @param email   
     *            设置电子邮件   
     */   
    public void setEmail(String email) {   
        this.email = email;   
    }   
   
    /**   
     * @return 返回用户密码   
     */   
    public String getPassword() {   
        return password;   
    }   
   
    /**   
     * @param passowd   
     *            设置用户密码   
     */   
    public void setPassword(String password) {   
        this.password = password;   
    }   
   
}   


2.     DAO与Service实现
正如大家所想,在Java世界里,DAO与Servcie的实现是大同小异的。这里我的例子足够小了,而且其实有了Hibernate就已经具备了DAO的能力,因些这里只有Service层的设计。
先定义一个父接口,把尽可能相同的事都在父类里面搞定:

IGenericService.java

java 代码
/**  
* @author SuperLeo  
* @date 2006-6-15  
* @version 1.0  
* Service层最顶层接口  
*/  
package com.leo.service;   
  
import java.io.Serializable;   
import java.util.List;   
  
import org.hibernate.Session;   
  
import com.leo.util.PageInfo;   
  
/**  
* @author superleo  
*   
*/  
public interface IGenericServiceextends Serializable> {   
  
    /**  
     * 保存实体  
     *   
     * @param t  
     */  
    public PK store(T t);   
  
    /**  
     * 加载单个实体  
     *   
     * @param className  
     * @param id  
     * @return  
     */  
    public T load(PK id);   
  
    /**  
     * 更新实体  
     *   
     * @param t  
     */  
    public void update(T t);   
  
    /**  
     * 删除实体  
     *   
     * @param t  
     */  
    public void delete(T t);   
  
    /**  
     * 分页计算总数  
     *   
     * @param session  
     * @param hql  
     * @return  
     * @throws Exception  
     */  
    public int getTotalCount(Session session, String hql) throws Exception;   
  
    /**  
     * 根据名称精确查找  
     *   
     * @param className  
     * @param name  
     * @return  
     */  
    public T findByNameExact(String name);   
  
    /**  
     * 根据名称模糊查找  
     *   
     * @param className  
     * @param name  
     * @return  
     */  
    List findByName(String name, PageInfo pageInfo) throws Exception;   
  
    /**  
     * 查找所有记录  
     *   
     * @param hql  
     * @param pageInfo  
     * @return  
     * @throws Exception  
     */  
    List findByAll(final String hql, PageInfo pageInfo) throws Exception;   
  
    /**  
     * 查找所有记录  
     *   
     * @param hql  
     * @param pageInfo  
     * @return  
     * @throws Exception  
     */  
    List findByAll() throws Exception;   
  
    /**  
     * 删除全部  
     *   
     * @param hql  
     * @return  
     * @throws Exception  
     */  
    public List deleteByAll(final String hql) throws Exception;   
}   
以及它的实现



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/55983/showart_1333316.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP