`

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;
 }
}

分享到:
评论

相关推荐

    Hibernate的通用dao

    3. **方法实现**:在`HibernateDaoImpl&lt;T&gt;`中,为`BaseDao&lt;T&gt;`接口中的每个方法提供具体实现,例如`save()`使用`session.save()`或`session.saveOrUpdate()`,`findById()`使用`session.get()`,`update()`使用`...

    _CXF学习高级篇2.doc

    public class HibernateDaoImpl extends HibernateDaoSupport implements HibernateDao { // CRUD方法的具体实现 ... } ``` 在这个实现类中,每个方法都直接调用了`getHibernateTemplate()`提供的便捷方法来执行...

    Spring/泛型Hibernate的实现

    public class HibernateDaoImpl, PK extends Serializable&gt; implements IHibernateDao, PK&gt; { private HibernateTemplate hibernateTemplate; public void setHibernateTemplate(HibernateTemplate ...

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

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

    《CSS样式表行为手册》中文chm最新版本

    CSS样式表里重点讲述“行为”功能的一本CHM参考手册,很实用方便,内容也很丰富,收藏一下哦!

    1-中国各地区-固定资产投资-房地产开发投资情况(1999-2020年)-社科数据.zip

    中国各地区固定资产投资中的房地产开发投资数据集涵盖了1999至2020年的详细统计信息。该数据集包含了全国各城市地级市州的房地产开发投资情况,这些数据对于理解中国城市化进程、经济发展和房地产市场趋势至关重要。数据集中的指标包括年份、地区以及对应的房地产开发投资额(以亿元为单位),这些数据来源于中国区域统计年鉴及各省市统计年鉴。通过这些数据,研究者和决策者可以深入了解不同地区的经济动态,评估房地产市场的健康状况,并据此制定相应的政策和战略。这些数据不仅有助于宏观经济分析,还能为房地产开发商提供市场进入和扩张的决策支持。

    1-中国各地区数字经济发展对环境污染的影响数据(2011-2021年)-社科数据.zip

    中国各地区数字经济发展对环境污染的影响数据集(2011-2021年)提供了深入分析数字经济与环境污染关系的实证数据。该数据集涵盖了中国各地区在数字经济发展水平、环境污染物排放量、人口与经济指标、外资利用情况以及绿色专利指标等多个维度的数据。具体来说,数据集包括了行政区划代码、年份、所属省份等基本信息,以及数字经济水平熵值法、PM2.5均值、工业烟粉尘排放量、工业二氧化硫排放量、工业废水排放量等关键指标。此外,数据集还涉及了人口密度、人均地区生产总值、实际利用外资额占GDP之比、科学支出占比等经济和人口统计数据,以及绿色专利申请和授权总量等创新指标。这些数据不仅有助于研究者探讨数字经济对环境污染的直接影响,还能分析其潜在的中介机制和影响因素,为理解数字经济如何影响环境质量提供了宝贵的数据资源。

    1-中国各区县-工业行业企业数2004-2020年-社科数据.zip

    中国各区县工业行业企业数数据集覆盖了2004至2020年的时间跨度,提供了全国范围内区县级工业企业数量的详细统计。这些数据不仅能够反映中国工业企业的发展趋势和分布状况,而且对于研究工业行业的区域差异、发展质量和效益具有重要意义。数据集中包含了省份、地区、时间以及工业行业企业数目等关键指标,总计超过33000条数据记录。这些数据来源于各地方统计局,并经过整理,为研究者提供了一个宝贵的资源,以支持对中国经济特别是工业行业的深入分析和研究。

    BGM坏了吗111111

    BGM坏了吗111111

    毕业设计&课设_主要语言为 Java,含相关文件及配置.zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。

    Puppet 模块用于安装和管理 Python、pip、virtualenvs 和 Gunicorn 虚拟主机 .zip

    puppet-python The Puppet module is used to install and manage python, pip, virtualenvs, and Gunicorn virtual hosts. Please note that the module stankevich/python has been deprecated and is now available under Vox Pupuli: puppet/python. Usage For usage of classes, see Resources. If contributed, update to bundle exec rake strings:generate\[',,,,false,true'] hierarchical configuration. This module supports configuration through hiera. The following example creates two python3 virtual environments.

    WorldPO连接器标准尺寸及其选型指南,包含1.27mm、0.8mm、0.5mm间距的高速连接器

    WORLDPO(沃德披欧)是在政策支持下,成功做出对标进口品质和多达15个系列型号的连接器品牌,并且在专业机构的检测下,成功通过ISO 9001认证,FCC认证,CE认证。 内容概要:本文档为WorldPO连接器产品的选型手册,详细介绍了多种型号连接器的产品规格和参数, 包括标准的引脚间距(1.27mm、0.8mm、0.5mm、0.635mm等)、具体的引脚数量(如6-500针)、各式引脚样式(如贴片式、直插式等)、电镀方式(金镀层厚度不同)、 此外,还提供了配对合高高度、接触材料、电流负载能力、额定电流、不同型号的最大插拔次数和温度范围以及操作环境条件等多种关键属性说明。文中所有技术数据均有详细的图表辅助解读,方便用户快速查找所需参数。此外,还支持非标准定制服务。 使用场景及目标:帮助用户快速查找并选择适合自己应用需求的电连接器型号。例如,针对不同的信号传输要求,如高速数据传输、电力供应或是模拟信号传输,可以选择具有相应特性的连接器。 可以通过直接联系供应商来获取进一步的支持和服务建议。 其他说明:文档末尾提供联系人邮箱和电话,方便客户进行业务洽谈和技术支持查询。

    操作系统概述期末复习题(含解析)

    操作系统期末复习题

    毕业设计&课设_博客系统,含前后端技术,附搭建教程,曾获优秀毕业论文及展示页面截图.zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。

    个人原创STM32F1 BOOTLOADER,主控芯片为STM32F103VET6

    F103BL 是BOOTLOADER,需要通过仿真器进行写入; F103Usr 是一个用户程序编写实例; SW_BootLoader 是QT写的上位机,在BL的模式下通过串口和这个上位机将用户程序写入芯片; STM32的程序是利用uVision5.36编译 SW_BootLoader 是用QT5.15.2编译的

    线性调频LFM脉冲压缩雷达仿真 matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    数据科学领域的主流数据集类型及其应用分析

    内容概要:本文详细介绍了数据集中最常见的几种类型,包括结构化数据集(关系型数据库数据、时间序列数据、地理空间数据)、非结构化数据集(文本数据、图像数据、音频数据、视频数据)、半结构化数据集(JSON数据、XML数据)、流式数据集(传感器数据、社交媒体数据、网络日志数据)、多维数据集(数据仓库数据、数据立方体数据)和合成数据集(模拟数据、生成数据)。每种类型都具体描述了其特点、应用场景和优势。 适合人群:数据科学家、数据分析师、机器学习工程师和其他从事数据相关工作的专业人士。 使用场景及目标:帮助读者深入了解各种数据集的特点和应用场景,提升数据处理和分析能力,更好地利用数据集解决实际问题。 其他说明:随着大数据和人工智能技术的发展,数据集的种类、规模和复杂性不断增加,了解不同类型数据集的特点和应用场景对于提高算法性能和效果至关重要。

    中创建系统级简化参数化铰接式机器人模型 matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    使用python语言和Django框架创建的博客网站系统,下载即可运行,可做毕业设计

    使用python语言和Django框架创建的博客网站系统,下载即可运行,可做毕业设计。

    使用c++语言编程实现灰色预测模型的源代码

    灰色预测模型实现。本资源是使用c++语言编程实现灰色预测模型的源代码。模型为GM(1,1)。灰色预测模型是一种用于处理不确定性和不完全信息的预测方法,它通过分析系统内部因素之间的发展趋势,对原始数据进行生成处理,以寻找系统变动的规律,并建立微分方程模型来预测事物的未来发展趋势。灰色预测的核心是使用时间响应方程:x(k+1)=(x⑴-u/a)exp()+u/a,来根据初始值x(1)来计算x(k)(k=2,3,4....N,N+1),其中α称为发展灰数;μ称为内生控制灰数。可用二乘估计来计算得到。

Global site tag (gtag.js) - Google Analytics