簡體   English   中英

分層架構-存儲庫和反射

[英]Layered Architecture - Repository and reflection

我目前在我的(小型)項目中使用分層體系結構,並考慮通過對插入/更新/刪除方法的反射來擴展BaseRepository(特定於類的存儲庫所繼承的對象)。

我的BaseRepository.java看起來像這樣:

public  abstract class BaseRepository<CLASS extends BaseDomain<CLASS>>{

}

BaseDomain所在的位置:

public class BaseDomain<CLASS extends BaseDomain<CLASS>> {
    private Long id;

    //getters setts etc.
}

現在我的問題是在BaseRepository中的deleteById方法中:

 public  int deleteById(Connection connection, Long id) throws SQLException {
    PreparedStatement delete= connection.prepareStatement("DELETE FROM ? WHERE id = ?");
    delete.setObject(1, entity) //heres the problem, where do I get entity from?
    delete.setObject(2, id);

    return 0;
}

我的特定存儲庫是這樣擴展Base的:

public class UserRepository extends BaseRepository<User>{

}

如何在BaseRepository獲取User類,以便可以在delete / update等方法中使用它?

謝謝你的幫助!

如何使實體成為BaseRepository構造函數的參數。

編輯:

public class UserRepository extends BaseRepository<User>{

    public static final String ENTITY = "users";        

    public UserRepository(){
        super(ENTITY);
    }    

}

我可以想到但我尚未嘗試過的一種簡單方法是將實體類類型傳遞給BaseRepository

private final Class<CLASS> entityType;
public BaseRepository(Class<CLASS> entityType) {
  this.entityType = entityType;
// do your stuff
}

查找正確的表以根據實體類類型進行操作。 就像大多數Ruby ORM一樣,可以按照約定進行操作,例如,如果實體類型為User ,則可以針對usersuser或任何約定進行操作。

或者可以有一個對象為BaseRepository提供配置

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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