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. mysql_变量

    set names gbk; 变量 变量分为两种:系统变量,自定义变量 系统变量:系统定义好的,大部分情况用户不需要使用系统变量,如autocommit,auto_increment_incremen ...

  2. nodeclub models

    之前看过keystone的结构,所以现在看nodeclub时,总会和keystone进行比较. nodeclub models会有一个index来作为facade,通过它连接mongodb,expor ...

  3. AngularJS $observe $watch

    $observe $watch都可以用来监听值的变化,但是他们有显著的区别.$observe是用来监视DOM属性值的变化,而 $watch监视scope属性值的变化.AngularJS中的监听,都知道 ...

  4. ASP.NET Web API 框架研究 Controller实例的销毁

    我们知道项目中创建的Controller,如ProductController都继承自ApiController抽象类,其又实现了接口IDisposable,所以,框架中自动调用Dispose方法来释 ...

  5. android.os.NetworkOnMainThreadException的解决方案

    06-24 18:04:36.857: E/AndroidRuntime(22251): FATAL EXCEPTION: main 06-24 18:04:36.857: E/AndroidRunt ...

  6. ASP.NET Web API 中使用 swagger 来管理 API 文档

    本文以 ASP.NET Web API 为后台框架,利用 EF6 连接 postgreSQL 数据库,使用 swagger 来生成 REST APIs文档.文章分二个部分,第一部分主要讲如何用 EF6 ...

  7. #loj3090 [BJOI2019] 勘破神机

    简单线性代数练习题 首先翻开具体数学生成函数一章,可以发现\(F(n),G(n)\)满足以下递推式 \[F(n)=F(n-1)+F(n-2),F(0)=1,F(1)=1\] \[G(n)=4G(n-2 ...

  8. Git-根据tag创建分支

    有时候需要根据tag创建分支. 现在主分支上有一个tag为vtest.1.0.FINAL,主分支的名字为master. 1.执行:git origin fetch 获得最新. 2.通过:git bra ...

  9. Smart/400开发上手2: COBOL批处理程序处理过程

    开发目的:1.建立DB2数据库表:2.建立逻辑视图:3.通过Cobol程序将一个源数据表的数据通过一定公式计算后导出到另一个目的数据库表源数据表:TIM3PF目的数据表:TIM4PF4.在AS400中 ...

  10. web socket 入门

    WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议,其优雅地解决了以往web服务器不能向web客户端实时推送消息的问题. 在浏览器js环境中,创建一个websock ...