簡體   English   中英

創建一個可以處理所有類型的CRUD操作的類。 每次需要進行CRUD時都無需創建SessionFactory或Session對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM