增删改查-反射技术通用的方法

本文介绍了一个通用的DAO实现,该实现使用Hibernate框架进行数据库操作,包括增删改查等基本功能,并通过反射机制确定泛型参数的具体类型。
package com.sys.dao;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;

import javax.persistence.Entity;

import org.hibernate.Query;
import org.hibernate.SessionFactory;

/**
 *@author ddl
 *
 */

public class BaseDaoImpl<T> implements BaseDao<T> {
    private SessionFactory sessionFactory;

    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    protected Class<T> clazz;

    public BaseDaoImpl() {
        clazz = (Class<T>) getClass();
        while (clazz != Object.class) {
            Type genType = clazz.getGenericSuperclass();
            if (genType instanceof ParameterizedType) {
                Type args[] = ((ParameterizedType) genType)
                        .getActualTypeArguments();
                if (args[0] instanceof Class) {
                    this.clazz = (Class<T>) args[0];
                    break;
                }
            }
            clazz = (Class<T>) clazz.getSuperclass();
        }
    }

    /**
     * 获取实体类名称
     *
     * @param entityClass
     * @return
     *@author Administrator
     *
     */
    public String getEntityName(Class<T> entityClass) {
        String entityname = entityClass.getSimpleName();
        Entity entity = entityClass.getAnnotation(Entity.class);
        if (entity.name() != null && !"".equals(entity.name())) {
            entityname = entity.name();
        }
        return entityname;

    }

    /**
     * 获取实例
     *
     * @param id
     * @return
     *@author Administrator
     *
     */
    public T find(String id) {
        T entity=null;
        boolean flag = false;
        try {
            entity=(T) sessionFactory.getCurrentSession().get(clazz, id);
            flag = true;
        } catch (Exception e) {
            flag = false;
        }
        return entity;
    }

    /**
     * 增加
     *
     * @param t
     * @return
     *@author Administrator
     *
     */
    public boolean save(T t) {
        boolean flag = false;
        try {
            sessionFactory.getCurrentSession().save(t);
            flag = true;
        } catch (Exception e) {
            flag = false;
        }
        return flag;
    }

    /**
     * @return
     *@author Administrator 修改
     */
    public boolean update(T t) {
        boolean falg = false;
        try {
            sessionFactory.getCurrentSession().update(t);
            falg = true;
        } catch (Exception e) {
            falg = false;
        }
        return falg;
    }

    /**
     * 删除
     */
    public boolean delete(T t) {
        boolean flag = false;
        try {
            sessionFactory.getCurrentSession().delete(t);
            flag = true;
        } catch (Exception e) {
            flag = false;
        }
        return flag;
    }
    /**
     * 批量删除
     */
    public boolean deletes(String[] ids) {
        boolean falg=false;
        T entity=null;
        try {
            for (int i = 0; i < ids.length; i++) {
                entity=this.find(ids[i]);
                sessionFactory.getCurrentSession().delete(entity);
                falg=true;
            }
        } catch (Exception e) {
            falg=false;
        }
        return falg;
    }

    @SuppressWarnings("unchecked")
    public List<T> getAllList(Class<T> entityClass) {
        String entityname=this.getEntityName(entityClass);
        List<T> list=null;
        try {
            String hql="from "+entityname+"";
            System.out.println("hql:"+hql+sessionFactory.getCurrentSession());
            Query query=sessionFactory.getCurrentSession().createQuery(hql);
            list=(List<T>) query.list();
        } catch (Exception e) {
            list=null;
        }
        return list;
    }
}

================[另一种获取clazz方法,没有试验,]===================

public Class loadClass(String className){

    Class clazz=null;

   clazz=Thread.currentThread().getContextClassLoader().loadClass(className);

  if(clazz==null){

  clazz=Class.forName(className);

}

return clazz;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值