zoukankan      html  css  js  c++  java
  • Hibenate工具类(实现增/删/改/查)

    自己学习的时候,顺手写的。主要为了减少重复操作!感觉还是可以的!

    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;
    	}
    }
    
  • 相关阅读:
    Linux命令
    NetBeans中从实体创建Restful webservice工程
    2017/3/7 值得"纪念"的错误
    xshell连接虚拟机CentOS出现eth0 device not found的解决方法
    动态规划算法实现部分——求公共最长子序列以及构造回文需要删除的最小字符个数
    《锋利的jQuery》读书要点笔记7——制作商城网页:网站脚本
    《锋利的jQuery》读书要点笔记6——制作商城网页:结构和样式设计
    《锋利的JQuery》读书要点笔记5——jQuery与Ajax的应用
    《锋利的JQuery》读书要点笔记4——表格表单的操作
    010-1磁珠基础知识
  • 原文地址:https://www.cnblogs.com/xiaoCon/p/2933963.html
Copyright © 2011-2022 走看看