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. Spring Boot 参数校验

    1.背景介绍 开发过程中,后台的参数校验是必不可少的,所以经常会看到类似下面这样的代码 这样写并没有什么错,还挺工整的,只是看起来不是很优雅而已. 接下来,用Validation来改写这段 2.Spr ...

  2. 解决linux中使用git,ssh每次都要输入密码

    在linux中使用git,去提交或者下载代码都是很方便的,但是最近新配置了一套系统,发现每次git pull或者其他动作都需要输入密码. 想一想不对劲啊,我使用的是ssh的方式clone的代码,而且在 ...

  3. MeshCollider双面化脚本

    由于MeshCollider组件可以挂载多个,所以不需要Mesh重新合并了. 除了反转法线还需要反转所有三角面的顺序 脚本如下: using System.Collections; using Sys ...

  4. sublime安装配置

    http://www.sublimetext.com.cn/ 打华东师范大学校赛的时候,学长谈论到这个编辑器.自定义背景多行多光标同时编辑酷炫爆了.感觉这是一个万能的文本编辑器.通过配置可以写多种语言 ...

  5. MongoDB 索引限制

    额外开销 每个索引占据一定的存储空间,在进行插入,更新和删除操作时也需要对索引进行操作.所以,如果你很少对集合进行读取操作,建议不使用索引. 内存(RAM)使用 由于索引是存储在内存(RAM)中,你应 ...

  6. PHP 实例 AJAX 与 XML

    在 PHP 中,AJAX 可用来与 XML 文件进行交互式通信,具体的通信过程,请参考本文内容! AJAX XML 实例 下面的实例将演示网页如何通过 AJAX 从 XML 文件读取信息: 实例   ...

  7. SSM实现秒杀系统案例

    ---------------------------------------------------------------------------------------------[版权申明:本 ...

  8. Rx系列二 | Observer | Observable

    Rx系列二 | Observer | Observable 上节课我们对RX的一些基本概念和使用JAVA代码实现了一个观察者,但是这只是对思路的一个讲解,在我们JAVA中,其实是已经封装好了观察者对象 ...

  9. Android------Android.mk调用shell脚本

    $(info $(shell ($(LOCAL_PATH)/echo_test.sh)))

  10. 带有进度条的WebView

    带有进度条的WebView 本篇继于WebView的使用 效果图 自定义一个带有进度条的WebView package com.kongqw.kbox.view; import android.con ...