分层体系结构 - 存储库和反射
问题描述:
我目前在我的(小)项目中使用分层体系结构,并考虑使用用于插入/更新/删除方法的反射来扩展我的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.
}
现在我的问题是在deleteById方法在BaseRepository:
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>{
}
如何得到User
类的BaseRepository
所以我可以用它在删除/更新等方法呢?
感谢您的帮助!
答
如何使实体成为BaseRepository构造函数的参数。
编辑:
public class UserRepository extends BaseRepository<User>{
public static final String ENTITY = "users";
public UserRepository(){
super(ENTITY);
}
}
+0
这是否意味着每次你需要创建一个新的Repository实例?你在查询时是否需要该实体实例? – kevinjom
答
一个简单的方法我能想到的,但我没有试过是实体类的类型传递给BaseRepository
。
private final Class<CLASS> entityType;
public BaseRepository(Class<CLASS> entityType) {
this.entityType = entityType;
// do your stuff
}
查找要根据实体类类型进行操作的正确表。如果实体类型为User
,那么可以按照惯例与大多数Ruby ORM一样,然后您可以针对users
或user
或任何惯例进行操作。
或者可以有一个目的是提供一种配置,以BaseRepository
我不认为你需要一个连接对象的方法的参数列表。 – kevinjom