这里以一个引用对象(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;
}
}