[英]Create a class that can handle all type of CRUD Operation. No need to make SessionFactory or Session Object Each Time I need to do CRUD
我想讓Java中的類具有一種可以與Hibernate配置進行交互的方法,並且將某些操作標識為ENUM(例如:讀取,更新,添加,刪除等)。
方法參數應為(枚舉操作,類DTO,NamedQuery namedquery,DTOObject Object_to_persist,param(任何其他參數))。
通過傳遞實際參數(Operation.read,USERDTO.class,namedquery,USERDTO obj_UserDTO,HashMap hmapData),方法應該方便我可以在需要時調用它。
/* Enum Defined Operation done to the database.
*/
public enum Operations {READ,UPDATE,ADD,DELETE};
/*Centralized Method Defination for Basic CRUD Operation */
public T<?> DatabaseCRUDOperations((Operation.READ,USERDTO.class , namedquery , USERDTO obj_UserDTO , HashMap<String, String> hmapid){
switch(Operation opts){
case Operation.Read : //Call Read Method
break;
case Operation.UPDATE: //call Update Method
break;
......
......
default://call any Error Method or set error
}
}
基本上我想定義一個自定義類(一種內部項目框架),該類具有所有基本的CRUD操作,應僅通過該類完成。 無需創建SessionFactory或Session對象。 請通過一些代碼段提出建議。
Java泛型搶救! 准備驚訝。
您的抽象實體(如果您想定義用於通用控制器類之類的方法,則很有用):
public abstract class AbstractEntity<ID extends Serializable> implements Serializable {
public abstract ID getPrimaryKey();//I simply put this here as an example
}
創建通用的DAO接口:
public interface IGenericDAO<T extends AbstractEntity<ID>, ID extends Serializable> {
T findByPrimaryKey(ID id);
T save(T entity);
void delete(T entity);
List<T> saveAll(List<T> entities);
.
.
.
}
然后,定義您的抽象通用DAO:
public abstract class AbstractHibernateDAO<T extends AbstractEntity<ID>, ID extends Serializable> implements IGenericDAO<T, ID> {
protected Class<T> persistentClass;
protected AbstractHibernateDAO(){}
@SuppressWarnings({ "unchecked", "rawtypes" })
public AbstractHibernateDAO(Class c) {
persistentClass = c;
}
@Override
@SuppressWarnings("unchecked")
public T findByPrimaryKey(ID id){
return (T) HibernateUtil.getSession().get(persistentClass, id);
}
@Override
public T save(T entity){
HibernateUtil.getSession().saveOrUpdate(entity);
return entity;
}
@Override
public List<T> saveAll(List<T> entities){
for(int i = 0; i < entities.size(); i++){
HibernateUtil.getSession().saveOrUpdate(entities.get(i));
}
return entities;
}
@Override
public void delete(T entity){
HibernateUtil.getSession().delete(entity);
}
.
.
.
}
實體的DAO接口(對於此示例,我使用Integer作為主鍵):
public interface IMyEntityDAO extends IGenericDAO<MyEntity, Integer> {
}
現在(打鼓),您准備好鋪設一些混凝土(課程)了...
DAO:
public class MyEntityDAO extends AbstractHibernateDAO<MyEntity, Integer> implements IMyEntityDAO {
public MyEntityDAO() {
super(MyEntity.class);
}
}
myEntity所:
@Entity
@Table(name = "my_entity_table")
public class MyEntity extends AbstractEntity<Integer>{
@Id
@Column(name = "index")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
public Integer getPrimaryKey (){
return id;
}
.
.
.
}
繁榮。 (麥克風滴)
讓我知道您是否需要進一步的解釋!
如果沒有感謝卡梅隆麥肯齊(Cameron McKenzie)和他的驚人著作,我不能正確地發表這本書 。 這讓我看到了認識仿制葯力量的全新世界。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.