我想知道是否有一种方法可以在Android上扩展ORMLite的BaseDaoImpl类。在我的Android项目中,我正在使用几个不同的Dao对象来访问不同的业务对象。我的业务对象存储在不同的表中,并且都从BusinessObject基类继承,该基类具有两个成员Long id;
和Long objectId;
,其中id
是数据库表中对象的真正唯一ID。
public abstract class BusinessObject{
public static final String ID_COLUMN_NAME = "_id";
public static final String OBJECT_ID_COLUMN_NAME = "object_id";
@SerializedName(value="_id")
@DatabaseField(canBeNull=false, columnName = ID_COLUMN_NAME, generatedId=true)
private int id;
@SerializedName(value="id")
@DatabaseField(canBeNull=false, columnName=OBJECT_ID_COLUMN_NAME, index=true, unique = true)
private long objectId;
}
现在,我希望能够通过id和objectId删除业务对象。由于BaseDaoImpl类,通过ID删除当然是可能的。为了能够通过objectId删除它们,我考虑了扩展BaseDaoImpl类并向其添加通用方法deleteByObjectId()方法。在该方法中,我将使用dao的delete()方法删除对象,该方法采用PreparedDelete语句。
public class ExtendedDaoImple<T, ID> extends BaseDaoImpl<T, ID> implements ExtendedDao<T, ID> {
protected ExtendedDaoImple(Class<T> dataClass) throws SQLException {
super(dataClass);
}
public int deleteByObjectId(long objectId) throws SQLException {
DeleteBuilder<T, ID> delBuilder = (DeleteBuilder<T, ID>) deleteBuilder();
delBuilder.where().eq(BusinessObject.OBJECT_ID_COLUMN_NAME, objectId).prepare();
return delete(delBuilder.prepare());
}
}
我的问题是我不知道如何从OrmLiteSqliteOpenHelper类创建ExtendedDaoImpl类的实例。通常,通过调用OrmLiteSqliteOpenHelper类的getDao()方法并传递该Dao应该用于的BusinessObject类来创建Dao。例如。
Dao<Image, Long> imageDao = getDao(Image.class);
那么,有没有一种方法可以修改OrmLiteSqliteOpenHelper类,从而可以检索ExtendedDaoImpl对象而不是BaseDaoImpl对象?
最佳答案
措辞很好的问题。 @DatabaseTable
批注具有一个字段daoClass
,可用于指定要构造的DAO类。
这是DaoManager
的文档。
您的类将需要具有带有ConnectionSource
和Class
参数的构造函数。
该解决方案没有充分记录。如果您有任何想法可以改善文档,请告诉我。