繁体   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