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帮我们自动编译打包了. ...
随机推荐
- Windows 下 Ionic 开发环境搭建
Ionic 介绍 首先,Ionic 是什么. Ionic 是一款基于 Cordova 及 Angular 开发 Hybrid/Web APP 的前端框架,类似的其他框架有:Intel XDK等. 简单 ...
- IOS UITextView支持输入、复制、粘贴、剪切自定义表情
UITextView是ios的富文本编辑控件,除了文字还可以插入图片等.今天主要介绍一下UITextView对自定义表情的处理. 1.首先识别出文本中的表情文本,然后在对应的位置插入NSTextAtt ...
- redis中密码设置
先打开redis-server 再打开redis-cli 在redis-cli对redis进行操作 可以通过编辑redis.conf配置文件来设置密码. 1.重启Redis设置密码: 在配置文件中有个 ...
- vue mint-ui 实现省市区街道4级联动(仿淘宝京东收货地址4级联动)
demo及源码地址 https://github.com/artiely/citypicker 先去下载一个“省份.城市.区县.乡镇” 四级联动数据,然后 引入 import { Picker } f ...
- 使用RedisDesktopManager工具,解决连接失败问题
今天在云服务器上搭建好了redis环境,想用RedisDesktopManager工具去连接一下,结果连接不上,显示如下图: 我确保了服务器防火墙关闭,又在redis配置文件中设置了requirepa ...
- python基础学习(一)
python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum),诞生时间1989年圣诞 一.变量的命令规则 1.变量只能由大小写字母.数字和下划线三部分组成,并且不能以数字 ...
- Go 语言结构体
Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型. 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合. 结构体表示一项记录,比如保存图书馆的书籍记录,每 ...
- Scheme r5rs letrec的用法
说明,这是r5rs的用法. (letrec ((<variable> <init>) ...) <body>) 假设((<variable> <i ...
- Linux 中交换空间 (swap)应该分多大才好?
前一段时间,我们机房中一台Linux服务器运行缓慢,系统服务出现间歇性停止响应,让我过去处理一下这一问题,登录到服务器之后,发现此服务器的物理内存是16G,而最初装机的时候,系统管理人员却只分配了4G ...
- Writing Sentences [1]
1) try 'there will be' instead of 'then' In homogeneity MRF, if and , there will be even if . 2) in ...