package com.cy.utils;

 import java.io.Serializable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set; import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry; /**
* Hibernate辅助类
*
* @author renchang
*
*/
public class HibernateUtils { private static Configuration config; // 配置对象
private static ServiceRegistry ser; // 服务
private static SessionFactory sf; // session工厂
private static Session session; // session
private static Transaction transaction; // 事务 /**
* 1.读取配置到Configuration 2.注册服务 3.获得SessionFactory
*/
static {
config = new Configuration().configure();
ser = new StandardServiceRegistryBuilder().applySettings(
config.getProperties()).build();
sf = config.buildSessionFactory(ser);
} /**
* 获得Session
*
* @return session对象
*/
public static Session getSession() {
return session = sf.openSession();
} /**
* 获得事务对象
*
* @return Transaction对象
*/
public static Transaction getTransaction() {
return transaction = session.beginTransaction();
} /**
* 关闭资源
*/
public static void close() {
try {
session.close();
} catch (HibernateException e) {
e.printStackTrace();
}
} /**
* 添加新数据
*
* @param obj
* 待添加的对象
*/
public static void save(Object obj) {
try {
getSession();
getTransaction();
session.save(obj);
transaction.commit();
} catch (Exception e) {
e.printStackTrace();
transaction.rollback();
} finally {
close();
}
} /**
* 修改数据
*
* @param obj
* 待修改的对象
*/
public static void update(Object obj) {
try {
getSession();
getTransaction();
session.update(obj);
transaction.commit();
} catch (Exception e) {
e.printStackTrace();
transaction.rollback();
} finally {
close();
}
} /**
* 添删除数据
*
* @param obj
* 待删除的对象
*/
public static void delete(Object obj) {
try {
getSession();
getTransaction();
session.delete(obj);
transaction.commit();
} catch (Exception e) {
e.printStackTrace();
transaction.rollback();
} finally {
close();
}
} /**
* 按条件插叙数据
*
* @param hql
* 插叙的hql语句
* @param whereMap
* 插叙条件的键值对
* @return 满足条件的对象集合
*/
public static List<?> find(String hql, Map<String, Object> whereMap) {
List<?> objList = null;
try {
getSession();
getTransaction();
getTransaction();
hql = setHql(hql, whereMap);
Query query = session.createQuery(hql);
objList = query.list();
transaction.commit();
} catch (Exception e) {
e.printStackTrace();
transaction.rollback();
} finally {
close();
}
return objList;
} /**
* 根据id获得对象信息
*
* @param cls
* 对象z
* @param id
* id
* @return 对象
*/
public static Object getObjById(Class<?> cls, Serializable id) {
Object obj = null;
try {
getSession();
getTransaction();
obj = session.get(cls, id);
transaction.commit();
} catch (Exception e) {
e.printStackTrace();
transaction.rollback();
} finally {
close();
}
return obj;
} /**
* 分页
*
* @param hql
* 分页语句
* @param pageSize
* 每页大小
* @param pageNo
* 当前页数
* @param whereMap
* 分页条件
* @return 满足条件的数据
*/
public static List<?> paging(String hql, int pageSize, int pageNo,
Map<String, Object> whereMap) {
List<?> objList = null;
try {
getSession();
getTransaction();
getTransaction();
hql = setHql(hql, whereMap);
Query query = session.createQuery(hql);
int beginRow = (pageNo - 1) * pageSize;
query.setFirstResult(beginRow);
query.setMaxResults(pageSize);
objList = query.list();
transaction.commit();
} catch (Exception e) {
e.printStackTrace();
transaction.rollback();
} finally {
close();
}
return objList;
} /**
* 获得条件下总条数
*
* @param hql
* hql语句
* @param whereMap
* 统计的总条数
* @return 总条数
*/
public static int getTotalRows(String hql, Map<String, Object> whereMap) {
int totalRows = 0;
try {
getSession();
getTransaction();
hql = setHql(hql, whereMap);
Query query = session.createQuery(hql);
totalRows = (new Integer(query.uniqueResult().toString()))
.intValue();
} catch (Exception e) {
e.printStackTrace();
} finally {
close();
}
return totalRows;
} /**
* 拼接hql语句
*
* @param hql
* 原始hql语句
* @param whereMap
* 拼接的条件
* @return 拼接后的hql
*/
private static String setHql(String hql, Map<String, Object> whereMap) {
StringBuffer sbHql = new StringBuffer(hql);
if (whereMap != null) {
Set<String> set = whereMap.keySet();
Iterator<String> it = set.iterator();
while (it.hasNext()) {
String key = it.next();
sbHql.append(" AND " + key + " LIKE '%" + whereMap.get(key)
+ "%'");
}
}
return sbHql.toString();
}
}

hibernate辅助类含分页的更多相关文章

  1. Hibernate-ORM:10.Hibernate中的分页

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客讲述Hibernate中的分页 hibernate中的分页其实很好写,它通过操作对象的方式,来进行分页 ...

  2. Easyui的datagrid结合hibernate实现数据分页

    最近在学习easyui的使用,在学到datagrid的时候遇到了一些问题,终于抽点时间整理了一下,分享出来,请各位前辈高手多多指教! 1.先来看看效果,二话不说,上图直观! 2.easyui的data ...

  3. SpringMVC+Spring+hibernate整合及分页

    1. 新建web project 2. 引入jar, 3. 创建包com.tgb.web.controller, 下面创建包(dao,entity,service, config,spring,hib ...

  4. hibernate+pageBean实现分页dao层功能代码

    今天闲来无事,摆弄了一下分页,突然发现很多代码长时间不用就生梳了,虽然有些基础,但没有一篇整合的.这里还是简单示例,主要是以后自己翻着看不用百度找啊找找不到一篇想要的 1.PageBean实体类,一页 ...

  5. Hibernate和Struts分页查询

    分页查询数据库方法 /** * 分页查询方法 * @param sql,pageNO,maxResult * @return List */ public List<Object> que ...

  6. Java_Web三大框架之Hibernate+jsp+HQL分页查询

    分页查询无处不在.使用Hibernate+jsp+HQL进行分页查询. 第一步:编写房屋实体类和House.hbm.xml映射. /* * 房屋实体类 */ public class House { ...

  7. MyBatis之四:调用存储过程含分页、输入输出参数

    在前面分别讲解了通过mybatis执行简单的增删改,多表联合查询,那么自然不能缺少存储过程调用,而且还带分页功能. 注意:表结构参见上篇讲解联合查询的表. 一.查询某班级以及该班级下面所有学生的记录 ...

  8. SSH搭建完美CURD,含分页算法

    今日开始研究使用java平台上的框架解决web服务端的开发. 这是一个完整的SSH实例,在马士兵老师的SSH整合代码基础上,增加用户的增删改查,同时实现structs方式的分页 放出源代码供大家学习参 ...

  9. 一个操作oracle的c#类 含分页

    有别于以前的一个OracleHelper,这个版各有所长,MARK下. using System; using System.Data; using System.Data.OracleClient; ...

随机推荐

  1. python编写producer、consumer

    自主producer.consumer 首先在不同的终端,分别开启两个consumer,保证groupid一致 ]# python consumer_kafka.py 执行一次producer ]# ...

  2. NameNode工作机制

    NameNode工作机制

  3. 加密算法比较3DES AES RSA ECC MD5 SHA1等

    加 密算法通常分为对称性加密算法和非对称性加密算法,对于对称性加密算法,信息接收双方都需事先知道密匙和加解密算法且其密匙是相同的,之后便是对数据进行 加解密了.非对称算法与之不同,发送双方A,B事先均 ...

  4. Android-Version Compatibility Issues (Gradle 2.14.1 requires Android Gradle plugin 2.1.3 (or newer)) but project is using

      当AndroidStudio加载工程Project的时候,出现以上错误❌,千万不要点击,否则就是更多其他的错误:   解决方案: 1.认真翻译错误: 2.分析问题发生的原因,然后看到了 ..... ...

  5. consul集群docker版本脚本

    https://blog.csdn.net/fenglailea/article/details/79098246 docker run -d --name node1 -e 'CONSUL_LOCA ...

  6. (zxing.net)二维码Aztec的简介、实现与解码

    一.简介 Aztec Code是1995年,由Hand HeldProducts公司的Dr. Andrew Longacre设计.它是一种高容量的二维条形码格式.它可以对ASCII和扩展ASCII码进 ...

  7. Android开发教程 - 使用Data Binding(一) 介绍

    本系列目录 使用Data Binding(一)介绍 使用Data Binding(二)集成与配置 使用Data Binding(三)在Activity中的使用 使用Data Binding(四)在Fr ...

  8. 混合表单文件上传到数据库(基于TOMCAT)

    在实际的开发中在实现文件上传的同时肯定还有其他信息需要保存到数据库,就像混合表单在上传完毕之后需要将提交的基本信息插入数据库. 在这个demo中需要用到这个架包来帮助实现 1.定义一个公共类实现文件上 ...

  9. nginx-1.服务器是什么

    服务器相信很多电脑爱好者都听过或者了解一些,一般我们很难看到真正的服务器,因为服务器一般均放置在机房重点,闲人一般均是免进的.比如我们每天浏览的网站.玩的游戏等,所有的数据均存在服务器,服务器一般都在 ...

  10. 12_python_生成器

    一.生成器 python中有三种方式获取生成器 (1)通过生成器函数 (2)通过各种推导式来实现生成器 (3)通过数据的转换也可以获取生成器   1.只要函数中存在了yield,那么这个函数就是一个生 ...