我把Delete分享出來你們看看!java
--------------------------------------------------------------------------------------------
public class IBasicDaoImpl<T> implements BasicDao<T> {
//方法一:
//實體類class
private Class<T> entityClass = null;
//ID字段的class
{
//getSuperclass 返回直接繼承的父類(因爲編譯擦除,沒有顯示泛型參數)
// getGenericSuperclass 返回直接繼承的父類(包含泛型參數)
Type type = getClass().getGenericSuperclass();
//解決多層繼承拿泛型類型 //BaseServiceImpl<User> <- UserService <- PassportService
while(!(type instanceof ParameterizedType)){
type = ((Class<?>)type).getGenericSuperclass();
//爲了不寫錯代碼出現死循環,加上這個保險。
if(type == null || "java.lang.Object".equals(type.getClass())){
break;
}
}
if(type instanceof ParameterizedType){
ParameterizedType parameterizedType = (ParameterizedType)type;
Type[] genericTypies = parameterizedType.getActualTypeArguments();
entityClass = (Class<T>)genericTypies[0];
}
}
-------------------------------------------------------------------------------------------------- public void delete(Long id) {
EntityManager entityManager = JpaUtils.getEntityManager();
try {
entityManager.getTransaction().begin();
//經過id去查詢一個對象[持久狀態的對象]
T t = entityManager.find(entityClass, id);
//刪除數據[remove表示將一個持久狀態的對象從表中移除]
entityManager.remove(t);
entityManager.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
//事務回滾
entityManager.getTransaction().rollback();
} finally {
//關閉資源
JpaUtils.close(entityManager);
JpaUtils.close();
}
}
}
代碼就是上面的代碼!過這樣咱們就能夠解決父類如何獲取子類傳遞的泛型的問題!
----------------------------------------------------------------------------------
//方法二:
//得到超類的泛型參數的實際類型
Class<T> entityClass = (Class<T>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];