天天看點

GreenDao封裝類(記錄)

基類

public interface Dao<K> {
    /**
     * 插入資料
     * @param entity 插入的對象
     * @return 插入新紀錄的id
     */
    long insert(K entity);

    /**
     * 修改資料
     * @param entity 修改的對象
     */
    void update(K entity);

    /**
     * 删除資料
     * @param entity 删除的對象
     */
    void delete(K entity);

    /**
     * 删除多條資料
     * @param listEntity 删除的資料清單
     */
    void deleteForList(List<K> listEntity);

    /**
     * 查詢num條資料
     * @param num 查詢的數量
     * @return 記錄對應的類的清單list
     */
    List<K> queryForList(int num);

    /**
     * 擷取資料總數
     * @return
     */
    long getCount();
}
           
public abstract class BaseDao<K, T extends AbstractDao<K, Long>> implements Dao<K> {
    protected abstract T getWriteDao();

    protected abstract T getReadDao();

    @Override
    public long insert(K entity) {
        T dao = getWriteDao();
        return dao.insert(entity);
    }

    @Override
    public void update(K entity) {
        T dao = getWriteDao();
        dao.update(entity);
    }

    @Override
    public void delete(K entity) {
        T dao = getWriteDao();
        dao.delete(entity);
    }

    @Override
    public void deleteForList(List<K> listEntity) {
        T dao = getWriteDao();
        dao.deleteInTx(listEntity);
    }

    @Override
    public List<K> queryForList(int num) {
        T dao = getReadDao();
        return dao.queryBuilder().limit(num).list();
    }

    @Override
    public long getCount() {
        T dao = getReadDao();
        return dao.queryBuilder().count();
    }

}
           
public class DBUtil {
    private DaoMaster.DevOpenHelper mOpenHelper;
    private DaoSession mReadDaoSession, mWriteDaoSession;

    private static volatile DBUtil mInstance;

    public static final String DB_NAME = "gps.db";

    public static DBUtil getInstance() {
        if (mInstance == null) {
            synchronized (DBUtil.class) {
                if (mInstance == null) {
                    mInstance = new DBUtil();
                }
            }
        }
        return mInstance;
    }

    public DBUtil() {
        initDbHelp();
        mWriteDaoSession = new DaoMaster(getWritableDatabase()).newSession();
        mReadDaoSession = new DaoMaster(getReadableDatabase()).newSession();
    }

    private SQLiteDatabase getWritableDatabase() {
        initDbHelp();
        return mOpenHelper.getWritableDatabase();
    }

    private SQLiteDatabase getReadableDatabase() {
        initDbHelp();
        return mOpenHelper.getReadableDatabase();
    }

    private void initDbHelp() {
        if (mOpenHelper == null) {
            mOpenHelper = new DaoMaster.DevOpenHelper(MyApplication.getContext(), DB_NAME, null);
        }
    }

    public DaoSession getReadDaoSession() {
        return mReadDaoSession;
    }

    public DaoSession getWriteDaoSession() {
        return mWriteDaoSession;
    }

}
           

使用

public class GpsDeviceDb extends BaseDao<GpsDevice, GpsDeviceDao> {
    @Override
    protected GpsDeviceDao getWriteDao() {
        return DBUtil.getInstance().getWriteDaoSession().getGpsDeviceDao();
    }

    @Override
    protected GpsDeviceDao getReadDao() {
        return DBUtil.getInstance().getReadDaoSession().getGpsDeviceDao();
    }

}
           
GpsDeviceDb gpsDeviceDb = new GpsDeviceDb();
  GpsDevice gpsDevice = new GpsDevice(null, “test");
  gpsDeviceDb.insert(gpsDevice);