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

2, 定义抽象Dao

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操作了....

Android项目-高考作文-使用ORMLite抽象公共的Dao层的更多相关文章

  1. Android项目-高考作文功能简介(一)

    前言 :  开发安卓也已2年多了近3年了, 在自己刚入行的时候就有自己独立开发一个App的想法. 后来自己做了<<高考作文>>这一App. 后面续续断断的维护者. 也因为功能简 ...

  2. Android项目-高考作文-抽象BaseAdapter

    1, 在使用baseAdapter的时候,总是有需要重复的代码如: @Override public int getCount() { return list.size(); } @Override ...

  3. Android项目-高考作文项目架构(二)

    1, 普通的http json请求 请看下面架构草图: 这样就抽象出了其他Activity可能需要的Http Json请求的功能. 只要其他Activity有Http Json请求的需求都可以继承Ba ...

  4. Android项目-高考作文-AsyncTask的不足

    1, AsyncTask的不足. 从android4.0开始, 后台只允许一个AsyncTask执行, 如果当前的AsyncTask没有执行完毕, 那么当前的请求一直处于等待状态. 直到上一个执行完毕 ...

  5. Android项目-高考作文项目架构(三)

    上一篇我们讲到了,  Http Json的功能的抽取. 如果我们请求的是一个列表的数据呢? 我们使用那个功能就不是很好. 因为一个列表, 还有很多其他功能(比如每个listView都需要setAdap ...

  6. SSH 项目中 用Hibernate底层 简单的封装DAO层

    废话不多少了,主要是使用hibernate的查询方法,自己封装了DAO层,供service来方便使用. 首先:必须要继承的 public class CommonDao extends Hiberna ...

  7. Android项目实战(二十五):Android studio 混淆+打包+验证是否成功

    前言: 单挑Android项目,最近即时通讯用到环信,集成sdk的时候 官方有一句 在 ProGuard 文件中加入以下 keep. -keep class com.hyphenate.** {*;} ...

  8. Android项目结构 以及体系结构

    学习Android平台的人一般对Android的平台的应该有点认识 其它的就不多讲了 Android项目一般由以下几个部分构成 以上是一个简单的Android项目结构目录图 1. src  主要是 源 ...

  9. Ant自动编译打包&发布 android项目

    Eclipse用起来虽然方便,但是编译打包android项目还是比较慢,尤其将应用打包发布到各个渠道时,用Eclipse手动打包各种渠道包就有点不切实际了,这时候我们用到Ant帮我们自动编译打包了. ...

随机推荐

  1. 用IO创建并格式化分区

    转载:http://raylinn.iteye.com/blog/570274 BOOL Result; // used to read bad DeviceIoControl calls DWORD ...

  2. ubuntu + 远程桌面连接命令 + rdesktop + 连接windows或者ubuntu远程桌面

    原文 https://www.cnblogs.com/xiaouisme/p/5166469.html sudo apt-get install rdesktop rdesktop 124.42.12 ...

  3. Python3 注释

    确保对模块, 函数, 方法和行内注释使用正确的风格 Python中的注释有单行注释和多行注释: Python中单行注释以#开头,例如: #!/usr/bin/python3 #coding=utf-8 ...

  4. OpenResty和Resis一些基本的性能配置

    Basics: 1. Ensure that you have not disabled Lua code cache: https://github.com/openresty/lua-nginx- ...

  5. log4j日志记录级别是如何工作?

    级别p的级别使用q,在记录日志请求时,如果p>=q启用.这条规则是log4j的核心.它假设级别是有序的.对于标准级别它们关系如下:ALL < DEBUG < INFO < WA ...

  6. Swift 3中新的访问控制关键字fileprivate和open

    在Swift 3中除去原有的3个访问控制关键字private,public,internal,又添加了2个关键字fileprivate和open 它们可以看成是对private和public的进一步细 ...

  7. Django项目实践4 - Django站点管理(后台管理员)

    http://blog.csdn.net/pipisorry/article/details/45079751 上篇:Django项目实践3 - Django模型 Introduction 对于某一类 ...

  8. Lua判断OS并添加cpath

    Lua判断OS并添加cpath(金庆的专栏)Lua初始化时需要根据OS来设置package.cpath, 如果是Windows系统则添加 ?.dll, 否则添加 ?.so.不然加载错误后缀名的动态库会 ...

  9. 【安卓开发】Android系统中Parcelable和Serializable的区别

    http://greenrobot.me/devpost/android-parcelable-serializable/ 进行Android开发的时候,我们都知道不能将对象的引用传给Activiti ...

  10. 求链表倒数第n个元素

    提示:设置一前一后两个指针,一个指针步长为1,另一个指针步长为n,当一个指针走到链表尾端时, 另一指针指向的元素即为链表倒数第n个元素. #include <stdio.h> #inclu ...