hibernate辅助类含分页
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辅助类含分页的更多相关文章
- Hibernate-ORM:10.Hibernate中的分页
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客讲述Hibernate中的分页 hibernate中的分页其实很好写,它通过操作对象的方式,来进行分页 ...
- Easyui的datagrid结合hibernate实现数据分页
最近在学习easyui的使用,在学到datagrid的时候遇到了一些问题,终于抽点时间整理了一下,分享出来,请各位前辈高手多多指教! 1.先来看看效果,二话不说,上图直观! 2.easyui的data ...
- SpringMVC+Spring+hibernate整合及分页
1. 新建web project 2. 引入jar, 3. 创建包com.tgb.web.controller, 下面创建包(dao,entity,service, config,spring,hib ...
- hibernate+pageBean实现分页dao层功能代码
今天闲来无事,摆弄了一下分页,突然发现很多代码长时间不用就生梳了,虽然有些基础,但没有一篇整合的.这里还是简单示例,主要是以后自己翻着看不用百度找啊找找不到一篇想要的 1.PageBean实体类,一页 ...
- Hibernate和Struts分页查询
分页查询数据库方法 /** * 分页查询方法 * @param sql,pageNO,maxResult * @return List */ public List<Object> que ...
- Java_Web三大框架之Hibernate+jsp+HQL分页查询
分页查询无处不在.使用Hibernate+jsp+HQL进行分页查询. 第一步:编写房屋实体类和House.hbm.xml映射. /* * 房屋实体类 */ public class House { ...
- MyBatis之四:调用存储过程含分页、输入输出参数
在前面分别讲解了通过mybatis执行简单的增删改,多表联合查询,那么自然不能缺少存储过程调用,而且还带分页功能. 注意:表结构参见上篇讲解联合查询的表. 一.查询某班级以及该班级下面所有学生的记录 ...
- SSH搭建完美CURD,含分页算法
今日开始研究使用java平台上的框架解决web服务端的开发. 这是一个完整的SSH实例,在马士兵老师的SSH整合代码基础上,增加用户的增删改查,同时实现structs方式的分页 放出源代码供大家学习参 ...
- 一个操作oracle的c#类 含分页
有别于以前的一个OracleHelper,这个版各有所长,MARK下. using System; using System.Data; using System.Data.OracleClient; ...
随机推荐
- codeforces820B Mister B and Angle in Polygon 2017-06-28 09:42 123人阅读 评论(0) 收藏
B. Mister B and Angle in Polygon time limit per test 2 seconds memory limit per test 256 megabytes i ...
- 第75讲:模式匹配下的For循环
今天学习了模式匹配下的for循环内容.让我们从代码实战角度出发. for(i<-List(1,2,3,4,5)) println(i)//实际上调用的是foreach for(in ...
- vc6中向vs2010迁移的几个问题(2)
1. 库文件的迁移 参考:http://www.cnblogs.com/icmzn/p/6724969.html 2. 其他项目中的可能遇到的问题: 2.1 无法打开包括文件:“fstream.h”: ...
- 查询指定网段可用IP脚
方法一:linux命令 1.fping安装: yum install fping 2.fping使用: fping -g ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...
- 所有网卡常用信息获取集中展示(CentOS6 &CentOS7)
查看所有网卡,状态.光电类型.ip.广播地址.掩码 1.命令如下 ( string='|%-3s|%-18s|%-10s|%-10s|%-10s|%-16s|%-16s|%-16s|'; br=&qu ...
- TVS二极管
TVS管命名规则: TVS管的型号由三部分组成:系列名+电压值+单/双向符号 系列名代表不同的峰值脉冲功率和封装形式 ① SMAJ.SMBJ.SMCJ.SMDJ表示贴片封装:分别代表的峰值脉冲 ...
- 安装Chrome浏览器
Ubuntu 16.04下安装64位谷歌Chrome浏览器 在 Ubuntu 16.04 中,要想使用谷歌的 Chrome 浏览器,可以通过命令行的方式手动安装. 1.进入 Ubuntu 16.04 ...
- 把EXE可执行文件等作为资源包含在Delphi编译文件中
摘自我自己过去写的一段心得. 1.编辑资源文件 *.RCWave: 资源文件是声音文件:RCDATA: 二进制数据AVI: AVI动画:ICON: 图标文件:BITMAP: 位图文件:CURSOR: ...
- Android-Kotlin-继承
上一篇博客 Android-Kotlin-配置/入门 配置好了 AndroidStudio Kotlin 的环境: 1.先看一个案例,子类使用到父类的资源 [案例一] 父类 张翠山: package ...
- Azure DevOps Server(TFS 2019) 中的SonarQube扫描任务出现错误:AppTest.java can't be indexed twice
SonarQube错误描述 将一个Maven示例程序导入到Azure DevOps的待库中,执行SonarQube扫描过程时, DevOps Server提示下面的错误信息: [ERROR] Fail ...