- 浏览: 155132 次
- 性别:
- 来自: 球面世界
最新评论
-
zhang_yi_yi:
...
Java常用方法使用心得 -
yeshuang:
不错,希望以后多多介绍一些
Java常用方法使用心得 -
tiansong163:
我用这个怎么不行呢?
jsp实现文件下载与中文文件名乱码问题解决 -
lshhjxlj:
Yes,it very good!
Java常用方法使用心得 -
jaja_jaja:
有错误,web.xml里少了servlet-mapping部分 ...
对log4j初始化并设置log文件的存放路径
java 代码
- package sgf4web.dao;
- import java.io.Serializable;
- import java.util.*;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- import org.hibernate.*;
- import org.hibernate.criterion.*;
- import org.springframework.orm.hibernate3.HibernateCallback;
- import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
- import sgf4web.dao.support.PaginationSupport;
- import sgf4web.util.GenericsUtils;
- /** *//**
- * 泛型Hibernate DAO类
- *
- * @author DigitalSonic
- */
- @SuppressWarnings("unchecked")
- public class HibernateGenericDao<T, ID extends Serializable> extends HibernateDaoSupport ...{
- private Class<T> pojoClass;
- /** *//**
- * 初始化DAO,获取POJO类型
- */
- public HibernateGenericDao() ...{
- // this.pojoClass = (Class<T>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];
- this.pojoClass = GenericsUtils.getSuperClassGenricType(getClass());
- }
- /** *//**
- * 获得该DAO对应的POJO类型
- */
- public Class<T> getPojoClass() ...{
- return this.pojoClass;
- }
- /** *//**
- * 获得该DAO对应的POJO类型名
- */
- public String getPojoClassName() ...{
- return getPojoClass().getName();
- }
- //加载对象
- /** *//**
- * 加载所有的对象
- */
- public List<T> loadAll() ...{
- return (List<T>)getHibernateTemplate().loadAll(getPojoClass());
- }
- /** *//**
- * 根据hql查询
- *
- * @param values 可变参数
- */
- public List find(String hql, Object... values) ...{
- return getHibernateTemplate().find(hql, values);
- }
- /** *//**
- * 根据条件加载对象
- *
- * @param criteria Criteria实例
- */
- public List<T> findByCriteria(final Criteria criteria) ...{
- List list = criteria.list();
- return transformResults(list);
- }
- /** *//**
- * 根据条件加载对象
- * @param detachedCriteria DetachedCriteria实例
- */
- public List<T> findByCriteria(final DetachedCriteria detachedCriteria) ...{
- return (List<T>) getHibernateTemplate().execute(new HibernateCallback() ...{
- public Object doInHibernate(Session session) throws HibernateException ...{
- Criteria criteria = detachedCriteria.getExecutableCriteria(session);
- List list = criteria.list();
- return transformResults(list);
- }
- }, true);
- }
- /** *//**
- * 根据给定的实例查找对象
- */
- public List<T> findByExample(T instance) ...{
- List<T> results = (List<T>)getHibernateTemplate().findByExample(instance);
- return results;
- }
- /** *//**
- * 根据ID查找对象
- */
- public T findById(ID id) ...{
- return (T) getHibernateTemplate().get(getPojoClassName(), id);
- }
- /** *//**
- * 根据某个具体属性进行查找
- */
- public List<T> findByProperty(String propertyName, Object value) ...{
- String queryString = "from " + getPojoClassName() + " as model where model."
- + propertyName + "= ?";
- return (List<T>)getHibernateTemplate().find(queryString, value);
- }
- //新建、修改、删除
- /** *//**
- * 新建对象实例化
- */
- public ID save(T transientInstance) ...{
- return (ID)getHibernateTemplate().save(transientInstance);
- }
- /** *//**
- * 更新已存在的对象
- */
- public void update(T transientInstance) ...{
- getHibernateTemplate().update(transientInstance);
- }
- /** *//**
- * 删除指定ID的对象
- */
- public void delete(ID id) ...{
- T instance = findById(id);
- if (instance != null)
- getHibernateTemplate().delete(instance);
- }
- /** *//**
- * 删除指定对象
- */
- public void delete(T persistentInstance) ...{
- getHibernateTemplate().delete(persistentInstance);
- }
- //分页
- /** *//**
- * 根据Criteria加载分页,指定页大小和起始位置
- */
- public PaginationSupport findPageByCriteria(final Criteria criteria, final int pageSize, final int startIndex) ...{
- int totalCount = getCountByCriteria(criteria);
- criteria.setProjection(null);
- List items = criteria.setFirstResult(startIndex).setMaxResults(pageSize).list();
- items = transformResults(items);
- PaginationSupport ps = new PaginationSupport(items, totalCount, pageSize, startIndex);
- return ps;
- }
- /** *//**
- * 根据Criteria加载分页,默认页大小,从第0条开始
- */
- public PaginationSupport findPageByCriteria(final Criteria criteria) ...{
- return findPageByCriteria(criteria, PaginationSupport.PAGESIZE, 0);
- }
- /** *//**
- * 根据Criteria加载分页,默认页大小,从第startIndex条开始
- */
- public PaginationSupport findPageByCriteria(final Criteria criteria, final int startIndex) ...{
- return findPageByCriteria(criteria, PaginationSupport.PAGESIZE, startIndex);
- }
- /** *//**
- * 根据Criteria统计总数
- */
- public int getCountByCriteria(final Criteria criteria) ...{
- Integer count = (Integer) criteria.setProjection(Projections.rowCount()).uniqueResult();
- return count.intValue();
- }
- /** *//**
- * 根据DetachedCriteria加载分页,指定页大小和起始位置
- */
- public PaginationSupport findPageByCriteria(final DetachedCriteria detachedCriteria, final int pageSize, final int startIndex) ...{
- return (PaginationSupport) getHibernateTemplate().execute(new HibernateCallback() ...{
- public Object doInHibernate(Session session) throws HibernateException ...{
- Criteria criteria = detachedCriteria.getExecutableCriteria(session);
- int totalCount = ((Integer) criteria.setProjection(Projections.rowCount()).uniqueResult()).intValue();
- criteria.setProjection(null);
- List items = criteria.setFirstResult(startIndex).setMaxResults(pageSize).list();
- items = transformResults(items);
- PaginationSupport ps = new PaginationSupport(items, totalCount, pageSize, startIndex);
- return ps;
- }
- }, true);
- }
- /** *//**
- * 根据DetachedCriteria加载分页,默认页大小,从第0条开始
- */
- public PaginationSupport findPageByCriteria(final DetachedCriteria detachedCriteria) ...{
- return findPageByCriteria(detachedCriteria, PaginationSupport.PAGESIZE, 0);
- }
- /** *//**
- * 根据DetachedCriteria加载分页,默认页大小,从第startIndex条开始
- */
- public PaginationSupport findPageByCriteria(final DetachedCriteria detachedCriteria, final int startIndex) ...{
- return findPageByCriteria(detachedCriteria, PaginationSupport.PAGESIZE, startIndex);
- }
- /** *//**
- * 根据DetachedCriteria统计总数
- */
- public int getCountByCriteria(final DetachedCriteria detachedCriteria) ...{
- Integer count = (Integer) getHibernateTemplate().execute(new HibernateCallback() ...{
- public Object doInHibernate(Session session) throws HibernateException ...{
- Criteria criteria = detachedCriteria.getExecutableCriteria(session);
- return criteria.setProjection(Projections.rowCount()).uniqueResult();
- }
- }, true);
- return count.intValue();
- }
- /** *//**
- * 根据hql加载分页,指定页大小和起始位置
- */
- public PaginationSupport findPageByQuery(final String hql, final int pageSize, final int startIndex, Object...values) ...{
- int totalCount = getCountByQuery(hql, values);
- if (totalCount < 1)
- return new PaginationSupport(new ArrayList(0), 0);
- Query query = createQuery(hql, values);
- List items = query.setFirstResult(startIndex).setMaxResults(pageSize).list();
- PaginationSupport ps = new PaginationSupport(items, totalCount, pageSize, startIndex);
- return ps;
- }
- /** *//**
- * 根据hql加载分页,默认页大小,从第0条开始
- */
- public PaginationSupport findPageByQuery(final String hql, Object...values) ...{
- return findPageByQuery(hql, PaginationSupport.PAGESIZE, 0, values);
- }
- /** *//**
- * 根据hql加载分页,默认页大小,从第startIndex条开始
- */
- public PaginationSupport findPageByQuery(final String hql, final int startIndex, Object...values) ...{
- return findPageByQuery(hql, PaginationSupport.PAGESIZE, startIndex, values);
- }
- /** *//**
- * 根据hql统计总数
- */
- public int getCountByQuery(final String hql, Object...values) ...{
- String countQueryString = " select count (*) " + removeSelect(removeOrders(hql));
- List countlist = getHibernateTemplate().find(countQueryString, values);
- return (Integer) countlist.get(0);
- }
- //创建Criteria和Query
- /** *//**
- * 创建Criteria对象
- *
- * @param criterions 可变的Restrictions条件列表
- */
- public Criteria createCriteria(Criterion...criterions) ...{
- Criteria criteria = getSession().createCriteria(getPojoClass());
- for (Criterion c : criterions)
- criteria.add(c);
- return criteria;
- }
- /** *//**
- * 创建Criteria对象,带排序字段与升降序字段
- */
- public Criteria createCriteria(String orderBy, boolean isAsc, Criterion...criterions) ...{
- Criteria criteria = createCriteria(criterions);
- if (isAsc)
- criteria.addOrder(Order.asc(orderBy));
- else
- criteria.addOrder(Order.desc(orderBy));
- return criteria;
- }
- /** *//**
- * 方法取自SpringSide.
- * 创建Query对象. 对于需要first,max,fetchsize,cache,cacheRegion等诸多设置的函数,可以在返回Query后自行设置.
- * 留意可以连续设置,如下:
- * <pre>
- * dao.getQuery(hql).setMaxResult(100).setCacheable(true).list();
- * </pre>
- * 调用方式如下:
- * <pre>
- * dao.createQuery(hql)
- * dao.createQuery(hql,arg0);
- * dao.createQuery(hql,arg0,arg1);
- * dao.createQuery(hql,new Object[arg0,arg1,arg2])
- * </pre>
- *
- * @param values 可变参数.
- */
- public Query createQuery(String hql, Object... values) ...{
- Query query = getSession().createQuery(hql);
- for (int i = 0; i < values.length; i++) ...{
- query.setParameter(i, values[i]);
- }
- return query;
- }
- /** *//**
- * 方法取自SpringSide.
- * 去除hql的select子句,未考虑union的情况
- */
- private static String removeSelect(String hql) ...{
- int beginPos = hql.toLowerCase().indexOf("from");
- return hql.substring(beginPos);
- }
- /** *//**
- * 方法取自SpringSide.
- * 去除hql的orderby子句
- */
- private static String removeOrders(String hql) ...{
- Pattern p = Pattern.compile("order\s*by[\w|\W|\s|\S]*", Pattern.CASE_INSENSITIVE);
- Matcher m = p.matcher(hql);
- StringBuffer sb = new StringBuffer();
- while (m.find()) ...{
- m.appendReplacement(sb, "");
- }
- m.appendTail(sb);
- return sb.toString();
- }
- /** *//**
- * 将联合查询的结果内容从Map或者Object[]转换为实体类型,如果没有转换必要则直接返回
- */
- private List transformResults(List items) ...{
- if (items.size() > 0) ...{
- if (items.get(0) instanceof Map) ...{
- ArrayList list = new ArrayList(items.size());
- for (int i = 0; i < items.size(); i++) ...{
- Map map = (Map)items.get(i);
- list.add(map.get(CriteriaSpecification.ROOT_ALIAS));
- }
- return list;
- } else if (items.get(0) instanceof Object[]) ...{
- ArrayList list = new ArrayList(items.size());
- int pos = 0;
- for (int i = 0; i < ((Object[])items.get(0)).length; i++) ...{
- if (((Object[])items.get(0))[i].getClass() == getPojoClass()) ...{
- pos = i;
- break;
- }
- }
- for (int i = 0; i < items.size(); i++) ...{
- list.add(((Object[])items.get(i))[pos]);
- }
- return list;
- } else
- return items;
- } else
- return items;
- }
- }
java 代码
- package sgf4web.util;
- import java.lang.reflect.ParameterizedType;
- import java.lang.reflect.Type;
- /** *//**
- * 泛型参数辅助类
- *
- * @author DigitalSonic
- */
- @SuppressWarnings("unchecked")
- public class GenericsUtils ...{
- /** *//**
- * 通过反射,获得定义Class时声明的父类的第一个范型参数的类型。
- */
- public static Class getSuperClassGenricType(Class clazz) ...{
- return getSuperClassGenricType(clazz, 0);
- }
- /** *//**
- * 通过反射,获得定义Class时声明的父类的范型参数的类型。
- * 如没有找到符合要求的范型参数,则递归向上直到Object。
- *
- * @param clazz 要进行查询的类
- * @param index 如有多个范型声明该索引从0开始
- * @return 在index位置的范型参数的类型,如果无法判断则返回<code>Object.class</code>
- */
- public static Class getSuperClassGenricType(Class clazz, int index) ...{
- boolean flag = true;
- Type genType = clazz.getGenericSuperclass();
- Type[] params = null;
- if (!(genType instanceof ParameterizedType))
- flag =
发表评论
-
Maven2上路
2008-06-24 21:49 2889虽然公司仍然使用ant,但自己还是尝试使用了下Maven2 网 ... -
Properties读取类
2007-12-12 22:44 3434一个properties常用类,以前收藏的 java 代码 ... -
对log4j初始化并设置log文件的存放路径
2007-12-12 22:32 10540利用servlet初始化时配置log的存放位置 java 代码 ... -
Eclipse常用快捷键(收藏)
2007-12-10 14:43 1559Eclipse常用的快捷键 Ctrl+1 快速修复(最经典的快 ... -
Java常用方法使用心得
2007-12-10 14:29 9282不断完善中ing . . . java. ... -
一个通用时间类
2007-12-10 14:14 1399引自:http://www.busfly.cn/post/ja ... -
HashCode 理解测试
2007-11-01 14:15 1707java 代码 public class Has ... -
BIRT之使用历程
2007-10-26 16:13 6301BIRT的易使用性及强大,成为项目的首选 在download. ... -
试刀——DynamicProxy
2007-10-07 00:53 1298Dynamic Proxy是这样一种class:它是在运行时生 ... -
Spring与Hibernate Annotation的实现
2007-08-29 01:27 8109最近实现了Spring2.0 Hibernate3.2 ... -
spring_hibernate_annotation的三种实现
2007-08-23 15:21 1739xml 代码 <!--第一种 ====== ... -
一个动态的model
2007-08-10 11:17 1242java 代码 import java.uti ... -
让人迷糊的interface和abstract
2007-08-10 09:57 1304最近在做公司的一个项 ... -
jdk5.0 新用法
2007-08-03 19:40 1468JDK5.0 有SuppressWarnings,De ... -
用jsp写的日历
2007-07-16 14:38 1566觉得日历不应该要那么麻烦 为什么发上来的代码那么难看。。。只能 ... -
分页公用类PaginationSupport
2007-07-11 10:32 3846最近看了 robbin等大侠写 ... -
好文章锦集
2007-07-03 21:56 1099dao + hibernate 设计 http://www.i ... -
解决web开发中的中文问题
2006-08-09 09:41 1231这段时间经常看到有人问到web开发中怎么中文总是?号。原因其实 ... -
jsp实现文件下载与中文文件名乱码问题解决
2006-08-10 16:36 5131之前,写过一个Download.jsp文件,可以解决下载文件乱 ... -
struts 实现文件上传与下载
2007-04-18 19:13 3551/****************************** ...
相关推荐
泛型dao,顾名思义就是一个dao可以对多个实体对象进行持久化。当应用中需要使用到上十张表时,DAO的维护变得日益困难,主要表现在这几个方面: 1)dao类的繁多,很多设计都是一个entity对应一个dao (不同的只有类名...
【描述】"基于hibernate5 泛型Dao实例,下载后改一下数据库配置直接可以用",意味着这个压缩包文件提供了一个已经实现好的Hibernate5版本的泛型Dao示例项目。用户只需要根据自己的数据库环境修改相应的配置信息,就...
Hibernate 是一个流行的持久层框架,可以与泛型Dao接口集成,实现数据访问的持久化。 Hibernate 对泛型Dao接口的实现主要通过继承泛型Dao接口,使用 Hibernate 的 Session 对象来实现数据访问。 Hibernate 对泛型...
这种模式的核心在于利用Java的泛型特性,使得DAO方法可以处理任何类型的实体对象,而无需为每个实体类单独创建一个DAO实现。 首先,我们需要创建一个泛型DAO接口,如`GenericDao<T>`,其中`T`代表任意实体类类型。...
泛型DAO是一个通用的DAO实现,它使用Java的泛型特性,可以适用于任何继承自特定基类或者实现特定接口的数据实体类。这样,我们只需要编写一次DAO的通用实现,然后在需要的地方通过指定具体的类型即可。 下面是一个...
在这种情况下,"hibernate不是泛型的通用DAo1"可能提供了一个无需继承的DAO实现。例如,`DynamicDao`可能是一个非泛型接口,它包含了一些基本的CRUD操作,可以直接被任何类实现,而不需要指定特定的实体类型。`...
`MyTestDao`可能是实现泛型DAO的一个具体示例,它可能包含了针对特定数据库操作的实现。通过分析和调试`MyTestDao`的源代码,我们可以更深入地理解泛型和反射如何协同工作来简化数据库操作。 使用泛型通用DAO的好处...
本文将深入探讨如何实现一个简单的Hibernate泛型DAO(数据访问对象),以提高代码的可重用性和可维护性。 首先,我们来看`AbstractHibernateGenericDao`类,这是一个抽象类,它通常会包含一些基本的CRUD(创建、...
这样,我们可以为每种实体类创建一个实现此接口的类,如`UserDAOImpl`、`ProductDAOImpl`等,而无需为每个操作重复相同的代码。 接下来,`SupperBaseDAOImp.java`可能是`SupperBaseDAO`接口的一个实现类,它可能...
为什么我们要使用通用DAO接口呢,因为我们的数据库操作无非是增删改查,CRUD操作,我们不需要为每个实体去编写一个dao接口,对于相似的实体操作可以只编写一个通用接口,然后采用不同的实现! DAO已经成为持久层...
使用泛型DAO的一个重要好处是,我们可以在不修改原有代码的情况下,轻松地添加对新实体的支持,因为基础的DAO操作已经实现了。这尤其适用于那些基于ORM(对象关系映射)框架,如Hibernate或MyBatis的项目,它们提供...
标题“ssh通用基于泛型的dao”指的是使用SSH(Spring、Struts2、Hibernate)框架开发的一个通用的、基于泛型的DAO实现,它旨在提高开发效率,减少重复工作。 SSH框架是Java企业级应用开发的常用组合,Spring提供了...
2. **代码复用性**:一个泛型DAO类可以用于处理任何实体类型,大大减少了代码量,提高了代码的可维护性。 3. **灵活性**:能够轻松地扩展功能,如添加新的查询方法,而无需修改大量现有代码。 #### 实现细节 在给...
而泛型DAO(Data Access Object)则是基于Hibernate进一步抽象出来的一个设计模式,用于提供更通用的数据操作方法。本文档主要探讨了如何在Spring+Hibernate环境中创建和使用泛型DAO。 首先,我们来看一下泛型DAO...
本文将探讨如何设计和使用泛型Hibernate DAO,并提供一个基础实现供参考。 1. **泛型接口定义** 泛型接口`GenericDao`用于定义基本的数据操作。其中,`T`代表实体类,它需要继承`Serializable`接口,确保对象可以...
本篇文章将深入探讨一个使用Spring注解和Hibernate实现的泛型DAO设计,以提高代码的复用性和可维护性。 首先,`HibernateBaseDao.java`是基础的Hibernate DAO类,它提供了对Hibernate操作的基本封装。这个类通常会...
泛型DAO是DAO模式的一种改进,通过使用Java泛型,我们可以创建一个适用于任何类型的DAO接口,这样就可以避免为每个实体类都创建一个特定的DAO类。 在给出的代码片段中,定义了一个泛型接口`GenericDao`,它接受两个...
在泛型Dao框架中,通常会有一个基类或接口,比如`GenericDao<T>`,其中`T`是代表任何实体类型的类型参数。这个基类会提供一些通用的方法,如添加(save)、更新(update)、删除(delete)和查询(find)等。这些...