自己学习的时候,顺手写的。主要为了减少重复操作!感觉还是可以的!
package com.hr.utils; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibenateUtil { // 获取配置文件 private static Configuration cfg; private static ThreadLocal<Session> tl = new ThreadLocal<Session>(); // Session工厂 private static SessionFactory factory; static { // 读取配置文件信息 cfg = new Configuration().configure(); // 构建会话工厂,根据会话工厂创建session factory = cfg.buildSessionFactory(); } // 获得Session public static Session getSession() { // 返回一个根据会话工厂创建的session Session session = tl.get(); if (session == null) { session = factory.openSession(); tl.set(session); } return session; } // 关闭session public static void close(Session session) { session = tl.get(); // 在session值不等于空且session值存在的情况下,关闭session if (session != null && session.isOpen()) { session.close(); tl.set(null); } } /** * 插入数据方法 */ public static void insert(Object obj) { // 1.获得session工厂 Session session = getSession(); // 2.插入数据 session.save(obj); // 3.开始并执行操作 session.beginTransaction().commit(); // 4.关闭session工厂 close(session); } /** * 更新数据的方法 */ public static void update(Object obj) { // 1.获得session工厂 Session session = getSession(); // 2.更新数据 session.update(obj); // 3.开始并执行操作 session.beginTransaction().commit(); // 4.关闭session工厂 close(session); } /** * 删除数据的方法 */ public static void delete(Object obj) { // 1.获得session工厂 Session session = getSession(); // 2.删除数据 session.delete(obj); // 3.开始并执行操作 session.beginTransaction().commit(); // 4.关闭session工厂 close(session); } /** * 查询(列表的形式) * select t from " + sql1 + " t " + sql2 + " " */ public static List selectList(String sql1, String sql2) { Session session = getSession(); String hql = null; // 1)需要查询的条件是uid等于5 // 2)数据对象为User类里面的属性 // 3)t代表User对象的所有属性 if (sql1 != null && sql2 != null) { hql = "select t from " + sql1 + " t " + sql2 + " "; } else { hql = "select t from " + sql1 + " t"; } Query query = session.createQuery(hql); List<Object> obj = query.list(); close(session); return obj; } /** * 查询(对象的形式,只查询指定ID) */ public static Object selectOnly(Class<?> name, int uid) { Session session = getSession(); Object obj = (Object) session.get(name, uid); close(session); return obj; } /** * 分页查询 */ public static List PageList(String task, int page, int currsize) { Session session = getSession(); Query query = session.createQuery("from " + task); query.setCacheable(true); query.setFirstResult((page - 1) * currsize); query.setMaxResults(currsize); List object = query.list(); close(session); return object; } // ------------------------------------------------------------ /** * 比较合适于有多个条件,也就是where 这种,但只能填两个key值 */ public static Object selectOne(String sql, String value1, String key1, String value2, String key2) { try { // 获得session对象 Session session = getSession(); // 创建sql执行 Query query = session.createQuery(sql); // 把值加入 query.setParameter(value1, key1); query.setParameter(value2, key2); // 用LIST存储数据 List object = query.list(); // obj存放的是头一条数据,由于目标是列表,所以进行转换 Object obj = object.get(0); // 关闭session close(session); if (obj != null) { // 在obj不等于null的情况下, // 也就是查到数据的情况下。 // 返回数据 return obj; } } catch (Exception e) { } // 否则返回null return null; } /** * 查询制定列表的记录总数。 用的是对象,而不是表名称。 也就是User/System这些. */ public static int selectCount(String db) { Session session = getSession(); List<Integer> objlist = session.createQuery( "select count(*) from " + db).list(); int obj = objlist.get(0); close(session); return obj; } }