Java 分层体系结构-存储库和反射

Java 分层体系结构-存储库和反射,java,architecture,Java,Architecture,我目前正在我的(小型)项目中使用分层体系结构,并考虑使用insert/update/delete方法的反射来扩展我的BaseRepository(特定于类的存储库继承自它) 我的BaseRepository.java如下所示: public abstract class BaseRepository<CLASS extends BaseDomain<CLASS>>{ } public class UserRepository extends BaseReposito

我目前正在我的(小型)项目中使用分层体系结构,并考虑使用insert/update/delete方法的反射来扩展我的BaseRepository(特定于类的存储库继承自它)

我的
BaseRepository.java
如下所示:

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

}
public class UserRepository extends BaseRepository<User>{

}
现在我的问题是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;
}
我的特定存储库扩展了基本存储库,如下所示:

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

}
public class UserRepository extends BaseRepository<User>{

}
公共类UserRepository扩展了BaseRepository{
}
如何在
BaseRepository
中获取
User
类,以便在delete/update等方法中使用它


谢谢你的帮助

让实体成为BaseRepository构造函数的参数怎么样

编辑:

公共类UserRepository扩展了BaseRepository{
公共静态最终字符串ENTITY=“users”;
公共用户存储库(){
超级(实体);
}    
}

让实体成为BaseRepository构造函数的参数怎么样

编辑:

公共类UserRepository扩展了BaseRepository{
公共静态最终字符串ENTITY=“users”;
公共用户存储库(){
超级(实体);
}    
}

我能想到的一个简单方法是将实体类类型传递给
BaseRepository

private final Class<CLASS> entityType;
public BaseRepository(Class<CLASS> entityType) {
  this.entityType = entityType;
// do your stuff
}
私有最终类entityType;
公共BaseRepository(类entityType){
this.entityType=entityType;
//做你的事
}
根据实体类类型查找要操作的正确表。可以像大多数Ruby ORM一样按惯例操作,比如说,如果实体类型是
User
,那么您就可以针对
users
User
或任何惯例进行操作


或者可以有一个对象为
BaseRepository

提供配置。我认为一个简单的方法是将实体类类型传递给
BaseRepository

private final Class<CLASS> entityType;
public BaseRepository(Class<CLASS> entityType) {
  this.entityType = entityType;
// do your stuff
}
私有最终类entityType;
公共BaseRepository(类entityType){
this.entityType=entityType;
//做你的事
}
根据实体类类型查找要操作的正确表。可以像大多数Ruby ORM一样按惯例操作,比如说,如果实体类型是
User
,那么您就可以针对
users
User
或任何惯例进行操作


或者可以有一个对象为
BaseRepository

提供配置,这是否意味着每次都需要创建一个新的存储库实例?在进行查询时是否需要该实体实例?这是否意味着每次都需要创建一个新的存储库实例?当您进行查询时是否需要该实体实例?我认为您不需要方法参数列表中的连接对象。我认为您不需要方法参数列表中的连接对象。