- 浏览: 113590 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (37)
- Thinking of Web (2)
- Thinking of Java (1)
- Thinking of PHP (4)
- Thinking of Flex (1)
- Thinking of Mysql (9)
- Thinking of JSP (2)
- Thinking of Struts2 (1)
- Thinking of Hibernate (4)
- Thinking of Spring (5)
- Thinking of others (1)
- Thinking of JS (1)
- Thinking of Ruby (0)
- Thinking of Ajax (0)
- Study Ubuntu (4)
- Thinking of Android (1)
最新评论
-
my没有:
...
dip, dp, px, sp区别 -
wei_cao:
谢谢,不错!
dip, dp, px, sp区别 -
蓝月儿:
好全 啊 呵呵呵 值得收藏
dip, dp, px, sp区别 -
w2gavin:
非常实用的东西,但是很难找到验证的机会啊...感谢分享了
SQL优化之建立索引二 -
sifutian:
tiankang 写道
你这是属于使用问题啊!开发过程准备不足 ...
hibernate缺包错误及解决办法
编写Spring+Hibernate框架下的应用,总是离不了编写一个通用的泛型GenericHibernateDao。查阅了网上不少的GenericHibernateDao实现,归纳整理为如下实现,供后续编码参考。
GenericDao.java:
import java.io.Serializable;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.LockMode;
import org.hibernate.criterion.DetachedCriteria;
/**
*
* @author lny
*/
public interface GenericDao < T extends Serializable, PK extends Serializable >
{
// -------------------- 基本检索、增加、修改、删除操作 --------------------
// 根据主键获取实体。如果没有相应的实体,返回 null。
public T get(PK id);
// 根据主键获取实体并加锁。如果没有相应的实体,返回 null。
public T getWithLock(PK id, LockMode lock);
// 根据主键获取实体。如果没有相应的实体,抛出异常。
public T load(PK id);
// 根据主键获取实体并加锁。如果没有相应的实体,抛出异常。
public T loadWithLock(PK id, LockMode lock);
// 获取全部实体。
public List < T > loadAll();
// loadAllWithLock() ?
// 更新实体
public void update(T entity);
// 更新实体并加锁
public void updateWithLock(T entity, LockMode lock);
// 存储实体到数据库
public void save(T entity);
// saveWithLock()
// 增加或更新实体
public void saveOrUpdate(T entity);
// 增加或更新集合中的全部实体
public void saveOrUpdateAll(Collection < T > entities);
// 删除指定的实体
public void delete(T entity);
// 加锁并删除指定的实体
public void deleteWithLock(T entity, LockMode lock);
// 根据主键删除指定实体
public void deleteByKey(PK id);
// 根据主键加锁并删除指定的实体
public void deleteByKeyWithLock(PK id, LockMode lock);
// 删除集合中的全部实体
public void deleteAll(Collection < T > entities);
// -------------------- HSQL ----------------------------------------------
// 使用HSQL语句直接增加、更新、删除实体
public int bulkUpdate(String queryString);
// 使用带参数的HSQL语句增加、更新、删除实体
public int bulkUpdate(String queryString, Object[] values);
// 使用HSQL语句检索数据
public List find(String queryString);
// 使用带参数的HSQL语句检索数据
public List find(String queryString, Object[] values);
// 使用带命名的参数的HSQL语句检索数据
public List findByNamedParam(String queryString, String[] paramNames, Object[] values);
// 使用命名的HSQL语句检索数据
public List findByNamedQuery(String queryName);
// 使用带参数的命名HSQL语句检索数据
public List findByNamedQuery(String queryName, Object[] values);
// 使用带命名参数的命名HSQL语句检索数据
public List findByNamedQueryAndNamedParam(String queryName, String[] paramNames, Object[] values);
// 使用HSQL语句检索数据,返回 Iterator
public Iterator iterate(String queryString);
// 使用带参数HSQL语句检索数据,返回 Iterator
public Iterator iterate(String queryString, Object[] values);
// 关闭检索返回的 Iterator
public void closeIterator(Iterator it);
// -------------------------------- Criteria ------------------------------
// 创建与会话无关的检索标准对象
public DetachedCriteria createDetachedCriteria();
// 创建与会话绑定的检索标准对象
public Criteria createCriteria();
// 使用指定的检索标准检索数据
public List findByCriteria(DetachedCriteria criteria);
// 使用指定的检索标准检索数据,返回部分记录
public List findByCriteria(DetachedCriteria criteria, int firstResult, int maxResults);
// 使用指定的实体及属性检索(满足除主键外属性=实体值)数据
public List < T > findEqualByEntity(T entity, String [] propertyNames);
// 使用指定的实体及属性(非主键)检索(满足属性 like 串实体值)数据
public List < T > findLikeByEntity(T entity, String [] propertyNames);
// 使用指定的检索标准检索数据,返回指定范围的记录
public Integer getRowCount(DetachedCriteria criteria);
// 使用指定的检索标准检索数据,返回指定统计值
public Object getStatValue(DetachedCriteria criteria, String propertyName, String StatName);
// -------------------------------- Others --------------------------------
// 加锁指定的实体
public void lock(T entity, LockMode lockMode);
// 强制初始化指定的实体
public void initialize(Object proxy);
// 强制立即更新缓冲数据到数据库(否则仅在事务提交时才更新)
public void flush();
}
GenericHibernateDao.java
package
dao;
import
java.io.Serializable;
import
java.lang.reflect.ParameterizedType;
import
java.lang.reflect.Type;
import
java.util.Collection;
import
java.util.Iterator;
import
java.util.List;
import
org.apache.commons.beanutils.PropertyUtils;
import
org.hibernate.Criteria;
import
org.hibernate.LockMode;
import
org.hibernate.criterion.DetachedCriteria;
import
org.hibernate.criterion.Example;
import
org.hibernate.criterion.MatchMode;
import
org.hibernate.criterion.Order;
import
org.hibernate.criterion.Projections;
import
org.hibernate.criterion.Restrictions;
import
org.springframework.orm.hibernate3.support.HibernateDaoSupport;
/**
* GenericHibernateDao 继承 HibernateDao,简单封装 HibernateTemplate 各项功能,
* 简化基于Hibernate Dao 的编写。
*
*
@author
lny
*/
@SuppressWarnings(
"
unchecked
"
)
public
class
GenericHibernateDao
<
T
extends
Serializable, PK
extends
Serializable
>
extends
HibernateDaoSupport
implements
GenericDao
<
T, PK
>
{
//
实体类类型(由构造方法自动赋值)
private
Class
<
T
>
entityClass;
//
构造方法,根据实例类自动获取实体类类型
public
GenericHibernateDao()
{
this
.entityClass
=
null
;
Class c
=
getClass();
Type t
=
c.getGenericSuperclass();
if
(t
instanceof
ParameterizedType)
{
Type[] p
=
((ParameterizedType) t).getActualTypeArguments();
this
.entityClass
=
(Class
<
T
>
) p[
0
];
}
}
//
-------------------- 基本检索、增加、修改、删除操作 --------------------
//
根据主键获取实体。如果没有相应的实体,返回 null。
public
T get(PK id)
{
return
(T) getHibernateTemplate().get(entityClass, id);
}
//
根据主键获取实体并加锁。如果没有相应的实体,返回 null。
public
T getWithLock(PK id, LockMode lock)
{
T t
=
(T) getHibernateTemplate().get(entityClass, id, lock);
if
(t
!=
null
)
{
this
.flush();
//
立即刷新,否则锁不会生效。
}
return
t;
}
//
根据主键获取实体。如果没有相应的实体,抛出异常。
public
T load(PK id)
{
return
(T) getHibernateTemplate().load(entityClass, id);
}
//
根据主键获取实体并加锁。如果没有相应的实体,抛出异常。
public
T loadWithLock(PK id, LockMode lock)
{
T t
=
(T) getHibernateTemplate().load(entityClass, id, lock);
if
(t
!=
null
)
{
this
.flush();
//
立即刷新,否则锁不会生效。
}
return
t;
}
//
获取全部实体。
public
List
<
T
>
loadAll()
{
return
(List
<
T
>
) getHibernateTemplate().loadAll(entityClass);
}
//
loadAllWithLock() ?
//
更新实体
public
void
update(T entity)
{
getHibernateTemplate().update(entity);
}
//
更新实体并加锁
public
void
updateWithLock(T entity, LockMode lock)
{
getHibernateTemplate().update(entity, lock);
this
.flush();
//
立即刷新,否则锁不会生效。
}
//
存储实体到数据库
public
void
save(T entity)
{
getHibernateTemplate().save(entity);
}
//
saveWithLock()?
//
增加或更新实体
public
void
saveOrUpdate(T entity)
{
getHibernateTemplate().saveOrUpdate(entity);
}
//
增加或更新集合中的全部实体
public
void
saveOrUpdateAll(Collection
<
T
>
entities)
{
getHibernateTemplate().saveOrUpdateAll(entities);
}
//
删除指定的实体
public
void
delete(T entity)
{
getHibernateTemplate().delete(entity);
}
//
加锁并删除指定的实体
public
void
deleteWithLock(T entity, LockMode lock)
{
getHibernateTemplate().delete(entity, lock);
this
.flush();
//
立即刷新,否则锁不会生效。
}
//
根据主键删除指定实体
public
void
deleteByKey(PK id)
{
this
.delete(
this
.load(id));
}
//
根据主键加锁并删除指定的实体
public
void
deleteByKeyWithLock(PK id, LockMode lock)
{
this
.deleteWithLock(
this
.load(id), lock);
}
//
删除集合中的全部实体
public
void
deleteAll(Collection
<
T
>
entities)
{
getHibernateTemplate().deleteAll(entities);
}
//
-------------------- HSQL ----------------------------------------------
//
使用HSQL语句直接增加、更新、删除实体
public
int
bulkUpdate(String queryString)
{
return
getHibernateTemplate().bulkUpdate(queryString);
}
//
使用带参数的HSQL语句增加、更新、删除实体
public
int
bulkUpdate(String queryString, Object[] values)
{
return
getHibernateTemplate().bulkUpdate(queryString, values);
}
//
使用HSQL语句检索数据
public
List find(String queryString)
{
return
getHibernateTemplate().find(queryString);
}
//
使用带参数的HSQL语句检索数据
public
List find(String queryString, Object[] values)
{
return
getHibernateTemplate().find(queryString, values);
}
//
使用带命名的参数的HSQL语句检索数据
public
List findByNamedParam(String queryString, String[] paramNames, Object[] values)
{
return
getHibernateTemplate().findByNamedParam(queryString, paramNames, values);
}
//
使用命名的HSQL语句检索数据
public
List findByNamedQuery(String queryName)
{
return
getHibernateTemplate().findByNamedQuery(queryName);
}
//
使用带参数的命名HSQL语句检索数据
public
List findByNamedQuery(String queryName, Object[] values)
{
return
getHibernateTemplate().findByNamedQuery(queryName, values);
}
//
使用带命名参数的命名HSQL语句检索数据
public
List findByNamedQueryAndNamedParam(String queryName, String[] paramNames, Object[] values)
{
return
getHibernateTemplate().findByNamedQueryAndNamedParam(queryName, paramNames, values);
}
//
使用HSQL语句检索数据,返回 Iterator
public
Iterator iterate(String queryString)
{
return
getHibernateTemplate().iterate(queryString);
}
//
使用带参数HSQL语句检索数据,返回 Iterator
public
Iterator iterate(String queryString, Object[] values)
{
return
getHibernateTemplate().iterate(queryString, values);
}
//
关闭检索返回的 Iterator
public
void
closeIterator(Iterator it)
{
getHibernateTemplate().closeIterator(it);
}
//
-------------------------------- Criteria ------------------------------
//
创建与会话无关的检索标准
public
DetachedCriteria createDetachedCriteria()
{
return
DetachedCriteria.forClass(
this
.entityClass);
}
//
创建与会话绑定的检索标准
public
Criteria createCriteria()
{
return
this
.createDetachedCriteria().getExecutableCriteria(
this
.getSession());
}
//
检索满足标准的数据
public
List findByCriteria(DetachedCriteria criteria)
{
return
getHibernateTemplate().findByCriteria(criteria);
}
//
检索满足标准的数据,返回指定范围的记录
public
List findByCriteria(DetachedCriteria criteria,
int
firstResult,
int
maxResults)
{
return
getHibernateTemplate().findByCriteria(criteria, firstResult, maxResults);
}
//
使用指定的实体及属性检索(满足除主键外属性=实体值)数据
public
List
<
T
>
findEqualByEntity(T entity, String [] propertyNames)
{
Criteria criteria
=
this
.createCriteria();
Example exam
=
Example.create(entity);
exam.excludeZeroes();
String [] defPropertys
=
getSessionFactory().getClassMetadata(entityClass).getPropertyNames();
for
(String defProperty : defPropertys)
{
int
ii
=
0
;
for
(ii
=
0
; ii
<
propertyNames.length;
++
ii)
{
if
(defProperty.equals(propertyNames[ii]))
{
criteria.addOrder(Order.asc(defProperty));
break
;
}
}
if
(ii
==
propertyNames.length)
{
exam.excludeProperty(defProperty);
}
}
criteria.add(exam);
return
(List
<
T
>
) criteria.list();
}
//
使用指定的实体及属性检索(满足属性 like 串实体值)数据
public
List
<
T
>
findLikeByEntity(T entity, String [] propertyNames)
{
Criteria criteria
=
this
.createCriteria();
for
(String property : propertyNames)
{
try
{
Object value
=
PropertyUtils.getProperty(entity, property);
if
(value
instanceof
String)
{
criteria.add(Restrictions.like(property, (String) value, MatchMode.ANYWHERE));
criteria.addOrder(Order.asc(property));
}
else
{
criteria.add(Restrictions.eq(property, value));
criteria.addOrder(Order.asc(property));
}
}
catch
(Exception ex)
{
//
忽略无效的检索参考数据。
}
}
return
(List
<
T
>
) criteria.list();
}
//
使用指定的检索标准获取满足标准的记录数
public
Integer getRowCount(DetachedCriteria criteria)
{
criteria.setProjection(Projections.rowCount());
List list
=
this
.findByCriteria(criteria,
0
,
1
);
return
(Integer) list.get(
0
);
}
//
使用指定的检索标准检索数据,返回指定统计值(max,min,avg,sum)
public
Object getStatValue(DetachedCriteria criteria, String propertyName, String StatName)
{
if
(StatName.toLowerCase().equals(
"
max
"
))
criteria.setProjection(Projections.max(propertyName));
else
if
(StatName.toLowerCase().equals(
"
min
"
))
criteria.setProjection(Projections.min(propertyName));
else
if
(StatName.toLowerCase().equals(
"
avg
"
))
criteria.setProjection(Projections.avg(propertyName));
else
if
(StatName.toLowerCase().equals(
"
sum
"
))
criteria.setProjection(Projections.sum(propertyName));
else
return
null
;
List list
=
this
.findByCriteria(criteria,
0
,
1
);
return
list.get(
0
);
}
//
-------------------------------- Others --------------------------------
//
加锁指定的实体
public
void
lock(T entity, LockMode lock)
{
getHibernateTemplate().lock(entity, lock);
}
//
强制初始化指定的实体
public
void
initialize(Object proxy)
{
getHibernateTemplate().initialize(proxy);
}
//
强制立即更新缓冲数据到数据库(否则仅在事务提交时才更新)
public
void
flush()
{
getHibernateTemplate().flush();
}
}
发表评论
-
Spring中常用的hql查询方法
2009-05-18 01:01 1053Spring中常用的hql查询方法(getHibernateT ... -
Spring MVC集成Struts Tiles使用方法
2009-05-18 00:58 1421Spring MVC集成Struts Tiles使用方法 ... -
TO DO
2009-05-18 00:13 0TO DO: 1. Error: java.lan ... -
spring mvc 简单解析
2009-05-17 21:56 3163由于急需这方面的知识,所以暂时先囫囵吞枣,记下来,有时间再来分 ... -
Spring MVC配置
2009-05-16 21:24 4102一,配置分发器 DispatcherServlet 是Sp ...
相关推荐
总结起来,使用Maven在Eclipse中搭建Spring+Spring MVC+Hibernate框架涉及以下步骤: 1. 创建Maven项目,配置`pom.xml`。 2. 配置Spring和Spring MVC的XML配置文件。 3. 设置Hibernate配置,创建实体类。 4. 构建Web...
基于Struts+Spring+Hibernate框架的网络评比系统.
Spring+SpringMVC+Hibernate 框架集成详解 本文档旨在详细介绍 Spring、SpringMVC 和 Hibernate 框架的集成,旨在帮助开发人员快速了解这三个框架的集成过程。 Spring 框架 Spring 框架是一个 Java 语言的开源...
AJAX实现用户登录注册(Struts+Spring+Hibernate+Ajax框架) AJAX实现用户登录注册(Struts+Spring+Hibernate+Ajax框架) AJAX实现用户登录注册(Struts+Spring+Hibernate+Ajax框架)
### Struts+Spring+Hibernate框架搭建 #### 1. SSH整合理念 在现代软件开发中,特别是Java Web应用开发领域,采用多个框架协同工作已成为一种常见的做法。这种做法旨在通过不同框架的优势互补来构建高性能、高灵活...
Spring MVC、Spring 和 Hibernate 是Java Web开发中的三大主流框架,它们各司其职,共同构建了一个强大而灵活的后端架构。Spring MVC 负责处理HTTP请求并将其路由到相应的控制器,Spring 提供了依赖注入(DI)和面向...
Strut+Spring+Hibernate框架是当前流行的Java EE框架,它们之间的结合使用可以提供一个完整的企业级应用程序解决方案。下面我们将详细介绍Strut、Spring和Hibernate框架的工作原理。 Hibernate框架的工作原理 ...
在本教程中,我们将深入探讨如何使用Spring MVC、Spring和Hibernate三大框架进行全注解的整合开发。这个视频教程系列的第11部分,重点可能是建立在前几部分的基础之上,进一步深化对这三个核心技术的理解和实践。 ...
这个"jsp+Spring+hibernate"博客系统展示了如何利用现代Java技术栈构建一个功能完善的Web应用。通过结合JSP的视图呈现、Spring的控制层管理和Hibernate的数据持久化,开发者能够快速、高效地开发出具有复杂业务逻辑...
《图书管理系统spring+struts+hibernate》是一款基于Java技术栈开发的图书管理软件,其核心框架包括Spring、Struts和Hibernate。该系统利用MySQL作为数据库存储数据,提供了完整的数据库备份,确保了数据的安全性与...
在"Struts2+Spring+Hibernate"的整合中,Spring作为核心容器,负责管理所有组件,包括Struts2的Action和Hibernate的SessionFactory。通过Spring的AOP,可以实现事务的统一管理。而Struts2作为前端控制器,处理HTTP...
这个"spring+hibernate框架demo"提供了一个整合这两个框架的小项目,便于初学者理解和学习。 Spring 框架: 1. **依赖注入**:Spring 的核心特性之一,它允许通过配置文件或注解来管理对象及其依赖关系,降低了组件...
**Spring+Hibernate+MySql应用实例详解** 在Java Web开发领域,Spring、Hibernate和MySQL是三个非常关键的技术组件。Spring作为一个全面的框架,提供了一种轻量级的控制反转(IoC)和面向切面编程(AOP)的解决方案...
Struts 2+Spring 3+Hibernate框架技术精讲与整合案例Struts 2+Spring 3+Hibernate框架技术精讲与整合案例Struts 2+Spring 3+Hibernate框架技术精讲与整合案例Struts 2+Spring 3+Hibernate框架技术精讲与整合案例...
标题 "gwt+spring+hibernate" 涉及的是一个使用Google Web Toolkit (GWT)、Spring框架和Hibernate ORM技术的集成示例。这是一个常见的Web应用开发组合,用于构建高效、可扩展且功能丰富的Java web应用程序。下面将...
总之,“Struts2+Spring+Hibernate框架技术与项目实战”涵盖了Web开发中的许多核心技能,学习和掌握这一套技术栈,对于提升Java开发者的专业素养和解决实际问题的能力有着显著的帮助。通过不断实践和深入理解,...
"Spring+Struts+Hibernate"(SSH)框架是Java Web开发中的经典组合,被誉为"三剑客"。这个框架集合提供了全面的企业级应用解决方案,帮助开发者构建高效、可扩展且易于维护的Web应用程序。 Spring框架是核心,它...
该demo集成了spring+springmvc+hibernate框架,里面的dao、service、entity均采用注解形式,容易开发,另外该demo中dao采用注解形式,将所有实体dao需要用到的通用方法如insert,update,delete,分页查询等均采用...
在"Struts2+Spring+Hibernate框架技术与项目实战 源码(中)"这个资料中,我们聚焦于第五篇的内容,这部分涵盖了19到23章的所有光盘代码。这些章节通常会深入讲解如何将这三个框架集成,并通过实际项目进行实战演练。...
Struts 2+Spring 3+Hibernate框架技术精讲与整合案例3Struts 2+Spring 3+Hibernate框架技术精讲与整合案例3Struts 2+Spring 3+Hibernate框架技术精讲与整合案例3