简单数据操作BaseDAO

本文介绍了一种基于Java和Hibernate的通用DAO层设计方法,该方法利用反射机制自动获取实体类信息,实现了增删改查等基本操作。此外,还提供了事务管理功能,并实现了简单的密码加解密。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值