天天看点

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);