- 浏览: 639851 次
- 性别:
- 来自: 北京
最新评论
-
2047699523:
java hibernate demo使用实例教程源代码下载: ...
hibernate延迟加载的原理与实现 -
在世界的中心呼喚愛:
hantsy 写道这种lazy的解释只对了一半,按java p ...
hibernate延迟加载的原理与实现 -
moguicy:
看了下时间,不是楼主是否还在开发
【翻译】Wicket启示录——理论与实践(一) -
xfan0828:
"最后但并不是最不重要的一点就是" BZ, ...
【翻译】深入浅出 EJB3.1(上) -
doudou87323:
十分感谢,正在学习中,受益匪浅
【翻译】深入浅出 EJB3.1(上)
前言:
关于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;
- }
以及它的实现
- lib.part2.rar (4.8 MB)
- 描述: 源代码所需要的Jar.part2
- 下载次数: 6929
- lib.part1.rar (4.8 MB)
- 描述: 源代码所需要的Jar.part1
- 下载次数: 6172
- 源代码.rar (1.6 MB)
- 描述: 项目源代码+MYSQL 脚本 + 所需要的jar.part3
- 下载次数: 8427
评论
11 楼
kingcxw
2008-08-05
学习~~~~~~~~~~~~~~~~~
10 楼
depravedangel
2008-08-04
备注一下,以后慢慢看
9 楼
gongchangming
2008-07-05
照片是本人吗~!好漂亮啊~!
8 楼
xtwcw
2008-05-19
谢谢 学习中
7 楼
kingpeixin
2008-01-14
灰熊不错的说,继续跟踪学习
6 楼
ken1984
2008-01-10
正则,说实话,在几年前用PHP的时候曾经使用非常频繁,而且写正则感觉很有成就感,呵呵,实际上对使用的人来说就一些标记而已,如果只是记那些东西,对一个人的技术能力没有太大关系。
5 楼
andyjames
2008-01-09
非常感谢。向你学习
4 楼
huhaitao
2007-11-19
org.springframework.mail.MailSendException; nested exception details (1) are:
Failed message 1:
com.sun.mail.smtp.SMTPSendFailedException: 553 You are not authorized to send mail, authentication is required
at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1275)
at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:895)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:524)
at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:391)
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:300)
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:286)
at com.leo.util.JavaMailSenderUtil.sendMail(JavaMailSenderUtil.java:45)
at com.leo.service.impl.ArticleServiceImpl.storeByURL(ArticleServiceImpl.java:79)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:281)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:199)
at $Proxy18.storeByURL(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.directwebremoting.impl.ExecuteAjaxFilter.doFilter(ExecuteAjaxFilter.java:34)
at org.directwebremoting.impl.DefaultRemoter$1.doFilter(DefaultRemoter.java:428)
at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:431)
at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:283)
at org.directwebremoting.servlet.PlainCallHandler.handle(PlainCallHandler.java:52)
at org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:101)
at org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:146)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:413)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:78)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
at java.lang.Thread.run(Thread.java:595)
帮忙看一下这是什么问题?谢谢!
Failed message 1:
com.sun.mail.smtp.SMTPSendFailedException: 553 You are not authorized to send mail, authentication is required
at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1275)
at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:895)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:524)
at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:391)
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:300)
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:286)
at com.leo.util.JavaMailSenderUtil.sendMail(JavaMailSenderUtil.java:45)
at com.leo.service.impl.ArticleServiceImpl.storeByURL(ArticleServiceImpl.java:79)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:281)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:199)
at $Proxy18.storeByURL(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.directwebremoting.impl.ExecuteAjaxFilter.doFilter(ExecuteAjaxFilter.java:34)
at org.directwebremoting.impl.DefaultRemoter$1.doFilter(DefaultRemoter.java:428)
at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:431)
at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:283)
at org.directwebremoting.servlet.PlainCallHandler.handle(PlainCallHandler.java:52)
at org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:101)
at org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:146)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:413)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:78)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
at java.lang.Thread.run(Thread.java:595)
帮忙看一下这是什么问题?谢谢!
3 楼
kyo100900
2007-11-01
如果下载了原代码需要修改两个地方:
1.src下的leo.conf文件,里面改你数据用户,密码,以及你的邮件服务器,还有账号和密码
2.数据库表tbl_mail里的邮件改成你自己的邮件,这样项目运行后,你才知道你到底有没有收到信。
1.src下的leo.conf文件,里面改你数据用户,密码,以及你的邮件服务器,还有账号和密码
2.数据库表tbl_mail里的邮件改成你自己的邮件,这样项目运行后,你才知道你到底有没有收到信。
2 楼
kyo100900
2007-11-01
其它的Service只需要继承它了,就可以很方便的使用了,要编码的地方不是特别的多了。Javaeye Blog总出问题,只能这样发给大家看了,详细的代码会提交上来的。下面在第二篇来讲讲Spring的配置。
1 楼
kyo100900
2007-11-01
GenericServiceImpl.java
/**
* 顶层父类
*/
package com.leo.service.impl;
import java.io.Serializable;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.transaction.annotation.Transactional;
import com.leo.service.IGenericService;
import com.leo.util.PageInfo;
/**
* @author superleo
*
*/
public class GenericServiceImpl<T, PK extends Serializable> implements
IGenericService<T, PK> {
private Class<T> type;
private HibernateTemplate hibernateTemplate;
public GenericServiceImpl(Class<T> type) {
this.type = type;
}
@Transactional
public void delete(T t) {
hibernateTemplate.delete(t);
}
public T load(PK id) {
return (T) hibernateTemplate.get(type, id);
}
@Transactional
public PK store(T t) {
return (PK) hibernateTemplate.save(t);
}
@Transactional
public void update(T t) {
hibernateTemplate.update(t);
}
public T findByNameExact(String name) {
List<T> list = this.getHibernateTemplate().find(
"from " + type.getName() + " e where e.name = ? ", name);
return list != null && list.size() == 1 ? list.get(0) : null;
}
public List<T> findByName(String name, PageInfo pageInfo) throws Exception {
String hql = "from " + type.getName() + " e where e.name like '%"
+ name + "%' ";
return this.findByAll(hql, pageInfo);
}
public List<T> findByAll() throws Exception {
String hql = "from " + type.getName() + " e";
System.out.println(hql);
return this.getHibernateTemplate().find(hql);
}
public List<T> findByAll(final String hql, PageInfo pageInfo)
throws Exception {
List<T> pagelist = null;
Session session = this.getHibernateTemplate().getSessionFactory()
.openSession();
pageInfo.setRecordCount(this.getTotalCount(session, hql));
Query query = session.createQuery(hql);
int start = (pageInfo.getPage() - 1) * pageInfo.getPageSize();
int rowNum = pageInfo.getPageSize();
query.setFirstResult(start);
query.setMaxResults(rowNum);
pagelist = query.list();
return pagelist;
}
public List<T> deleteByAll(final String hql) throws Exception {
List<T> pagelist = null;
Session session = this.getHibernateTemplate().getSessionFactory()
.openSession();
Query query = session.createQuery(hql);
query.executeUpdate();
return pagelist;
}
// 取得总数
public int getTotalCount(Session session, String hql) throws Exception {
Integer amount = new Integer(0);
int sql_from = hql.indexOf("from");
int sql_orderby = hql.indexOf("order by");// 为了改进
String countStr = "";
if (sql_orderby > 0) {
countStr = "select count(*) "
+ hql.substring(sql_from, sql_orderby);
} else
countStr = "select count(*) " + hql.substring(sql_from);
Query query = session.createQuery(countStr);
if (!query.list().isEmpty()) {
amount = new Integer(query.list().get(0).toString());
} else
return 0;
return amount.intValue();
}
public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
}
/**
* 顶层父类
*/
package com.leo.service.impl;
import java.io.Serializable;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.transaction.annotation.Transactional;
import com.leo.service.IGenericService;
import com.leo.util.PageInfo;
/**
* @author superleo
*
*/
public class GenericServiceImpl<T, PK extends Serializable> implements
IGenericService<T, PK> {
private Class<T> type;
private HibernateTemplate hibernateTemplate;
public GenericServiceImpl(Class<T> type) {
this.type = type;
}
@Transactional
public void delete(T t) {
hibernateTemplate.delete(t);
}
public T load(PK id) {
return (T) hibernateTemplate.get(type, id);
}
@Transactional
public PK store(T t) {
return (PK) hibernateTemplate.save(t);
}
@Transactional
public void update(T t) {
hibernateTemplate.update(t);
}
public T findByNameExact(String name) {
List<T> list = this.getHibernateTemplate().find(
"from " + type.getName() + " e where e.name = ? ", name);
return list != null && list.size() == 1 ? list.get(0) : null;
}
public List<T> findByName(String name, PageInfo pageInfo) throws Exception {
String hql = "from " + type.getName() + " e where e.name like '%"
+ name + "%' ";
return this.findByAll(hql, pageInfo);
}
public List<T> findByAll() throws Exception {
String hql = "from " + type.getName() + " e";
System.out.println(hql);
return this.getHibernateTemplate().find(hql);
}
public List<T> findByAll(final String hql, PageInfo pageInfo)
throws Exception {
List<T> pagelist = null;
Session session = this.getHibernateTemplate().getSessionFactory()
.openSession();
pageInfo.setRecordCount(this.getTotalCount(session, hql));
Query query = session.createQuery(hql);
int start = (pageInfo.getPage() - 1) * pageInfo.getPageSize();
int rowNum = pageInfo.getPageSize();
query.setFirstResult(start);
query.setMaxResults(rowNum);
pagelist = query.list();
return pagelist;
}
public List<T> deleteByAll(final String hql) throws Exception {
List<T> pagelist = null;
Session session = this.getHibernateTemplate().getSessionFactory()
.openSession();
Query query = session.createQuery(hql);
query.executeUpdate();
return pagelist;
}
// 取得总数
public int getTotalCount(Session session, String hql) throws Exception {
Integer amount = new Integer(0);
int sql_from = hql.indexOf("from");
int sql_orderby = hql.indexOf("order by");// 为了改进
String countStr = "";
if (sql_orderby > 0) {
countStr = "select count(*) "
+ hql.substring(sql_from, sql_orderby);
} else
countStr = "select count(*) " + hql.substring(sql_from);
Query query = session.createQuery(countStr);
if (!query.list().isEmpty()) {
amount = new Integer(query.list().get(0).toString());
} else
return 0;
return amount.intValue();
}
public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
}
发表评论
-
自己动手写一个Struts2
2008-08-14 00:10 15359使用Struts2或webwork2有一段时间了,想把Stru ... -
Struts2(Webwork2)一些实战开发技巧
2008-06-02 21:18 5866一. 使用反射动态取出 Pojo 的属性 这一招在 ... -
Struts2的第一个入门实例(三)--Struts2与Guice整合
2008-02-15 14:29 9097Guice可真轻啊,所需的3个Jar包才不到600k。但缺点就 ... -
Struts2,Webwork2关于使用FCKeditor,richtexteditor 的解决方法
2008-01-31 00:18 4439一 Webwork2 + FCkeditor 这个问题由来 ... -
Struts2所有插件简介--目前到达40余种
2008-01-26 17:06 10848今天无意查看了Struts2的插件时,发现已经林林总总有40个 ... -
Struts2的第一个入门实例(二)--什么是code-behind
2008-01-13 19:26 8819Struts2的Code-behind究竟是什么?ROR那样的 ... -
Struts2.0.11在Tomcat5.5, Jetty 以及 Weblogic10等运行的不同
2008-01-06 22:53 5882终于有时间玩玩最新版本的Struts2.0.11了, 与上一个 ... -
struts2 奇怪的Action警告
2008-01-06 21:20 13102不知道大家有没有遇到在使用表单的时候,有时候会出一个莫名其妙的 ... -
经验不足,差一点重构整个系统
2007-12-30 19:36 4039呵呵,很久没有来JavaEye写文章了,公司工作也 ... -
Struts2+Spring+Hibernate In Action(四)
2007-11-01 01:43 5502第二部分: 1.DWR的配置: DWR是Java一个比较常用的 ... -
Struts2+Spring+Hibernate In Action(三)
2007-11-01 00:43 60333. Controller配置: Struts2的 ... -
Struts2+Spring+Hibernate In Action(二)
2007-11-01 00:30 6128当所有的Service配置好了,可以当他们统统配置在Sprin ... -
原来是Struts2.0的一个Bug
2007-10-27 23:00 5612开始使用的是Struts2.06版本。在配置Struts.xm ... -
Struts2需要注意的一个小地方
2007-10-22 17:49 16000今天在运行Struts2时,无意间发现程序在写Struts.x ... -
Struts2的第一个入门实例(一)
2007-09-29 14:12 21082Struts2有自己的圈子了,我也写一个Struts2的 ... -
Struts2在路上2。。。。。。
2007-09-14 16:16 44232.关于关闭Struts2自动验证的烦人英文问题。 应该有不少 ... -
Struts2在路上。。。。。。
2007-09-12 14:25 54981.Struts2强大,但也有很多需要解决的问题。就拿我现在这 ...
相关推荐
2. **配置文件**:struts-config.xml定义Struts的配置,spring-beans.xml管理Spring的bean,hibernate.cfg.xml配置Hibernate的数据库连接,可能还有实体类的映射文件(hbm.xml或使用注解)。 3. **JSP页面**:展示...
总的来说,这个"struts2+spring2.5+hibernate3.2整合完整项目"提供了一个完整的开发实例,涵盖了前端到后端,以及数据库的各个环节。对于学习者而言,可以深入理解这三大框架的协同工作,提升Java Web开发技能。而...
在 Struts2+Spring+Hibernate 框架中,对 Action 的单元测试环境的搭建是一个非常重要的步骤。本文将详细介绍如何在 Struts2+Spring+Hibernate 框架中搭建 Action 的单元测试环境。 首先,需要了解为什么需要对 ...
总的来说,"最新项目系统:Struts2+Spring4+Hibernate4三大框架整合"为学习和实践Java Web开发提供了一个实用的平台,对于提升开发者的技术水平和项目经验具有极大的帮助。通过深入研究和实践,开发者可以掌握Java ...
Struts2、Spring4和Hibernate5是Java Web开发中的三个重要框架,它们分别负责MVC模式中的动作控制、依赖注入和持久化管理。这三者的整合可以构建出高效、稳定且易于维护的企业级应用。 **Struts2** 是一个基于MVC...
Struts2、Spring4和Hibernate是Java开发中的三大框架,它们在构建企业级Web应用程序时起着核心作用。本教程将深入探讨这三个框架如何协同工作,以实现高效、灵活和可扩展的电子商务平台。 首先,Struts2是一个基于...
总之,《轻量级Java EE企业应用实战(第4版)》是一本针对Java EE开发者的实用指南,通过深入浅出地讲解Struts 2、Spring 4和Hibernate的整合,有助于提升开发者在企业级应用开发中的技能和效率。配合光盘中的源码,...
Struts2+Spring+Hibernate和Struts2+Spring+Ibatis是两种常见的Java Web应用程序集成框架,它们分别基于ORM框架Hibernate和轻量级数据访问框架Ibatis。这两种框架结合Spring,旨在提供一个强大的、可扩展的、易于...
同时,通过插件(如Spring插件)将Struts2与Spring集成,实现Action的自动注入。 5. 整合Spring和Hibernate:在Action类中,可以声明由Spring管理的Service层对象,这些对象再调用由Hibernate管理的数据访问层对象...
6. **文件结构**:尽管没有提供具体的文件列表,但一个标准的Struts2+Spring2+Hibernate3项目通常包含以下部分:源代码(src目录),配置文件(如struts.xml、spring配置文件、hibernate配置文件),Web资源(Web-...
Struts2、Spring3和Hibernate4是Java Web开发中的三个核心框架,它们分别负责MVC(Model-View-Controller)架构中的控制层、业务层和服务层。本示例结合这三个框架,提供了一种完整的三层架构实现,以提高开发效率和...
Struts2是一个基于MVC设计模式的Web应用框架,Spring2.5则是一个全面的企业级应用框架,提供了依赖注入(DI)和面向切面编程(AOP)等功能,而Hibernate3.3是一个持久化框架,负责对象关系映射(ORM)。 在这个整合...
Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们的整合应用广泛用于构建复杂的Web应用程序,如本例中的图书馆管理系统。这个系统实现了用户登录和注册功能,并且提供了对书籍表的操作,包括增、删、改...
总结来说,这个“Struts2+Spring3+Hibernate4零配置所需全部jar包”是一个为了简化Java Web开发过程而准备的工具包,包含了这三个框架的基本运行环境。通过使用这个工具包,开发者可以快速搭建起一个功能完备的Web...
Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们的整合应用极大地提升了开发效率和项目的可维护性。在本示例中,我们将探讨如何将这三个框架集成在一起,实现一个完整的MVC(模型-视图-控制器)架构。 ...
Struts1、Spring2和Hibernate2是Java Web开发中的三个重要框架,它们分别负责MVC模式中的表现层、业务层和服务层。这个整合例子旨在展示如何将这三个框架协同工作,以构建一个完整的Java Web应用程序。 Struts1是...
Struts2、Spring3和Hibernate4是Java Web开发中的三个核心框架,它们分别负责MVC模式中的动作控制、依赖注入和服务层管理以及持久化层的数据操作。这篇博客文章结合这三个框架,探讨了如何构建一个完整的Java Web...
其中,Struts2、Spring与Hibernate作为经典的“SSH”组合(Struts-Spring-Hibernate),在Java Web开发领域占据着重要的地位。本文旨在通过一个简单的登录示例项目,详细介绍如何在Netbeans IDE环境下构建基于Struts...
Struts2+Spring3+Hibernate4+Maven+EasyUI 是一个常见的Java Web开发组合,它们各自扮演着关键的角色,构建了一个高效、模块化的应用程序架构。这个组合在企业级应用中广泛使用,尤其是在数据管理、业务逻辑处理和...
总的来说,这个"Struts2+Spring2+Hibernate3注册查询搜索分页实例"是一个很好的学习资源,涵盖了Java Web开发中的基础和核心部分。通过学习这个实例,开发者不仅可以掌握三大框架的基本用法,还能了解到如何将它们...