`

hibernateDAOimpl

阅读更多

/*******************************************************************************
  ******************************************************************************/

import java.util.List;
import java.util.Iterator;
import java.sql.Connection;
import javax.sql.DataSource;

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

import com.insigma.common.util.InsigmaException;
import com.opensource.log.NewLogger;

import java.sql.SQLException;
import java.sql.Statement;

public class HibernateDaoImpl extends HibernateDaoSupport implements
  HibernateBaseDao {
 /** 注入的数据源 **/
 protected DataSource dataSource;

 public void setDataSource(DataSource dataSource) {
  this.dataSource = dataSource;
 }

 public DataSource getDataSource() {
  return this.dataSource;
 }

 public HibernateDaoImpl() {
 }

 /**
  * 存储对象
  */
 public void save(Object obj) throws InsigmaException {
  save(new Object[] { obj });
 }

 /**
  * 存储对象数组
  */
 public void save(Object[] obj) throws InsigmaException {
  for (int i = 0; i < obj.length; i++) {
   if (obj[i] == null)
    throw new InsigmaException("存储对象出错,对象为空!\n");
   getHibernateTemplate().save(obj[i]);
  }
  getHibernateTemplate().flush();
 }

 /**
  * 批量存储对象
  */
 public void save(List obj) throws InsigmaException {
  for (int i = 0; i < obj.size(); i++) {
   if (obj.get(i) == null)
    throw new InsigmaException("批量存储对象出错,对象为空!\n");
   getHibernateTemplate().save(obj.get(i));
  }
  getHibernateTemplate().flush();

 }

 /**
  * 批量更新对象
  */
 public void update(List obj) throws InsigmaException {
  for (int i = 0; i < obj.size(); i++) {
   if (obj.get(i) == null)
    throw new InsigmaException("更新对象出错,对象为空!\n");
   getHibernateTemplate().saveOrUpdate(obj.get(i));

  }
  getHibernateTemplate().flush();
 }

 /**
  * 更新对象数组
  */
 public void update(Object[] obj) throws InsigmaException {
  for (int i = 0; i < obj.length; i++) {
   if (obj[i] == null)
    throw new InsigmaException("更新对象出错,对象为空!\n");
   getHibernateTemplate().update(obj[i]);
  }
  getHibernateTemplate().flush();
 }

 /**
  * 更新对象
  */
 public void update(Object obj) throws InsigmaException {
  update(new Object[] { obj });
 }

 /**
  * 执行预处理HQL,如update tab1 set name=?,value=? where id=12
  * 则list的对象为"zhang","qing"
  */
 public void exeHQL(String hql, List list) throws InsigmaException {
  Session ses = getSession();
  try {
   Query query = ses.createQuery(hql);
   Object obj = null;
   for (int i = 0; i < list.size(); i++) {
    obj = list.get(i);
    query.setParameter(i, obj);
   }
   query.executeUpdate();
  } catch (Exception e) {
   NewLogger.getInstance().writeError("执行预处理HQL出错!\n"+e.getMessage(), e);
   throw new InsigmaException(e.getMessage(), e);
  } finally {
   releaseSession(ses);
  }

 }

 /**
  * 执行批量事务,先存储,后更新/删除
  */
 public void exeHQL(Object obj, List list) throws InsigmaException {
  if (obj != null)
   save(obj);
  exeHQL(list);
 }

 /**
  * 先存储对象数据,再执行更新或删除,批量事务执行
  */
 public void exeHQL(Object[] obj, List list) throws InsigmaException {
  if (obj != null)
   save(obj);
  exeHQL(list);
 }

 /**
  * 执行更新或删除HQL语句
  */
 public void exeHQL(String hql) throws InsigmaException {
  Session ses = getSession();
//  try {
   Query query = ses.createQuery(hql);
   query.executeUpdate();
//  } catch (Exception e) {
//   NewLogger.getInstance().writeError("执行更新或删除HQL语句出错!\n"+e.getMessage(), e);
//   throw new InsigmaException(e.getMessage(), e);
//  }
//  finally {
//   releaseSession(ses);
//  }

 }

 /**
  * 执行更新或删除HQL语句
  */
 public void exeHQL(List hql) throws InsigmaException {
  Session ses = getSession();
//  try {
   String sql;
   for (Iterator<String> it = hql.iterator(); it.hasNext();) {
    sql = it.next();
    NewLogger.getInstance().writeDebug(sql);
    Query qr = ses.createQuery(sql);
    qr.executeUpdate();
   }
//  } catch (Exception e) {
//   NewLogger.getInstance().writeError("批量更新或删除出错!"+e.getMessage(), e);
//   throw new InsigmaException(e.getMessage(), e);
//  } finally {
//   releaseSession(ses);
//  }

 }

 /**
  * 查询HQL语句
  */
 public List findObjs(String HQL) throws InsigmaException {
  List list = null;
//  try {
   list = getHibernateTemplate().find(HQL);
//  } catch (DataAccessException e) {
//   NewLogger.getInstance().writeError("查询HQL出错!\n" + e.getMessage(), e);
//   throw new InsigmaException(e.getMessage(), e);
//  }
  return list;

 }

 /**
  * 预编译查询HQL
  */
 public List findObjs(String hql, Object[]prams) throws InsigmaException {
  List reList = null;
//  try {
   reList = getHibernateTemplate().find(hql, prams);
//  } catch (DataAccessException e) {
//   NewLogger.getInstance().writeError("预编译查询HQL出错!\n" + e.getMessage(), e);
//   throw new InsigmaException(e.getMessage(), e);
//  }
  return reList;

 }

 /*
  * 分页查询HQL
  *
  * @
  *
  * @see com.insigma.common.dao.HibernateBaseDao#findObjs(java.lang.String,
  * int, int)
  */
 /**
  * 分页查询HQL
  *
  * @param hql
  *            hql语句
  * @param pageFirst
  *            第几页
  * @param pageRow
  *            每页多少行
  */
 public List findObjs(String hql, int pageFirst, int pageRow)
   throws InsigmaException {
  List list = null;
  Session ses = getSession();
//  try {
   Query qr = ses.createQuery(hql);
   qr.setReadOnly(true);
   qr.setFirstResult((pageFirst - 1) * pageRow);
   qr.setMaxResults(pageRow);
   list = qr.list();
//  } catch (DataAccessException e) {
//   e.printStackTrace();
//   throw new InsigmaException("分页查询出错!\n" + e.getMessage(), e);
//  }
//
//  finally {
//   releaseSession(ses);
//  }
  return list;

 }

 /**
  * 存储并执行HQL
  */
 public void saveObjAndExeHql(List hql, List obj) throws InsigmaException {
  String sql;
  Session ses = getSession();
//  try {
   for (Iterator it = hql.iterator(); it.hasNext();) {
    sql = (String) it.next();
    Query qr = ses.createQuery(sql);
    qr.executeUpdate();
   }
   Object object;
   for (Iterator it = obj.iterator(); it.hasNext();) {
    object = it.next();
    getSession().save(object);
   }
//  } catch (Exception e) {
//   e.printStackTrace();
//   throw new InsigmaException("存储并执行HQL时出错!\n" + e.getMessage(), e);
//  }

//  finally {
//   releaseSession(ses);
//  }

 }

 /**
  * 查询共计记录数
  */
 public int getMaxRow(final String hql) throws InsigmaException {
  int maxRow = (Integer)getHibernateTemplate().execute(new HibernateCallback(){
    public Object doInHibernate(Session session)
      throws HibernateException, SQLException {
     Query qr = getSession().createQuery(hql);
     List list = qr.list();
     int maxRow = 0;
     if (list.size() > 0) {
      String s = String.valueOf(list.get(0));
      if ((s == null) || (s.equals("")))
       s = "0";
      maxRow = Integer.parseInt(s);// ((Integer)
      
     }
     return new Integer(maxRow);
    }
   });
  return maxRow;

 }

 /**
  * 得到数据源连接
  */
 public Connection getConnection() throws InsigmaException {
  Connection con = null;
//  try {
   con = getSession().connection();
//  } catch (Exception e) {
//   e.printStackTrace();
//   throw new InsigmaException("得到数据源连接时出错!\n" + e.getMessage(), e);
//  }
  return con;

 }

 /**
  * 关闭数据源连接
  */
 public void closeConnection() throws InsigmaException {
  Connection con = null;
  try {
   con = getDataSource().getConnection();
   if (con != null) {
    con.close();
   }
  } catch (SQLException e) {
//   e.printStackTrace();
   throw new InsigmaException("关闭数据源连接时出错!\n" + e.getMessage(), e);
  }

 }

 /**
  * 得到Hibernate的Session
  *
  * @return Session
  */
 public Session getHSession() throws InsigmaException {
  Session s = getHibernateTemplate().getSessionFactory().openSession();
  return s;
 }

 /**
  * 关闭Hibernate的Session
  *
  * @param s
  *            Session
  * @throws InsigmaException
  */
 public void closeHSession(Session s) throws InsigmaException {
  if (s != null) {
   s.close();
  }
 }

 /**
  * 关闭输入的连接
  */
 public void closeConnection(Connection conn) throws InsigmaException {

  try {

   if (conn != null) {
    conn.close();
   }
  } catch (SQLException e) {
//   e.printStackTrace();
   throw new InsigmaException("关闭连接时出错!\n" + e.getMessage(), e);
  }

 }

 /**
  * 执行存储过程
  *
  * @param proc
  *            如:
  */
 public void runProc(String proc) throws InsigmaException {
  Connection conn = null;
  Statement st = null;
  Session ses = getSession();
  try {
   conn = ses.connection();
   st = conn.createStatement();
   st.execute("{call " + proc + "}");
  } catch (Exception e) {
//   e.printStackTrace();
   throw new InsigmaException("执行存储过程时出错!\n" + e.getMessage(), e);
  } finally {
   try {
    if (st != null) {
     st.close();
    }
    if (conn != null) {
     conn.close();
    }
    releaseSession(ses);
   } catch (SQLException e) {
//    e.printStackTrace();
    throw new InsigmaException("关闭数据连接出错!\n" + e.getMessage(), e);
   }
  }
 }

  public Object load(String hql) throws InsigmaException {
    Session ses = getSession();
    Query q = ses.createQuery(hql);
    return q.uniqueResult();
  }

 /* (non-Javadoc)
  * @see com.insigma.common.dao.HibernateBaseDao#findObjs(org.hibernate.criterion.DetachedCriteria)
  */
 public List findObjs(DetachedCriteria criteria) throws InsigmaException {
  // TODO Auto-generated method stub
  List list = getHibernateTemplate().findByCriteria(criteria);
  return list;
 }

 /* (non-Javadoc)
  * @see com.insigma.common.dao.HibernateBaseDao#findObjs(org.hibernate.criterion.DetachedCriteria, int, int)
  */
 public List findObjs(DetachedCriteria criteria, int first, int max)
   throws InsigmaException {
  // TODO Auto-generated method stub
  List list = getHibernateTemplate().findByCriteria(criteria, first, max);
  return list;
 }
}

分享到:
评论

相关推荐

    前端-后端java的Util类的工具类

    │ HibernateDaoImpl.java │ HibernateSessionFactory.java │ HibernateUtil.java │ JsonUtil.java │ list.txt │ log4j.properties │ messageResource_zh_CN.properties │ spring.xml │ struts.xml │ ├─...

    node-v7.7.2-linux-x86.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    前后端分离的毕业论文(设计)管理系统 (SpringBoot+Vue)

    关于基于SpringBoot和Vue的毕业论文(设计)管理系统,到了一些相关的资源和示例项目,这些资源可能对您的毕业设计有所帮助。 1. **SpringBoot+Vue的三只松鼠商城**: 这个项目是一个基于SpringBoot和Vue的在线购物系统,采用了前后端分离的架构模式。系统实现了管理员模块和用户模块,包括用户管理、地址管理、订单管理、商品管理、支付功能等。这个项目是一个B2C电商平台,使用了MySQL和Redis数据库。 2. **大学生校园社团管理系统**: 这是一个基于SpringBoot和Vue的校园社团管理系统,旨在简化社团报名和组织活动的流程。系统包括用户管理、社团管理、活动信息管理等功能。该项目展示了如何使用前后端分离架构来构建一个校园社团管理系统。 3. **智慧宿舍管理系统**: 这个项目是基于SpringBoot和Vue的智慧宿舍管理系统,旨在提高宿舍管理的效率和便利性。系统包括学生宿舍信息管理、设备监控、安全管理和生活服务等功能。该项目展示了如何使用前后端分离架构来构建一个智能宿舍管理系统。 这些项目可以为您的毕业设计提供灵感和实际的技术指导。您可以

    238.html

    238.html

    基于tensorflow深度学习的地理位置的命名实体识别.zip

    基于tensorflow深度学习的地理位置的命名实体识别.zip

    优秀项目 基于STM32单片机+Python+OpenCV的二自由度人脸跟踪舵机云台源码+详细文档+全部数据资料.zip

    【资源说明】 优秀项目 基于STM32单片机+Python+OpenCV的二自由度人脸跟踪舵机云台源码+详细文档+全部数据资料.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    文件I/O基础-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

    文件I/O基础-I.MX6U嵌入式Linux C应用编程学习笔记基于正点原子阿尔法开发板

    基于深度神经网络的图像分类任务.zip

    基于深度神经网络的图像分类任务.zip

    强化学习基准代码,已经针对Tensoflow2.x版本修改,可以直接使用

    强化学习基准代码,已经针对Tensoflow2.x版本修改,可以直接使用

    node-v7.7.4-linux-ppc64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    DZT0227-2010 地质岩心钻探规程.pdf

    DZT0227-2010 地质岩心钻探规程.pdf

    自动泊车之AVM环视系统算法及其框架.pdf

    自动泊车之AVM环视系统算法及其框架

    HTML+CSS+JS精品网页模板H70.rar

    HTML+CSS+JS精品网页模板,设置导航条、轮翻效果,鼠标滑动效果,自动弹窗,点击事件、链接等功能;适用于大学生期末大作业或公司网页的设计制作。响应式网页,可以根据不同的设备屏幕大小自动调整页面布局; 支持如Dreamweaver、HBuilder、Text 、Vscode 等任意html编辑软件进行编辑修改; 支持包括IE、Firefox、Chrome、Safari主流浏览器浏览; 下载文件解压缩,用Dreamweaver、HBuilder、Text 、Vscode 等任意html编辑软件打开,只需更改源代码中的文字和图片可直接使用。图片的命名和格式需要与原图片的名字和格式一致,其他的无需更改。如碰到HTML5+CSS+JS等专业技术问题,以及需要对应行业的模板等相关源码、模板、资料、教程等,随时联系博主咨询。 网页设计和制作、大学生网页课程设计、期末大作业、毕业设计、网页模板,网页成品源代码等,5000+套Web案例源码,主题涵盖各行各业,关注作者联系获取更多源码; 更多优质网页博文、网页模板移步查阅我的CSDN主页:angella.blog.csdn.net。

    高分项目 基于STM32单片机的窗户控制系统APP源代码+项目资料齐全+教程文档.zip

    【资源概览】 高分项目 基于STM32的窗户控制系统APP源代码+项目资料齐全+教程文档.zip高分项目 基于STM32的窗户控制系统APP源代码+项目资料齐全+教程文档.zip高分项目 基于STM32的窗户控制系统APP源代码+项目资料齐全+教程文档.zip 【资源说明】 高分项目源码:此资源是在校高分项目的完整源代码,经过导师的悉心指导与认可,答辩评审得分高达95分,项目的质量与深度有保障。 测试运行成功:所有的项目代码在上传前都经过了严格的测试,确保在功能上完全符合预期,您可以放心下载并使用。 适用人群广泛:该项目不仅适合计算机相关专业(如电子信息、物联网、通信工程、自动化等)的在校学生和老师,还可以作为毕业设计、课程设计、作业或项目初期立项的演示材料。对于希望进阶学习的小白来说,同样是一个极佳的学习资源。 代码灵活性高:如果您具备一定的编程基础,可以在此代码基础上进行个性化的修改,以实现更多功能。当然,直接用于毕业设计、课程设计或作业也是完全可行的。 欢迎下载,与我一起交流学习,共同进步!

    Windows 系统下 Xshell 安装使用教程

    附件是Windows 系统下 Xshell 安装使用教程,仅供交流学习使用,无任何商业目的! Xshell 是一款功能丰富的 SSH 客户端,除了基本的远程命令行访问,还提供了许多高级功能,如标签式界面、强大的脚本功能等。通过实践和探索,你可以更深入地了解 Xshell 的各种功能。

    node-v0.12.17-x86.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v7.1.0-linux-arm64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    基于深度学习的机器翻译模型.zip

    基于深度学习的机器翻译模型.zip

    stm32 嵌入式RTOS

    e-kernel for stm32h7xx, 适用stm32h7xx系列MCU,简洁好用的嵌入式RTOS

    附件1-2-山东煤矿安全监察局_煤矿安全监控系统、煤矿井下作业人员管理系统联网规范.pdf

    附件1-2-山东煤矿安全监察局_煤矿安全监控系统、煤矿井下作业人员管理系统联网规范.pdf

Global site tag (gtag.js) - Google Analytics