• 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;
    	}
    }
    
  • 相关阅读:
    【Android】 分享一个完整的项目,适合新手!
    Android笔记:Fragment与ViewPager组合时,如何在FragmentActicity获取Fragment对象
    android 获取日期
    Java: 分解List<HashMap<String, String>>
    android ExpandableListView实现不同的布局
    android: activity切换之效果
    android: activity之间切换的抽屉效果
    android 获取适配的bitmap等相关
    Eclipse改变外观,护眼模式
    安装 NoMachine(NX) client and server
  • 原文地址:https://www.cnblogs.com/xiaoCon/p/2933963.html
Copyright © 2020-2023  润新知