簡體   English   中英

如何為任何實體模型創建一個抽象類來使用GreenDAO處理基本CRUD

[英]How to create an abstract class that will handle basic CRUD with GreenDAO for any Entity model

我想創建一個抽象類,該抽象類將調用Dao插入任何實體對象,以避免在實現IRepository每個類中編寫重復的代碼,

public abstract class DBStore<T> implements IRepository {
    DaoMaster daoMaster;
    Class<T> entityClass; 

    public DBStore(DaoMaster daoMaster, Class<T> entityClass) {
        this.daoMaster = daoMaster;
        this.entityClass = entityClass;
    }

    @Override
    public void add(Entity entity) {
        DaoSession session = this.daoMaster.newSession();
        AbstractDao<?, ?> dao = session.getDao(this.entityClass);
        dao.insert(entity);  // cannot pass entity as parameter because insert() expects capture<?>
    }

    // Other CRUD methods
}

我不明白應該使用什么語法來指定變量entityinsert()期望的。

好的,我通過指定DBStore<T extends Entity> implements IRepository<T>並將AbstractDao<?, ?>AbstractDao<T, Long>來使其工作

這是完整的代碼:

public abstract class DBStore<T extends Entity> implements IRepository<T> {
    DaoMaster daoMaster;
    Class<T> entityClass;

    public DBStore(DaoMaster daoMaster, Class<T> entityClass) {
        this.daoMaster = daoMaster;
        this.entityClass = entityClass;
    }

    @Override
    public void add(T entity) {
        this.getSession().insert(entity);
    }

    @Override
    public T getById(long id) {
        AbstractDao<T, Long> dao = this.getDao();
        return dao.load(id);
    }

    //other methods

    protected AbstractDao<T, Long> getDao(){
        DaoSession session = this.daoMaster.newSession();
        return (AbstractDao<T, Long>) session.getDao(this.entityClass);
    }

    protected DaoSession getSession(){
        return this.daoMaster.newSession();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM