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. javascript装饰器模式

    装饰器模式 什么是装饰器 原名decorator 被翻译为装饰器 可以理解为装饰 修饰 包装等意 现实中的作用 一间房子通过装饰可以变得更华丽,功能更多 类似一部手机可以单独使用 但是很多人都愿意家个 ...

  2. Docker安装tomcat和部署项目

    随着微服务的流行,Docker越来越流行,正如它的理念"Build, Ship, and Run Any App, Anywhere"一样,Docker提供的容器隔离技术使得开发人 ...

  3. Docker配置 DNS

    Docker 没有为每个容器专门定制镜像,那么怎么自定义配置容器的主机名和 DNS 配置呢? 秘诀就是它利用虚拟文件来挂载到来容器的 3 个相关配置文件. 在容器中使用 mount 命令可以看到挂载信 ...

  4. Android 学习笔记二 自定义按钮形状 颜色 点击渐变

    问题:自定义按钮的颜色 形状弧度  渐变效果 1.新建自定义属性button_login.xml (借鉴某大神) <?xml version="1.0" encoding=& ...

  5. 工作流引擎 Flowable 6.0.0.RC1 release,完全兼容Activi

    Flowable 6.0.0.RC1 release,第一个可流动的6引擎版本(6.0.0.RC1). Flowable 6.0.0.RC1 relase新增加的功能以及特色: 包重命名为org.Fl ...

  6. try_files 居然有这种用法

    try_files 参考:https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/ Use the tr ...

  7. Linux 下不经过BIOS重启(i386)

    前段时间有个项目,要求在Linux下不经过BIOS重启,i386平台. 一.可行性分析 众所周知,BIOS中包含了CPU及其他各种设备的初始化代码,Linux系统运行之后是否能够将各种用到的设备返回到 ...

  8. 使用java操作HDFS

    新建Java Project; 1,右击项目,属性,Java Build Path,Libraries,Add External JARs(haddopp根目录下的所以jar): 2,做一下项目关联, ...

  9. Windows 8 Cython 的配置(解决Unable to find vcvarsall.bat问题)

    关键是安装之前配置编译器. 1.下载MinGW 编译器 http://www.mingw.org/download.shtml 2.把编译器路径(例如C:\Program Files (x86)\Co ...

  10. Spring+EhCache缓存实例(详细讲解+源码下载)

    一.ehcahe的介绍 EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider.Ehcache是一种广泛使用的开源Java分布式 ...