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