[英]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
,則可以針對users
或user
或任何約定進行操作。
或者可以有一個對象為BaseRepository
提供配置
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.