1, 定义统一的Dao接口
public interface IDao<T> {
public abstract T getSingleById(int id);
public abstract List<T> getAll();
public abstract boolean update(T video);
public abstract int deleteByIds(Collection<Integer> ids);
public abstract boolean delete(T video);
public abstract boolean add(T video);
public int updateBySQL(String statement, String... arguments);
public List<T> getListByFieldAndOrderBy(Map<String, Object> fieldValues,
Map<String, Boolean> orderBy);
}
public abstract class AbstractDao<T> implements IDao<T> {
private Dao<T, Integer> dao;
public AbstractDao(Context context, Class<T> clazz) {
try {
dao = DBHelp.getInstance(context).getDao(clazz);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public T getSingleById(int id) {
if (dao == null)
return null;
try {
return dao.queryForId(id);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
@Override
public List<T> getListByFieldAndOrderBy(Map<String, Object> fieldValues,
Map<String, Boolean> orderBy) {
if (dao == null)
return null;
try {
QueryBuilder<T, Integer> qb = dao.queryBuilder();
if (orderBy != null) {
for (Map.Entry<String, Boolean> entry : orderBy.entrySet()) {
qb.orderBy(entry.getKey(), entry.getValue());
}
}
if (fieldValues != null) {
Where<T, Integer> where = qb.where();
for (Map.Entry<String, Object> entry : fieldValues.entrySet()) {
where.eq(entry.getKey(), entry.getValue());
}
}
return qb.query();
// return dao.queryForFieldValuesArgs(fieldValues);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
@Override
public List<T> getAll() {
if (dao == null)
return null;
try {
return dao.queryForAll();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public List<T> getAllOrderBy(String columnName, boolean ascending) {
if (dao == null)
return null;
try {
return dao.queryBuilder().orderBy(columnName, ascending).query();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
@Override
public boolean update(T t) {
if (dao == null)
return false;
try {
return dao.update(t) == 1;
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
public int updateBySQL(String statement, String... arguments) {
if (dao == null)
return 0;
try {
return dao.updateRaw(statement, arguments);
} catch (SQLException e) {
e.printStackTrace();
}
return 0;
}
@Override
public int deleteByIds(Collection<Integer> ids) {
if (dao == null)
return 0;
try {
return dao.deleteIds(ids);
} catch (SQLException e) {
e.printStackTrace();
}
return 0;
}
public boolean deleteAll(String table) {
if (dao == null)
return false;
try {
return dao.executeRaw("DELETE FROM " + table) > 0;
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
@Override
public boolean delete(T video) {
if (dao == null)
return false;
try {
return dao.delete(video) == 1;
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
@Override
public boolean add(T t) {
if (dao == null)
return false;
try {
return dao.createIfNotExists(t) != null;
// return dao.create(video) == 1;
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
}
3, 在逻辑bean里使用很简单:
public class QuestionDao extends AbstractDao<Question> {
public QuestionDao(Context context) {
super(context, Question.class);
}
}
4, 使用的时候就很简单了:
QuestionDao dao = new QuestionDao();
dao.add(T);
...
这样就可以很简单的做CRUD操作了....