简单数据操作BaseDAO

package com.dreamoa.sys;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;

import com.dreamoa.util.HibernateSessionFactory;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

/**
 *此类主要是提供一些常用的方法使用,用来被业务类业务类
 */
public class BaseDAO<T> {

	private static Log log = LogFactory.getLog(BaseDAO.class);
	private Session session = null;
	private Class<T> entityClass;// 通过反射机制获取泛型对应的实体类的类型
	private Transaction tx = null;

	public BaseDAO() {
		Type genType = getClass().getGenericSuperclass();
		Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
		entityClass = (Class) params[0];
	}

	/**
	 * 创建会话session
	 */
	public void currentSession() {
		this.session = HibernateSessionFactory.getSession();
	}

	/**
	 * 关闭session
	 */
	public void closeSession() {
		HibernateSessionFactory.closeSession();
	}

	/**
	 * 提交事务
	 */
	public void commit() {
		this.tx.commit();
		closeSession();
	}

	/**
	 * 开启事务
	 */
	public void beginTransaction() {
		currentSession();
		tx = this.session.beginTransaction();
	}
	
	/**
	 * 回滚事务
	 */
	public void rollback(){
		tx.rollback();
	}

	/**
	 * 密码加密
	 */
	public static String encrypt(String str) {
		return Base64.byteArrayToBase64(str.getBytes());
	}

	/**
	 * 密码解密
	 */
	public static String decrypt(String s) {
		return new String(Base64.base64ToByteArray(s));
	}

	/**
	 * 持久化一个对象
	 * @param obj
	 */
	public void save(Object obj) {
		session.save(obj);
	}

	/**
	 * 更新一个对象
	 * @param obj
	 */
	public void update(Object obj) {
		session.update(obj);
	}
	
	/**
	 * 根据主键id删除一个对象
	 * @param clazz
	 * @param idName,主键名称
	 * @param id,实际值
	 */
	public void deleteById(String idName, Serializable id) {
		String className = entityClass.getSimpleName();
		String hql = "delete from " + className + " where " + idName + "=?";
		Query query = session.createQuery(hql);
		query.setParameter(0, id);
		query.executeUpdate();
	}

	/**
	 * 根据主键id查询对象
	 * 
	 * @param id
	 * @return
	 */
	public T get(Serializable id) {
		return (T) session.get(entityClass, id);
	}

}

你可能感兴趣的:(java,apache,Hibernate)