`
kkcheng
  • 浏览: 40749 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

通用DAO

阅读更多

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

@SuppressWarnings("unchecked")
public interface GenericDao<T,ID extends Serializable> {

/**
* 根据id加载实体,没有返回
* @param id
* @return
*/
T get(ID id);

/**
* 没有则抛出异常
* @param id
* @return
*/

T load(ID id);

/**
* 保存实体
* @param entity
* @return
*/
void save(T entity);

/**
* 更新实体
* @param entity
*/
void update(T entity);

/**
* 删除实体
* @param entity
*/
void delete(T entity);

/**
* 根据ID删除数据
* @param id
*/
void deleteById(ID id);

/**
* 得到所有的实体
* @return
*/
List<T> findAll();

/**
* 得到所有实体记录
* @return
*/
int count();

/**
* 根据hql得到记录集
* @param hql
* @param params
* @return
*/
List<T> findByHql(final String hql,Object...params);

/**
* 根据hql得到查询记录数
* @param hql
* @param params
* @return
*/
int countByHql(final String hql,Object...params);


/**
* 同步缓存和数据库
*/
public void flush();

public void clear();

/**
* 排序方法
* @param entityClass 实体类型
* @param orderBy     按什么排序
* @param isAsc       true为升序
* @return
*/
public List<T> getAll(Class<T> entityClass, String orderBy, boolean isAsc);

/**
* 如果没有定义泛型或想查找其它实体数据可用此方法
* 根据属性分页查询
* @param entityClass   实体类型
* @param propertyMap   属性和值数据
* @param currentPage   当前页
* @param pageSize      每页页数
* @param orderBy       排序字段
* @param isAsc         排序方式
* @return
*/
public List<T> findAll(Class<T> entityClass,Map<String,Object>  propertyMap,int currentPage,int pageSize,String orderBy,boolean isAsc);

/**
* 得到有属性值的记录数,非泛型可用
* @param entityClass
* @param propertyMap
* @return
*/
public int count(Class<T> entityClass,Map<String,Object>  propertyMap);

/**
* 得到有属性值的记录数已定义泛型可用
* @param entityClass
* @param propertyMap
* @return
*/
public int count(Map<String,Object> propertyMap);


/**
* 根据相关的带参数hql计算总数,无参数values设为null
* @param hql
* @param values
* @return
*/
public int count(String hql,Object[] values);


/**
* 根据hql删除数据
* @return 返回删除条数
* @param hql
*/
public int delete(String hql);

/**
* 自定义查询
* @param filter
* @return
*/
public List<T> findAllBy(Map filter);

}







------------------------------------------------------------




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

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

@SuppressWarnings("unchecked")
public abstract class AbstractHibernateDao<T,ID extends Serializable> extends HibernateDaoSupport
implements GenericDao<T, ID> {

Class<T> presistentClass;

public AbstractHibernateDao(){
presistentClass = (Class<T>)((ParameterizedType)this.getClass().
getGenericSuperclass()).getActualTypeArguments()[0];
}

public T get(ID id) {
return (T)this.getHibernateTemplate().get(presistentClass, id);
}



public T load(ID id) {
return (T) this.getHibernateTemplate().load(presistentClass, id);
}

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

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

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

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

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

public int count() {

return 0;
}

public List<T> findByHql(String hql, Object... params) {
this.getHibernateTemplate().find(hql, params);
return null;
}

public int countByHql(final String hql, final Object... params) {

int count = 0;

StringBuffer countHql = new StringBuffer();
countHql.append("SELECT COUNT(*) AS CNT FROM (");
countHql.append(hql);
countHql.append(")");

@SuppressWarnings("unchecked")
List<Object> list = getHibernateTemplate().find(countHql.toString(),params);
if (list != null) {
count = Integer.parseInt(list.get(0).toString());
}
list = null;
return count;
}

public void flush() {
this.getHibernateTemplate().flush();
}

public void clear() {
        getHibernateTemplate().clear();
    }

/**
* 获取全部对象,带排序字段与升降序参数.
*/
public List<T> getAll(String orderBy, boolean isAsc) {
if (isAsc)
return getHibernateTemplate().findByCriteria(
DetachedCriteria.forClass(presistentClass).addOrder(Order.asc(orderBy)));
else
return getHibernateTemplate().findByCriteria(
DetachedCriteria.forClass(presistentClass).addOrder(Order.desc(orderBy)));

}


public List<T> findBy(final String propertyName, final Object value, final String orderBy, final boolean isAsc){
return (List<T>)getHibernateTemplate().execute(new HibernateCallback(){

public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Criteria criteria = session.createCriteria(getPresistentClass());
criteria.add(Restrictions.eq(propertyName, value));
if (isAsc) {
criteria.addOrder(Order.asc(orderBy));
} else {
criteria.addOrder(Order.desc(orderBy));
}
return criteria.list();
}

});
}


public List<T> findAll(final Class<T> entityClass,final Map<String,Object>  propertyMap,final int currentPage,final int pageSize,final String orderBy,final boolean isAsc) {
return (List<T>)getHibernateTemplate().execute(new HibernateCallback(){

public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Criteria criteria = session.createCriteria(entityClass);
criteria.add(Restrictions.allEq(propertyMap));
if (isAsc) {
criteria.addOrder(Order.asc(orderBy));
} else {
criteria.addOrder(Order.desc(orderBy));
}
criteria.setFirstResult((currentPage - 1) * pageSize);
criteria.setMaxResults(pageSize);
return criteria.list();
}

});
}

public List<T> findAll(final Map propertyMap,final int currentPage,final int pageSize,final String orderBy,final boolean isAsc) {
return (List<T>)getHibernateTemplate().execute(new HibernateCallback(){

public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Criteria criteria = session.createCriteria(getPresistentClass());
criteria.add(Restrictions.allEq(propertyMap));
if (isAsc) {
criteria.addOrder(Order.asc(orderBy));
} else {
criteria.addOrder(Order.desc(orderBy));
}
criteria.setFirstResult((currentPage - 1) * pageSize);
criteria.setMaxResults(pageSize);
return criteria.list();
}

});
}

public int count(Class<T> entityClass,Map<String,Object> propertyMap) {
int size = 0;
StringBuilder hql = new StringBuilder(" SELECT COUNT(*) AS CNT FROM ");
hql.append(entityClass.getName());
hql.append(contactPropertyMap(propertyMap));
List list = this.getHibernateTemplate().find(hql.toString());

if (list != null) {
size = Integer.parseInt(list.get(0).toString());
}
return size;
}

public int count(Map propertyMap) {
int size = 0;
StringBuilder hql = new StringBuilder(" SELECT COUNT(*) AS CNT FROM ");
hql.append(getPresistentClass().getName());
hql.append(contactPropertyMap(propertyMap));
List list = this.getHibernateTemplate().find(hql.toString());

if (list != null) {
size = Integer.parseInt(list.get(0).toString());
}
return size;
}






public int count(String hql, Object[] values) {
StringBuilder tempHql = new StringBuilder();
tempHql.append(" SELECT COUNT(*) AS CNT FROM ( ");
tempHql.append(hql);
tempHql.append(")");

List list = getHibernateTemplate().find(tempHql.toString(), values);

int size = 0;
if (list != null) {
size = Integer.parseInt(list.get(0).toString());
}
return size;
}

public List<T> findAll(final String hql,final Object[] values,
final int currentPage, final int pageSize) {
return (List<T>)getHibernateTemplate().execute(new HibernateCallback(){

public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(hql);
for (int i = 0; i < values.length; i++) {
query.setParameter(i, values);
}
query.setFirstResult((currentPage - 1) * pageSize);
query.setMaxResults(pageSize);
return query.list();
}

});
}

public List<T> getAll(final Class<T> entityClass, final String orderBy, final boolean isAsc) {
return (List<T>)getHibernateTemplate().execute(new HibernateCallback(){

public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Class clazz = entityClass;

if (clazz == null) {
clazz = getPresistentClass();
}
Criteria criteria = session.createCriteria(clazz);

if (isAsc) {
criteria.addOrder(Order.asc(orderBy));
} else {
criteria.addOrder(Order.desc(orderBy));
}
return criteria.list();
}

});
}

public Class<T> getPresistentClass() {
return presistentClass;
}

public void setPresistentClass(Class<T> presistentClass) {
this.presistentClass = presistentClass;
}

public final String contactPropertyMap(Map<String,Object> propertyMap) {
StringBuilder sql = new StringBuilder(" WHERE 1 = 1 ");
Set<Map.Entry<String,Object>> mapSet = propertyMap.entrySet();
Iterator iterator = mapSet.iterator();
while(iterator.hasNext()) {
Map.Entry entry = (Map.Entry)iterator.next();
sql.append(" AND ");
sql.append(entry.getKey());
sql.append("=");
sql.append("'");
sql.append(entry.getValue());
sql.append("'");

}
return sql.toString();
}

public int delete(String hql) {
return getHibernateTemplate().bulkUpdate(hql);
}







}





分享到:
评论

相关推荐

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

    在实现通用DAO时,反射通常用于动态调用数据库操作的方法,比如SQL查询。例如,在`UsersDAO.java`中,可能有以下代码: ```java public class UsersDAO extends BaseDao&lt;Users&gt; { @Override public void save...

    C#特性标签实现通用Dao层

    在C#编程中,"通用Dao层"是一个常见的设计模式,用于封装数据库操作,使得业务逻辑层能够专注于处理业务规则,而无需关心底层数据访问的细节。本篇将重点探讨如何利用C#的特性(Attribute)标签来实现这一目标,同时...

    泛型通用DAO,可以很简化DAO层的代码

    泛型通用DAO是这种模式的一种优化,它利用了Java 5.0引入的泛型和反射机制,大大简化了DAO层的编码工作,提高了代码的可复用性和可维护性。 泛型是Java中的一种类型系统扩展,它允许在编译时声明参数化的类型,从而...

    JDBCTemplate+JavaPOJO实现通用DAO

    在这个"JDBCTemplate+JavaPOJO实现通用DAO"的项目中,我们将探讨如何利用这两者构建一个通用的DAO层。 首先,Java POJO(Plain Old Java Object)是指那些没有特殊约束的简单Java对象,通常用于表示数据库中的实体...

    java ssh通用DAO另类实现示例

    本示例将探讨一个通用DAO的另类实现方法,旨在提高代码复用性和简化开发过程。 首先,理解SSH框架中的DAO设计模式至关重要。DAO是一种设计模式,它为应用程序提供了一种抽象的接口,以便与数据库进行交互,同时避免...

    hibernate4 通用dao,service

    标题中的“hibernate4 通用dao,service”指的是在Java开发中使用Hibernate框架实现的通用数据访问对象(DAO)和业务服务层(Service)。Hibernate是一个流行的对象关系映射(ORM)工具,它允许开发者使用面向对象的...

    Hibernate通用Dao设计。

    本篇文章将深入探讨Hibernate的通用Dao设计,帮助开发者理解如何利用Hibernate提高代码复用性和可维护性。 在传统的Java应用程序中,DAO(Data Access Object)层是用于封装数据库访问逻辑的地方,它隔离了业务逻辑...

    ssm(Spring-springMVC-Mybatis)通用Dao框架

    SSM(Spring-SpringMVC-Mybatis)通用Dao框架是一个常见的Java Web开发架构,它整合了Spring、SpringMVC和Mybatis三个强大的开源框架,为开发者提供了便捷的数据访问和业务逻辑处理能力。这个框架的使用可以显著提高...

    高仿JPA自定义通用DAO

    自定义通用DAO实现基本的CRUD,比如: public interface BaseDao&lt;T&gt; { int insert(T obj) throws Exception; int update(T obj) throws Exception; int deleteByPrimaryKey(Object key) throws Exception; int ...

    Java源代码一个简单的通用DAO实现(基于hibernate)

    Java源代码 一个简单的通用DAO实现 (基于hibernate)面向应用层按POJO类缓存hibernate的session对象.使用举例: DAO dao = DAOFactory.getDAO(POJO.class);//获得一个全局类单例的DAO实例 dao.save(pojo); 你也可以...

    Hibernate_通用DAO模式,一个写好的dao层

    本资源“Hibernate_通用DAO模式”提供了一种适用于不同类型表单的DAO实现,基于SSH(Struts2、Spring、Hibernate)框架,特别强调简洁、易懂和高可移植性。 首先,SSH框架是Java Web开发中的经典组合,Struts2负责...

    Hibernate 原生通用DAO

    **Hibernate原生通用DAO**是基于Hibernate框架设计的一种简化数据访问操作的方式,它模仿了Spring框架中的`HibernateTemplate`类,旨在提供一个简单易用的DAO(Data Access Object)层,方便开发人员进行数据库操作...

    mybatis 通用DAO 简单实现

    MyBatis 通用DAO(Data Access Object)是一种设计模式,旨在提供一种标准的方式来访问数据库,减少重复代码,提高开发效率。在Java Web开发中,MyBatis作为一个优秀的持久层框架,它支持定制化SQL、存储过程以及...

    Hibernate的通用dao

    **标题:“Hibernate的通用DAO”** 在Java编程领域,Hibernate是一个强大的对象关系映射(ORM)框架,它允许开发者以面向对象的方式处理数据库操作,从而减少了对SQL的直接依赖。通用DAO(Data Access Object)是一...

    SSH中通用dao类

    在这个场景中,"SSH中通用DAO类"指的是在SSH框架下设计和实现的可以应用于多种业务场景的数据访问对象(Data Access Object)类。 DAO层是三层架构或MVC架构中的一个重要部分,主要负责与数据库进行交互,将业务...

    Hibernate通用Dao

    通用dao,简单全面,所有dao都可以继承这个dao.

    通用数据库访问模块,通用DAO类

    通用数据库访问模块(通常称为 DAO,Data Access Object)是一种软件设计模式,用于在应用程序和数据库之间提供一个抽象层。DAO 类的主要目标是隔离业务逻辑层与数据存储层,使得应用程序可以独立于特定的数据库实现...

    hibernate不是泛型的通用DAo1

    然而,为了提高代码的复用性和可维护性,通常会设计一个通用DAO(Data Access Object)层来处理基本的数据操作。"hibernate不是泛型的通用DAo1"这个标题暗示了我们讨论的是一种非泛型化的DAO实现,可能是因为开发者...

    Mybatis整合通用Dao,Mybatis整合通用Mapper,MyBatis3.x整合通用 Mapper3.5.x

    本文将深入探讨如何将MyBatis与通用Dao(Data Access Object)和通用Mapper进行整合,以提高开发效率和代码复用性。我们将以"Mybatis整合通用Dao,Mybatis整合通用Mapper,MyBatis3.x整合通用Mapper3.5.x"为主题,...

Global site tag (gtag.js) - Google Analytics