`
zqleye
  • 浏览: 41813 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Hibernate底层操作

阅读更多

package com.soft.common;

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

import com.soft.Exception.CommonException;
import com.soft.query.HqlExecute;

/**
 *
 * @author  通用接口
 */
public interface ICommon<POJO> {
 /**
  * 添加对象
  *
  * @param Object
  * @throws CommonException
  */
 public abstract void insert(POJO obj) throws CommonException;

 /**
  * 修改对象
  *
  * @param Object
  * @throws CommonException
  */
 public abstract void update(POJO obj) throws CommonException;

 /**
  * 删除对象
  *
  * @param object
  * @throws CommonException
  */
 public abstract void delete(POJO obj) throws CommonException;

 /**
  * 根据主键查询对象
  *
  * @param Class
  * @param id
  * @return Object
  * @throws CommonException
  */
 public abstract POJO getById(Class cl, Serializable id)
   throws CommonException;

 /**
  * 根据主键删除对象
  *
  * @param Class
  * @param id
  * @throws CommonException
  */
 public abstract void deleteById(Class cl, Serializable id)
   throws CommonException;

 /**
  * 批量删除
  *
  * @param Class
  * @param serializables(id数组)
  * @throws CommonException
  */
 public abstract void deletebatch(Class cl, Serializable... serializables)
   throws CommonException;

 /**
  * 总记录条数
  *
  * @param Class
  * @return int
  * @throws CommonException
  */
 public abstract int gettotal(Class cl) throws CommonException;
 
 /**
  * 总记录条数
  *
  * @param Class 类名
  * @prama String 状态属性名
  * @return int
  * @throws CommonException
  */
 public abstract int gettotal(Class cl,String state) throws CommonException;

 /**
  * 总页数,总记录
  *
  * @param Class
  * @param pagesize
  * @return int[]
  * @throws CommonException
  */
 public abstract int[] getpagetotal(Class cl, int pagesize)throws CommonException;
 
 /**
  * 总页数,总记录
  * @param Class 类名
  * @prama String 状态属性名
   * @param pagesize ��大小
  * @return int[]
  * @throws CommonException
  */
 public abstract int[] getpagetotal(Class cl,String state, int pagesize)throws CommonException;
 /**
  * 查询
  * @param hqlexe
  * @return
  * @throws CommonException
  */
 public abstract List query(HqlExecute hqlexe) throws CommonException;
}
-----------------------------------------------------------------------------------------------------------------

package com.soft.common;

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

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

import com.soft.Exception.CommonException;
import com.soft.hbm.HibernateSessionFactory;
import com.soft.query.HqlExecute;
import com.soft.query.QueryException;

/**
 *
 * @author 通用接口实现类
 */
public class Common<POJO> extends HibernateDaoSupport  implements ICommon<POJO>{
 

 /**
  * 实现通用接口:删除
  */
 public void delete(POJO obj) throws CommonException {
  try {
   this.getHibernateTemplate().delete(obj);
  } catch (HibernateException e) {
   e.printStackTrace();
   throw new CommonException(e);
  }

 }

 /**
  * 实现通用接口:根据主键删除对象
  */
 public void deleteById(Class cl, Serializable id) throws CommonException {
  try {
   this.getHibernateTemplate().delete(this.getHibernateTemplate().load(cl, id));
  } catch (HibernateException e) {
   e.printStackTrace();
   throw new CommonException(e);
  }

 }

 /**
  * 实现通用接口:批量删除
  */
 public void deletebatch(Class cl, Serializable... serializables)
   throws CommonException {
  try {
   
   // 连接参数
   String ins = "";
   for (Serializable a : serializables) {
    ins += a + ",";
   }
   if (ins.endsWith(",")) {
    ins = ins.substring(0, ins.length() - 1);
   }
   final  StringBuffer sb = new StringBuffer("delete from ").append(
     cl.getSimpleName()).append(" as a where a.id in(").append(
     ins).append(")");
   
   this.getHibernateTemplate().executeFind(new HibernateCallback(){

    public Object doInHibernate(Session session) throws HibernateException, SQLException {
     try {
      session.createQuery(sb.toString());
      return session.createQuery(sb.toString()).executeUpdate();
     } catch (RuntimeException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      throw new HibernateException(e);
     }
    }
   });
   
  } catch (HibernateException e) {
   e.printStackTrace();
   throw new CommonException(e);
  }
 }

 /**
  * 实现通用接口:根据主键查询对象
  *
  */
 public POJO getById(Class cl, Serializable id) throws CommonException {
  try {
   return (POJO) this.getHibernateTemplate().get(cl, id);
  } catch (HibernateException e) {
   e.printStackTrace();
   throw new CommonException(e);
  }
 }

 /**
  * 实现通用接口:总页数,总记录
  *  参数:class:类名
  * pagesize:页大小
  */
 public int[] getpagetotal(Class cl, int pagesize) throws CommonException {
  int[] a = null;
  try {
   int total = this.gettotal(cl);

   a = new int[] {
     total % pagesize == 0 ? total / pagesize : total / pagesize
       + 1, total };
  } catch (CommonException e) {
   e.printStackTrace();
   throw new CommonException(e);
  }
  return a;
 }

 /**
  * 实现通用接口:总记录条数(getSimpleName得到对象)(在表中�]有���B的)
  *  参数:class:类名
  */
 public int gettotal(Class cl) throws CommonException {
  int total = 0;
  try {
   
   final StringBuffer hql = new StringBuffer("select count(a) from ")
     .append(cl.getSimpleName()).append(" a");
   total=Integer.parseInt((this.getHibernateTemplate().execute(new HibernateCallback(){

    public Object doInHibernate(Session session) throws HibernateException, SQLException {
     return session.createQuery(hql.toString()).uniqueResult();
    }
    
   })).toString());
   System.out.println("com total:"+total);
   return total;
  } catch (DataAccessException e) {
   e.printStackTrace();
   throw new CommonException(e);
  }
 }
 /**
  * 实现通用接口:总记录条数(getSimpleName得到对象)(在表中有���B的),要传个状态字段
  *  参数:class:类名
  * State:状态属性
  *
  */
 public int gettotal(Class cl,String state) throws CommonException {
  int total = 0;
  try {
   final StringBuffer hql = new StringBuffer("select count(a) from ")
     .append(cl.getSimpleName()).append(" a").append(" where a.").append(state).append("<>1");
   
   total=Integer.parseInt((this.getHibernateTemplate().execute(new HibernateCallback(){

    public Object doInHibernate(Session session) throws HibernateException, SQLException {
     try {
      return session.createQuery(hql.toString()).uniqueResult();
     } catch (RuntimeException e) {
      e.printStackTrace();
      throw new HibernateException(e);
     }
    }
   }
   )).toString());
   System.out.println("total:"+total);
   return total;
   
  } catch (DataAccessException  e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   throw new CommonException(e);
  }
 }
 
 /**
  * 实现通用接口:总页数,总记录(有状态字段的)
  * 参数:class:类名
  * State:状态属性
  * pagesize:页大小
  */
 public int[] getpagetotal(Class cl,String state, int pagesize) throws CommonException {
  int[] a = null;
  try {
   int total = this.gettotal(cl,state);

   a = new int[] {
     total % pagesize == 0 ? total / pagesize : total / pagesize
       + 1, total };
  } catch (CommonException e) {
   e.printStackTrace();
   throw new CommonException(e);
  }
  return a;
 }
 
 
 /**
  * 实现通用接口:添加对象
  */
 public void insert(POJO obj) throws CommonException {
  try {
   this.getHibernateTemplate().save(obj);
  } catch (HibernateException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   throw new CommonException(e);
  }

 }

 /**
  * 实现通用接口:修改对象
  */
 public void update(POJO obj) throws CommonException {
  try {
   this.getHibernateTemplate().update(obj);
  } catch (HibernateException e) {
   e.printStackTrace();
   throw new CommonException(e);
  }

 }
 /**
  * 实现通用接口:查询
  */
 public List query(final  HqlExecute hqlexe) throws CommonException {
  
  try {
   List list=this.getHibernateTemplate().executeFind(new HibernateCallback(){
    public Object doInHibernate(Session session) throws HibernateException, SQLException {
     try {
      return hqlexe.execute(session);
     } catch (QueryException e) {
      e.printStackTrace();
      throw new HibernateException(e);
     }
    }
   });
   return list;
  } catch (DataAccessException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   throw new CommonException(e);
  }
 }

}

分享到:
评论

相关推荐

    Hibernate底层技术简介 CGLIB

    在Hibernate的底层实现中,CGLIB(Code Generation Library)起到了至关重要的作用。CGLIB是一个代码生成库,它基于ASM库,但提供了更高级别的抽象和更加便捷的API。 首先,CGLIB扩展了ASM的Visitor模式。ASM是一个...

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

    下面我们将深入探讨Spring与Hibernate整合的底层数据操作方法。 一、Spring与Hibernate整合基础 1. 依赖管理:整合Spring和Hibernate首先需要在项目中引入相应的依赖,通常包括Spring的核心库、Spring的数据访问/...

    Hibernate底层数据库操作函数BaseDao+具体实例

    在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它简化了数据库操作,使得开发者可以更专注于业务逻辑而不是数据库层面的细节。`BaseDao`是常见的一种设计模式,用于封装Hibernate的基本数据库...

    Hibernate操作持久化对象

    Hibernate通过将对象模型与关系数据库模型之间的映射进行自动化处理,极大地简化了数据访问层(DAO)的实现,让开发者可以专注于业务逻辑,而非底层的数据库操作。 Hibernate是什么? Hibernate是一个基于JDBC的ORM...

    Hibernate操作数据库的步骤

    通过将对象映射到数据库表,Hibernate使得开发人员可以专注于业务逻辑,而无需关注底层的SQL语句。以下是对"Hibernate操作数据库的步骤"的详细解释: 1. **读取并解析配置文件**:在Hibernate中,配置文件(通常是`...

    Hibernate操作数据库的方法

    ession = sessionFactory.openSession(); //开始事务Transaction tx = session.beginTransaction();...通过熟练掌握 Hibernate,开发者可以更专注于业务逻辑,而不是底层的 SQL 操作,从而提高开发效率和代码质量。

    hibernate 简单CRUD操作

    总结来说,Hibernate通过提供面向对象的API,极大地降低了数据库操作的复杂性,使得开发人员可以更加专注于业务逻辑,而不是底层的数据访问细节。`testHiberbateJava`项目就是一个很好的学习资源,通过实际操作,你...

    Spring4+SpringMVC+mysql+memcached【同时支持mybatis+hibernate两种底层操作框架】

    在构建Web应用程序时,"Spring4+SpringMVC+mysql+memcached【同时支持mybatis+hibernate两种底层操作框架】"是一个常见的技术栈,它涵盖了多个关键组件,为高效、灵活的开发提供了坚实的基础。以下是这个技术组合中...

    Hibernate操作Oarcle中Clob、Blob字段小结

    这篇博客文章“Hibernate操作Oracle中Clob、Blob字段小结”可能会探讨如何在Hibernate中有效地处理这两种类型的数据。 1. **Clob与Blob的理解**: - Clob:Clob是用于存储大量字符数据的类型,例如长篇文章、XML...

    hibernate-prj1

    1、Hibernate 是一个 ORM(Object-Relational Mapping)框架,... 5、由于 Hibernate 底层是基于 JDBC 的,因此在应用程序中使用 Hibernate 执行 持久化操作时也需要导入相关的 JDBC 驱动(例如 MySQL 数据库驱动)。

    java使用hibernate操作数据库jar

    Java使用Hibernate操作数据库是现代Java应用中常见的技术实践,Hibernate作为一个强大的对象关系映射(ORM)框架,极大地简化了数据库的交互。它允许开发者用Java对象来表示数据库中的记录,而无需关心底层SQL的实现...

    封装hibernate统一操作接口

    通过这样的封装,开发者可以专注于业务逻辑,而无需关心底层的数据库操作细节,大大提高了开发效率和代码质量。在"xjpa-master"项目中,我们可以看到这种封装思想的实践,对于快速开发和维护是非常有益的。

    hibernate学习资料大全

    Hibernate 提供了一种将Java对象模型与关系数据库之间的映射机制,使得开发者可以使用面向对象的方式来操作数据库,而无需关心底层SQL语句。理解ORM的概念是学习Hibernate的第一步。 2. **Hibernate配置**: 在...

    HIBERNATE FOR NETBEANS 数据操作方法

    这个过程简化了数据库操作,使得开发者可以专注于业务逻辑,而不是底层的SQL细节。随着对Hibernate的深入理解和实践,你可以进一步探索更多高级特性,如懒加载、级联操作、多表关联等,提升开发效率和代码质量。

    hibernate学习源代码祝你提高

    ORM 是一种编程技术,它将面向对象的编程模型与关系数据库模型进行映射,使得开发者可以使用对象来操作数据库,而无需关注底层的 SQL 语句。Hibernate 作为 ORM 的代表,简化了 Java 应用程序对数据库的操作。 2. ...

    .hibernate 框架介绍

    在Hibernate框架中,ORM模型简化了数据库查询的过程,开发者可以利用ORM框架提供的查询接口,以对象的方式操作数据,而无需深入了解数据库的底层结构。这样,开发者能够专注于业务逻辑的实现,而不是繁琐的数据库...

    hibernate-release-5.2.10

    通过学习和使用Hibernate,开发者可以更专注于业务逻辑,而不是底层的数据库操作,从而提高开发效率和代码质量。在SSH框架下,Hibernate与其他两个组件的协同工作,可以构建出高效、可维护的企业级应用。

    达梦Hibernate方言2.0至4.0

    在实际开发中,使用“达梦Hibernate方言2.0至4.0”可以确保你的Java应用能无缝地在达梦数据库上运行,无需关注底层SQL的细节。开发人员可以通过Java对象直接操作数据库,提高了开发效率,同时减少了数据库依赖相关的...

    hibernate-extensions和Middlegen-Hibernate

    在Java的持久化层开发中,Hibernate作为一款强大的ORM(对象关系映射)框架,极大地简化了数据库操作。然而,手动编写实体类和映射文件(hbm.xml)的过程仍需消耗大量时间。为了解决这一问题,两个工具——hibernate...

    hibernate 视图

    Hibernate是一个强大的Java持久化框架,它简化了数据库操作,使得开发者可以更专注于业务逻辑而不是数据访问层的细节。在数据库层面,视图是预定义的SQL查询结果,它提供了对数据的一种抽象,允许我们以特定的方式...

Global site tag (gtag.js) - Google Analytics