Flo*_*Flo 14 sqlite android ormlite
我想知道是否有办法在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;
}
Run Code Online (Sandbox Code Playgroud)
现在我希望能够通过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());
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我不知道如何从OrmLiteSqliteOpenHelper类创建ExtendedDaoImpl类的实例.通常,通过调用OrmLiteSqliteOpenHelper类的getDao()方法并传递Dao应该用于的BusinessObject类来创建Dao.例如
Dao<Image, Long> imageDao = getDao(Image.class);
Run Code Online (Sandbox Code Playgroud)
那么有没有办法修改OrmLiteSqliteOpenHelper类,以便可以检索ExtendedDaoImpl对象而不是BaseDaoImpl对象?
Gra*_*ray 20
我的问题是我不知道如何从OrmLiteSqliteOpenHelper类创建一个ExtendedDaoImpl类的实例...
措辞不错的问题.该@DatabaseTable注释具有一个字段daoClass可以被用于指定DAO类来构造.
http://ormlite.com/javadoc/ormlite-core/com/j256/ormlite/table/DatabaseTable.html#daoClass()
以下是该文档DaoManager.
你的类需要有一个构造函数ConnectionSource和Class参数.
解决方案没有详细记录.如果您对如何改进文档有任何想法,请告诉我.