`
Eaduns
  • 浏览: 64884 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

DAO泛型

    博客分类:
  • JAVA
阅读更多

DAO泛型:

 

package com.dao;

import java.io.Serializable;
import java.util.List;

import com.domain.Attend;
import com.utils.Pagination;

//泛型的接口
/*泛型真正要做的事情就是找到具体的实体类是哪个
 * <T>:占位符,代表真正在运行时候的实体类(Employee,Manager,Application....)
 * <PK>:主键类,必须实现Serializable接口
 */
public interface GenerateDao<T,PK extends Serializable> {
	public Integer save(T entity);
	public void update(T entity);
	public void delete(T entity);
	public void delete(PK id);
	public List<T> findAll();
	public T get(PK id);
	
//	在工具类中定义2个基本方法
//	1.通过HQL和参数返回一个对象
	public Object queryObject(final String hql,final Object[] values);
//	2.通过HQL和参数返回一个List
	public List query(final String hql,final Object[] values);
//	3.实现分页的一个公共方法
	public Pagination<T> getPagination(final String hql,final Object[] values,final int pageNow,final int rowCount,final int pageSize);
}
 

实现以上接口:

 

package com.dao.impl;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.sql.SQLException;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.dao.GenerateDao;
import com.domain.Attend;
import com.utils.Pagination;

/*
 * 泛型DAO的实现
 * (1)继承泛型接口
 * (2)HiberanteDaoSupport
 * (3)得到使用这个方法的实体类
 * (4)实现具体的数据操作方法
 */
public class GenerateDaoImpl<T,PK extends Serializable> extends HibernateDaoSupport implements GenerateDao<T, PK>{
	private final Class<T> clazz;
	
	public GenerateDaoImpl(){
//		通过java反射机制,得到在运行时的具体的实体类
		clazz = (Class<T>)((ParameterizedType)getClass()
				.getGenericSuperclass())
				.getActualTypeArguments()[0];
	}
	
	public void delete(T entity) {
		this.getHibernateTemplate().delete(entity);
	}

	public void delete(PK id) {
		this.getHibernateTemplate().delete(get(id));
	}

	public List<T> findAll() {
		return this.getHibernateTemplate().find("from "+clazz.getName());
	}

	public Integer save(T entity) {
		return (Integer)this.getHibernateTemplate().save(entity);
	}

	public void update(T entity) {
		this.getHibernateTemplate().update(entity);
	}

	public T get(PK id) {
		return this.getHibernateTemplate().get(clazz, id);
	}

	public List query(final String hql, final Object[] values) {
		return this.getHibernateTemplate().executeFind(new HibernateCallback() {

			public Object doInHibernate(Session arg0)
					throws HibernateException, SQLException {
				Query q = arg0.createQuery(hql);
				if(values != null){
					for(int i=0;i<values.length;i++){
						q.setParameter(i, values[i]);
					}
				}
				return q.list();
			}
		});
	}

	public Object queryObject(final String hql, final Object[] values) {
		return this.getHibernateTemplate().execute(new HibernateCallback() {

			public Object doInHibernate(Session arg0)
					throws HibernateException, SQLException {
				Query q = arg0.createQuery(hql);
				if(values != null){
					for(int i=0;i<values.length;i++){
						q.setParameter(i, values[i]);
					}
				}
				return q.list();
			}
		});
	}

	public Pagination<T> getPagination(final String hql, final Object[] values,
			final int pageNow, final int rowCount, final int pageSize) {
		return (Pagination<T>) this.getHibernateTemplate().execute(new HibernateCallback() {

			public Object doInHibernate(Session arg0)
					throws HibernateException, SQLException {
				Pagination pagination = new Pagination<T>(pageSize, pageNow, rowCount);
				
				Query q = arg0.createQuery(hql);
				if(values != null){
					for(int i=0;i<values.length;i++){
						q.setParameter(i, values[i]);
					}
				}
				q.setFirstResult(pageSize*(pageNow-1));
				q.setMaxResults(pageSize);
				List list = q.list();
				pagination.setPageList(list);
				return pagination;
			}
		});
	}

}
 

分享到:
评论

相关推荐

    泛型dao 泛型dao 泛型dao

    Struts2、Hibernate、Spring整合的泛型DAO (本人评价: 代码开发效率提高30% 代码出错率减少70%) 对于大多数开发人员,系统中的每个 DAO 编写几乎相同的代码到目前为止已经成为一种习惯。虽然所有人都将这种重复...

    ssh2 + dao泛型

    这篇博客"ssh2 + dao泛型"结合了这两个概念,探讨了如何在SSH2框架下利用泛型优化DAO层的操作。 SSH2框架主要由Spring、Struts和Hibernate三个部分组成,它为Java Web开发提供了强大的支持。Spring提供依赖注入和...

    Struts2 Spring3 Hibernate 注解功能 DAO 泛型 通用分页

    在这个项目"SSHWithAnnotationDemo"中,开发者利用注解功能,DAO泛型以及通用分页技术,进一步优化了代码结构和用户体验。 首先,让我们深入了解一下Struts2、Spring3和Hibernate的核心功能: 1. **Struts2**:这...

    DAO泛型写法很好用

    DAO泛型写法很好用 hibernate支持

    泛型dao

    【泛型DAO】是一种在Java开发中常见的设计模式,它利用了Java泛型特性来提高代码的可重用性和类型安全性。在Java中,DAO(Data Access Object)模式是用来封装对数据库的操作,将业务逻辑与数据访问逻辑分离,使得...

    SpringSide扩展Hiberna

    封装SpringSide扩展功能的Hibernat DAO泛型基类. 扩展功能包括分页查询,按属性过滤条件列表查询. 可在Service层直接使用,也可以扩展泛型DAO子类使用,见两个构造函数的注释.

    java 基于泛型与反射的通用 DAO

    综上所述,这个项目展示了如何利用Java的泛型和反射技术实现一个通用的DAO,使得数据库操作更加灵活和易于维护。泛型确保了类型安全,而反射则提供了运行时的动态行为。这种设计模式在实际开发中非常常见,尤其是在...

    经典泛型dao层代码,非常好用简易

    ### 泛型DAO层在SSH框架中的应用与详解 #### 引言 在现代软件开发中,特别是基于Java的企业级应用开发中,DAO(Data Access Object)层的设计扮演着至关重要的角色。它作为业务逻辑层与数据持久层之间的桥梁,承担...

    一个很好的通用泛型dao(含源码)

    而泛型DAO是一个类型安全的,代码精简的设计模式(相对于传统DAO),尤其在DAO组件数量庞大的时候,代码量的减少更加明显。 泛型DAO的核心是定义一个GenericDao接口,声明基本的CRUD操作: 用hibernate作为持久化...

    Hibernate泛型Dao

    【标题】"Hibernate泛型Dao"是针对Java开发中的数据持久化框架Hibernate的一个高级应用,主要目的是为了提高代码的复用性和简洁性。在传统的Hibernate使用中,针对每个实体类,我们都需要创建一个对应的Dao(Data ...

    Hibernate泛型DAO(结合spring模板支持)

    至于`Dao经典泛型.doc`文件,可能是更深入的关于Hibernate泛型DAO的文档,可能包含了如何配置Spring、如何处理复杂查询以及如何优化泛型DAO的更多细节。阅读这份文档将进一步提升你对泛型DAO的理解和应用能力。 ...

    JdbcTemplate通用泛型Dao实现

    本文将深入探讨`JdbcTemplate`通用泛型Dao实现的相关知识点,帮助开发者更好地理解和应用这一技术。 首先,让我们了解什么是`JdbcTemplate`。它是Spring框架的一部分,用于处理SQL操作。`JdbcTemplate`提供了一组...

    泛型DAO模型设计课堂笔记

    【泛型DAO模型设计】是Java开发中一种高效且可复用的数据访问对象(DAO)设计方式,结合了泛型和反射技术。泛型在Java中引入,旨在提高代码的安全性和可读性,减少类型转换的繁琐过程。DAO设计模式主要用于数据库...

    ssh通用泛型DAO

    在这个主题中,我们将深入探讨"ssh通用泛型DAO"的相关知识点。 首先,我们来了解"BaseHibernateDAO"。BaseHibernateDAO是基于Hibernate框架的一个基类,它封装了常见的数据库操作,如增删查改(CRUD)。通过继承这...

    java软件开发dao层泛型模式

    ### Java软件开发DAO层泛型模式详解 #### 泛型DAO模式概述 在Java软件开发过程中,DAO(Data Access Object)层的设计对于提高代码的可重用性与维护性至关重要。本文将详细介绍一种基于Hibernate技术的泛型DAO模式...

    Hibernate泛型DAO及使用方法.doc

    而泛型DAO(Data Access Object)则是基于Hibernate进一步抽象出来的一个设计模式,用于提供更通用的数据操作方法。本文档主要探讨了如何在Spring+Hibernate环境中创建和使用泛型DAO。 首先,我们来看一下泛型DAO...

    大家看看我设计的泛型DAO(使用Spring的Anotation和Hibernate)

    本篇文章将深入探讨一个使用Spring注解和Hibernate实现的泛型DAO设计,以提高代码的复用性和可维护性。 首先,`HibernateBaseDao.java`是基础的Hibernate DAO类,它提供了对Hibernate操作的基本封装。这个类通常会...

    S2SH整合例子 注解配置 JSON 泛型Dao

    6. **泛型Dao**:在Java开发中,泛型Dao(Generic Dao)是一种设计模式,用于减少重复的数据库操作代码。通过定义一个通用的Dao接口,可以实现对不同类型的实体对象进行CRUD操作,提高了代码的复用性和可维护性。...

Global site tag (gtag.js) - Google Analytics