Android项目-高考作文-使用ORMLite抽象公共的Dao层
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层的更多相关文章
- Android项目-高考作文功能简介(一)
前言 : 开发安卓也已2年多了近3年了, 在自己刚入行的时候就有自己独立开发一个App的想法. 后来自己做了<<高考作文>>这一App. 后面续续断断的维护者. 也因为功能简 ...
- Android项目-高考作文-抽象BaseAdapter
1, 在使用baseAdapter的时候,总是有需要重复的代码如: @Override public int getCount() { return list.size(); } @Override ...
- Android项目-高考作文项目架构(二)
1, 普通的http json请求 请看下面架构草图: 这样就抽象出了其他Activity可能需要的Http Json请求的功能. 只要其他Activity有Http Json请求的需求都可以继承Ba ...
- Android项目-高考作文-AsyncTask的不足
1, AsyncTask的不足. 从android4.0开始, 后台只允许一个AsyncTask执行, 如果当前的AsyncTask没有执行完毕, 那么当前的请求一直处于等待状态. 直到上一个执行完毕 ...
- Android项目-高考作文项目架构(三)
上一篇我们讲到了, Http Json的功能的抽取. 如果我们请求的是一个列表的数据呢? 我们使用那个功能就不是很好. 因为一个列表, 还有很多其他功能(比如每个listView都需要setAdap ...
- SSH 项目中 用Hibernate底层 简单的封装DAO层
废话不多少了,主要是使用hibernate的查询方法,自己封装了DAO层,供service来方便使用. 首先:必须要继承的 public class CommonDao extends Hiberna ...
- Android项目实战(二十五):Android studio 混淆+打包+验证是否成功
前言: 单挑Android项目,最近即时通讯用到环信,集成sdk的时候 官方有一句 在 ProGuard 文件中加入以下 keep. -keep class com.hyphenate.** {*;} ...
- Android项目结构 以及体系结构
学习Android平台的人一般对Android的平台的应该有点认识 其它的就不多讲了 Android项目一般由以下几个部分构成 以上是一个简单的Android项目结构目录图 1. src 主要是 源 ...
- Ant自动编译打包&发布 android项目
Eclipse用起来虽然方便,但是编译打包android项目还是比较慢,尤其将应用打包发布到各个渠道时,用Eclipse手动打包各种渠道包就有点不切实际了,这时候我们用到Ant帮我们自动编译打包了. ...
随机推荐
- LeetCode 2
No1 Given a sorted array and a target value, return the index if the target is found. If not, return ...
- 吴恩达深度学习第1课第3周编程作业记录(2分类1隐层nn)
2分类1隐层nn, 作业默认设置: 1个输出单元, sigmoid激活函数. (因为二分类); 4个隐层单元, tanh激活函数. (除作为输出单元且为二分类任务外, 几乎不选用 sigmoid 做激 ...
- [HCNA]VLAN配置Access接口
实验目的 1.理解VLAN的应用场景 2.掌握VLAN的基本配置 3.掌握Access接口的配置方法 4.掌握Access接口加入相应VLAN的方法 实验仪器 eNSP 实验原理 如网络拓扑图所示 各 ...
- 如何搭建samba服务?
为了日后便于查询,本文所涉及到的所有命令集合如下: chkconfig iptables off #关闭防火墙命令 在Centos7中使用的是chkconfig firewalld off seten ...
- Docker容器如何互联
容器的连接(linking)系统是除了端口映射外,另一种跟容器中应用交互的方式. 该系统会在源和接收容器之间创建一个隧道,接收容器可以看到源容器指定的信息. 自定义容器命名 连接系统依据容器的名称来执 ...
- Python3 解释器
Linux/Unix的系统上,Python解释器通常被安装在 /usr/local/bin/python3.4 这样的有效路径(目录)里. 我们可以将路径 /usr/local/bin 添加到您的Li ...
- 【Android 应用开发】 Android 各种版本简介 ( Support 支持库版本 | Android Studio 版本 | Gradle 版本 | jcenter 库版本 )
初学者遇到 Android Studio, 导入工程后, 会出现各种奇葩错误, 如果管理好各个插件, gradle, SDK, SDK Tools, 各种官方依赖库 的版本, 会将错误大大的减少; 这 ...
- 有一个排序二叉树,数据类型是int型,如何找出中间大的元素。
void tree2Dll(TNode* root, TNode*& tail) { if (!root) { return; } if (root->left) { tree2Dll( ...
- 关于Java,那些我心存疑惑的事(不断更新中...)
本文主要列出一些Java常用到确又让大家不怎么注意的问题. 将会不断更新,欢迎关注-- 如有觉得不合理之处,欢迎评论交流,没有火花怎么印象深刻? (1)Java到底是值传递?还是引用传递? 揪出这个问 ...
- Android 动态加载(防止逆向编译) jar混淆加密
最近工作中接到了一个研究防止逆向编译的任务.研究了几天资料,最后基本实现了防破解技术,在这个工程中,也略有一些心得体会,现整理下来分享,供大家探讨参考研究.文中如有纰漏.失实之处,请大家及时给与指正. ...