`
crazy01wind
  • 浏览: 4113 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

hibernate通用方法接口与实现

阅读更多

hibernate通用方法接口(一)

package com.diyjava.dao;

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

/**
 * 一些通用的CRUD方法接口
 * http://www.diyjava.com
 * @author colin
 *
 * @param <T>
 */
public interface BaseDao<T extends Serializable> {
 /**
  * 添加对象
  *
  * @param t
  * @return
  */
 T add(T t);

 /**
  * 修改对象
  *
  * @param t
  * @return
  */
 T update(T t);

 /**
  * 删除对象
  *
  * @param t
  * @return
  */
 T remove(T t);

 /**
  * 按id进行删除对象
  *
  * @param id
  * @return
  */
 T removeById(Serializable id);

 /**
  * 按id进行查询对象
  *
  * @param id
  * @return
  */
 T load(Serializable id);

 /**
  * 按id进行查询对象
  *
  * @param id
  * @param lock
  *            是否锁定对象
  * @return
  */
 T load(Serializable id, bOOlean lock);

 /**
  * 按id进行查询对象
  *
  * @param id
  * @return
  */
 T get(Serializable id);

 /**
  * 查询对象
  *
  * @param first
  *            记录开始位置
  * @param max
  *            返回最大的记录数
  * @return
  */
 List<T> find(int first, int max);

 /**
  * 按条件进行查询
  *
  * @param parameter
  *            属性
  * @param value
  *            属性对应的值
  * @return
  */
 List<T> find(String[] parameter, Object[] value);

 /**
  * 按条件进行查询,返回从first开始的max条记录
  *
  * @param parameter
  *            属性
  * @param value
  *            属性对应的值
  * @param first
  *            记录起始位置
  * @param max
  *            返回最大的记录
  * @return
  */
 List<T> find(String[] parameter, Object[] value, int first, int max);

 /**
  * 按条件进行查询并进行排序,返回从first开始的max条记录
  *
  * @param parameter
  *            属性
  * @param value
  *            属性对应的值
  * @param first
  *            记录起始位置
  * @param max
  *            返回最大的记录
  * @param order
  *            排序
  * @return
  */
 List<T> find(String[] parameter, Object[] value, int first, int max,
   String[][] order);

 /**
  * 查找所有结果
  *
  * @return
  */
 List<T> findAll();
 
 /**
  * 查找所有结果并进行排序
  * @param order
  * @return
  */
 List<T> findAll(String[][] order);
}

 

 

接口实现请参考http://www.diyjava.com/kyjs/ShowArticle.asp?ArticleID=6289

引用请注明出处:http://www.diyjava.com

 

hibernate通用方法接口实现(二)

package com.diyjava.dao;

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

import org.hibernate.Criteria;
import org.hibernate.hibernateException;
import org.hibernate.LockMode;
import org.hibernate.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.orm.hibernate3.hibernateCallback;
import org.springframework.orm.hibernate3.support.hibernateDaoSupport;
import org.springframework.util.Assert;

/**
 * 实现通用的CRUD方法
 * http://www.diyjava.com
 * @author colin
 *
 * @param <T>
 */
public abstract class BaseDaoImpl<T extends Serializable> extends
  hibernateDaoSupport implements BaseDao<T> {
 public Logger log = LoggerFactory.getLogger(getClass());

 private Class<T> persistentClass = null;

 @SuppressWarnings("unchecked")
 public BaseDaoImpl() {
  this.persistentClass = (Class<T>) ((ParameterizedType) getClass()
    .getGenericSuperclass()).getActualTypeArguments()[0];
 }

 public Class<T> getPersistentClass() {
  return persistentClass;
 }

 public T add(T t) {
  Assert.notNull(t);
  gethibernateTemplate().save(t);
  return t;
 }

 public T update(T t) {
  Assert.notNull(t);
  gethibernateTemplate().saveOrUpdate(t);
  return t;
 }

 public T remove(T t) {
  Assert.notNull(t);
  gethibernateTemplate().delete(t);
  return t;
 }

 public T removeById(Serializable id) {
  Assert.notNull(id);
  T entity = load(id);
  gethibernateTemplate().delete(entity);
  return entity;
 }

 public T load(Serializable id) {
  Assert.notNull(id);
  return load(id, false);
 }

 @SuppressWarnings("unchecked")
 public T load(Serializable id, bOOlean lock) {
  Assert.notNull(id);
  T entity = null;
  if (lock) {
   entity = (T) gethibernateTemplate().load(getPersistentClass(), id,
     LockMode.UPGRADE);
  } else {
   entity = (T) gethibernateTemplate().load(getPersistentClass(), id);
  }
  return entity;
 }

 @SuppressWarnings("unchecked")
 public T get(Serializable id) {
  Assert.notNull(id);
  T entity = (T) gethibernateTemplate().get(getPersistentClass(), id);
  return entity;
 }

 @SuppressWarnings("unchecked")
 public List<T> find(final int first, final int max) {
  return (List<T>) gethibernateTemplate().execute(
    new hibernateCallback() {
     public Object doInhibernate(Session session)
       throws hibernateException, SQLException {
      Criteria criteria = session
        .createCriteria(getPersistentClass());
      criteria.setFirstResult(first);
      criteria.setMaxResults(max);
      return criteria.list();
     }
    });
 }

 @SuppressWarnings("unchecked")
 public List<T> find(final String[] parameter, final Object[] value) {
  return (List<T>) gethibernateTemplate().execute(
    new hibernateCallback() {
     public Object doInhibernate(Session session)
       throws hibernateException, SQLException {
      Criteria criteria = session
        .createCriteria(getPersistentClass());
      for (int i = 0; i < parameter.length; i++) {
       criteria.add(Restrictions
         .eq(parameter[i], value[i]));
      }
      return criteria.list();
     }
    });
 }

 @SuppressWarnings("unchecked")
 public List<T> find(final String[] parameter, final Object[] value,
   final int first, final int max) {
  return (List<T>) gethibernateTemplate().execute(
    new hibernateCallback() {
     public Object doInhibernate(Session session)
       throws hibernateException, SQLException {
      Criteria criteria = session
        .createCriteria(getPersistentClass());
      for (int i = 0; i < parameter.length; i++) {
       criteria.add(Restrictions
         .eq(parameter[i], value[i]));
      }
      criteria.setFirstResult(first);
      criteria.setMaxResults(max);
      return criteria.list();
     }
    });
 }

 @SuppressWarnings("unchecked")
 public List<T> find(final String[] parameter, final Object[] value,
   final int first, final int max, final String[][] order) {
  return (List<T>) gethibernateTemplate().execute(
    new hibernateCallback() {
     public Object doInhibernate(Session session)
       throws hibernateException, SQLException {
      Criteria criteria = session
        .createCriteria(getPersistentClass());
      for (int i = 0; i < parameter.length; i++) {
       criteria.add(Restrictions
         .eq(parameter[i], value[i]));
      }//end条件过滤
      for (int j = 0; j < order.length; j++) {
       criteria
         .addOrder(order[j][1]
           .compareToIgnoreCase("asc") == 0 ? Order
           .asc(order[j][0])
           : Order.desc(order[j][0]));
      }//end排序
      criteria.setFirstResult(first);
      criteria.setMaxResults(max);

      return criteria.list();
     }
    });
 }

 @SuppressWarnings("unchecked")
 public List<T> findAll() {
  return gethibernateTemplate().find(
    "from " + getPersistentClass().getName());
 }

 @SuppressWarnings("unchecked")
 public List<T> findAll(final String[][] order) {
  return (List<T>) getHibernateTemplate().execute(new hibernateCallback() {
   public Object doInhibernate(Session session)
     throws hibernateException, SQLException {
    Criteria criteria = session
      .createCriteria(getPersistentClass());
    for (int i = 0; i < order.length; i++) {
     criteria
       .addOrder(order[i][1].compareToIgnoreCase("asc") == 0 ? Order
         .asc(order[i][0])
         : Order.desc(order[i][0]));
    }
    return criteria.list();
   }
  });
 }

}

 

接口请参考http://www.diyjava.com/kyjs/ShowArticle.asp?ArticleID=6288

引用请注明出处:http://www.diyjava.com

分享到:
评论
1 楼 YSOLA4 2011-08-10  
那个~ 想问下实现类为什么要用abstract呢? 有什么好处? 不用abstract的话效果好像也是一样啊?

相关推荐

    hibernate 通用接口架构

    "hibernate 通用接口架构"是指利用Hibernate框架,通过设计DAO(Data Access Object)层的接口来实现业务逻辑与数据访问的解耦,从而提高代码的可复用性和可维护性。 首先,我们来理解DAO层的作用。DAO层作为业务...

    基于泛型的通用Dao接口和hibernate的实现

    基于泛型的通用Dao接口和Hibernate的实现 基于泛型的通用Dao接口是指使用泛型来实现数据访问对象(DAO)的接口,主要是在使用 Hibernate 或 JPA 时使用。泛型可以使得DAO接口更灵活、更通用。 泛型Dao接口的优点:...

    Hibernate泛型DAO接口,大部分通用都已包括

    在实际开发中,为了提高代码的可重用性和可维护性,通常会创建泛型DAO(Data Access Object)接口来处理与数据库交互的通用逻辑。本篇将详细介绍"Hibernate泛型DAO接口,大部分通用都已包括"这一主题。 首先,让...

    hibernate通用查询

    Hibernate通用查询是Java开发中非常重要的一个概念,它极大地简化了数据库操作,使得开发者无需编写大量的SQL语句,即可实现复杂的数据查询。本知识点主要围绕Hibernate的通用查询功能展开,包括其基本原理、优势...

    Hibernate的通用dao

    通用DAO则是这一模式的扩展,提供了一套适用于多种数据实体的通用接口和实现,减少代码重复,提高代码复用性。 **三、Hibernate通用DAO实现** 1. **接口定义**:首先,定义一个通用的DAO接口,如`BaseDao&lt;T&gt;`,...

    Hibernate之API初识及增删改查实现案例hibernate003

    3. **Session接口**:Session是Hibernate的工作单元,相当于JDBC中的Connection,它提供了与数据库交互的方法,如开始和结束事务、保存、更新、删除对象等。在每次业务操作前后,都需要打开和关闭Session。 4. **...

    struts+spring+hibernate通用分页方法

    这个“struts+spring+hibernate通用分页方法”是关于如何在整合这三大框架的项目中实现高效且可复用的分页功能的知识点。 首先,让我们了解分页的基本概念。在Web应用中,特别是在处理大数据量时,分页是一种提高...

    hibernate4 通用dao,service

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

    Hibernate 原生通用DAO

    在传统的Hibernate使用中,我们需要为每个实体类编写大量的CRUD(Create, Read, Update, Delete)方法,而使用原生通用DAO可以减少这部分重复工作,提高开发效率。 在设计原生通用DAO时,通常会包含以下核心功能: ...

    Hibernate通用Dao设计。

    综上所述,Hibernate通用DAO设计的核心在于抽象出共性的数据库操作,并通过泛型和继承等面向对象设计原则,达到代码复用的目的。这样不仅可以降低开发难度,还能提升系统的可维护性,对于大型项目尤其重要。通过学习...

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

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

    封装hibernate统一操作接口

    3. **查询接口**:提供基于HQL(Hibernate Query Language)或SQL的查询方法,如`findByExample()`, `findByName()`, `findAll()`。 4. **分页查询**:支持`listByPage(int start, int pageSize)`,便于数据量大的...

    hibernate不是泛型的通用DAo1

    `DynamicDaoImpl`可能是实现了`DynamicDao`接口的具体类,它包含了与Hibernate集成的逻辑,可以处理不同类型的实体。而`PageBean`可能是一个用于分页查询的辅助类,封装了当前页、每页数量以及数据列表等信息。 ...

    Hibernate+Struts+Spring 实现的通用分页查询

    这个接口定义了分页查询的规范,不同的数据访问对象(DAO)可以根据此接口实现具体的分页查询逻辑。 然后,是`PageModelDaoImpl.java`,它是`IPageModelDao`接口的实现类。这个类继承自`HibernateDaoSupport`,利用...

    spring hibernate整合的底层数据操作方法

    总结,Spring与Hibernate的整合极大地提高了开发效率,通过Spring的IoC和AOP特性,我们可以轻松地管理数据访问层,实现通用的增删改查方法。同时,Spring Data的加入让查询更加简洁,降低了对SQL的依赖。在实际项目...

    hibernate通用dao

    **hibernate通用DAO(Data Access Object)**是软件开发中的一个重要概念,它主要用于数据库操作的抽象,使得业务逻辑层可以无需关注具体的SQL语句,从而实现数据访问的解耦。在Java EE应用中,Hibernate作为一款...

    Spring+Hibernate实现)Hibernate公用类

    本文将详细解析如何利用Spring和Hibernate来实现一个通用的DAO(Data Access Object)层,以提高代码复用性和项目开发效率。 首先,让我们了解Spring框架。Spring是一个全面的企业级应用开发框架,提供了依赖注入...

    Struts+Spring+Hibernate通用分页解决方案

    7. **文件`struts+spring+hibernate通用分页方法.doc`**:这个文档可能包含了具体的实现步骤、代码示例和注意事项,详细阐述如何将Struts、Spring和Hibernate整合起来,构建一个通用的分页功能。读者可以参考文档中...

Global site tag (gtag.js) - Google Analytics