Struts2+Spring+Hibernate In Action(一) 博客分类: Struts2 HibernateSpringJava正则表达式SQL
程序员文章站
2024-02-19 21:12:52
...
前言:
关于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></log> log;
- public String getEmail() {
- return email;
- }
- public void setEmail(String email) {
- this.email = email;
- }
- public List<log></log> getLog() {
- return log;
- }
- public void setLog(List<log></log> 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<t></t> findByName(String name, PageInfo pageInfo) throws Exception;
- /**
- * 查找所有记录
- *
- * @param hql
- * @param pageInfo
- * @return
- * @throws Exception
- */
- List<t></t> findByAll(final String hql, PageInfo pageInfo) throws Exception;
- /**
- * 查找所有记录
- *
- * @param hql
- * @param pageInfo
- * @return
- * @throws Exception
- */
- List<t></t> findByAll() throws Exception;
- /**
- * 删除全部
- *
- * @param hql
- * @return
- * @throws Exception
- */
- public List<t></t> deleteByAll(final String hql) throws Exception;
- }
以及它的实现
推荐阅读
-
Struts2+Spring+Hibernate In Action(一) 博客分类: Struts2 HibernateSpringJava正则表达式SQL
-
Struts2+Spring+Hibernate In Action(三) 博客分类: Struts2 SpringHibernateStrutsXMLJSP
-
Struts2+Spring+Hibernate In Action(二) 博客分类: Struts2 SpringHibernateBeanJDBCMySQL
-
Struts2+Spring+Hibernate In Action(四) 博客分类: Struts2 SpringHibernateDWRServlet正则表达式