分层架构 - 存储库和反射

时间:2017-11-11 12:33:28

标签: java architecture

我目前正在我的(小)项目中使用分层架构,并考虑使用反射插入/更新/删除方法来扩展我的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 1,如下所示:

public class UserRepository extends BaseRepository<User>{

}

如何在User中获取BaseRepository课程,以便我可以在删除/更新等方法中使用它?

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

如何使实体成为BaseRepository构造函数的参数。

编辑:

public class UserRepository extends BaseRepository<User>{

    public static final String ENTITY = "users";        

    public UserRepository(){
        super(ENTITY);
    }    

}

答案 1 :(得分:1)

我能想到的一个简单方法,但我还没有尝试过将实体类类型传递给BaseRepository

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

根据实体类类型查找正确的表。可能像大多数Ruby ORM一样按照惯例,如果实体类型是User,那么你可以对usersuser或任何约定进行操作。

或者可以有一个对象来提供BaseRepository

的配置