怎么得到T(泛型)的class

这里以一个引用对象(Employee)为例

//得到clzz=Employee.class
clzz = (Class<T>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];
//得到T的名字,打印结果为Employee
System.out.println(clzz.getSimpleName());

JPA应用实例

package cn.itsource.dao;

import cn.itsource.util.EmUtil;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Query;
import java.lang.reflect.ParameterizedType;
import java.util.List;

public class BaseDaoImpl<T> implements IBaseDao<T> {
    private Class<T> clzz;

    public BaseDaoImpl() {
        clzz = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
        System.out.println(clzz.getSimpleName());
    }

    @Override
    public void add(T t) {
    	//添加
        EntityManagerFactory factory = EmUtil.getFactory();
        //EmUtil是自己设计的工具类,代码如下
        //EntityManagerFactory factory = Persistence.createEntityManagerFactory("cn.itsource.jpa01");
        // EntityManager manager = factory.createEntityManager();
        EntityManager manager = EmUtil.getManager();
        //开启事物
        manager.getTransaction().begin();
        //添加操作
        manager.persist(t);
        //提交事物
        manager.getTransaction().commit();
		//关流
        EmUtil.CLose(manager);
    }

    @Override
    public void delete(Long id) {
    //删除
        EntityManagerFactory factory = EmUtil.getFactory();
        EntityManager manager = EmUtil.getManager();
        try {
        //删除要先查询到一行,才可以删除(也就是说JPA能删除的只有可持久化对象)
        // 原代码Employee employee = manager.find(Employee.class, id);
            T t = manager.find(clzz, id);
            manager.getTransaction().begin();
            manager.remove(t);
            manager.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            //事物回滚
            manager.getTransaction().rollback();
        } finally {
            EmUtil.CLose(manager);
            EmUtil.Close(factory);
        }
    }

    @Override
    public void update(T t) {
        EntityManager manager = EmUtil.getManager();
        try {
            manager.getTransaction().begin();
            //删除操作
            manager.merge(t);
            manager.getTransaction().commit();

        } catch (Exception e) {
            e.printStackTrace();
            manager.getTransaction().rollback();
        } finally {
            EmUtil.CLose(manager);
        }
    }

    @Override
    public T findOne(Long id) {
    //查询一行数据
        EntityManager manager = EmUtil.getManager();
        T t = manager.find(clzz, id);
        manager.close();
        return t;
    }

    @Override
    public Long findCount() {
    //查询数据总条数
        EntityManager manager = EmUtil.getManager();
        Query query = manager.createQuery("select count(e) as rowcount from " + clzz.getSimpleName() + " e");
        Object o = query.getSingleResult();
        Long count = (Long) o;
        manager.close();
        return count;
    }

    @Override
    public List<T> findAll(Integer page, Integer rows) {
    //分页查询
        System.out.println(clzz.getSimpleName());
        EntityManager manager = EmUtil.getManager();
        Query query = manager.createQuery("from " + clzz.getSimpleName());
        query.setFirstResult((page - 1) * rows).setMaxResults(rows);
        List<T> list = query.getResultList();
        EmUtil.CLose(manager);
        return list;
    }
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值