android ORM 框架 search
1. ORMLite
特性:
- 通过在类上添加注解设置类
- 强大抽象DAO类
- QueryBuilder 可以灵活的构造简单和复杂的查询语句
- 支持MySQL, Postgres, Microsoft SQL Server, H2, Derby, HSQLDB, and Sqlite, 并且能够容易的扩展到其它的关系数据库
- 临时支持DB2, Oracle, ODBC and Netezza.
- 能防止编译好的语句重复查询
- 支持外键
- 支持基本的数据库事务
- 自动生成创建和删除SQL语句
- 支持不用注解配置表和字段
2. androidorm
主要功能特征:
1.实现数据库与java对象之间的映射转换
2.增加属性时自动更新数据库结构而不影响数据
3.支持sql直接操作,包括取对象列表
4.基于Apache License 2.0,可任意修改或二次开发
ActiveAndroid
主要功能特征:
1.实现数据库与java对象之间的映射转换
2.增加属性时自动更新数据库结构而不影响数据
3. 支持onetomany
不足:
1. 数据表中一定有一列是id
在项目正式发布进行代码混淆时需要在proguard配置文件中添加以下部分:
-keep class com.activeandroid.** { *; } -dontwarn com.ikoding.app.biz.dataobject.**
-keep public class com.ikoding.app.biz.dataobject.** { *;} -keepattributes *Annotation*
具体来说就是com.activeandroid包中的代码不做混淆,标注有@Table注解的类不做混淆,并且不能去掉标注有@Table类的属性上的@Column注解。
性能比较:
硬件环境:模拟器:nexus s(800*480) 内存:512M
插入20000条数据(两个表有关联关系,A表4个字段,B表2个字段)
第一次:
框架类型 | 用时(ms) |
ormlite | 38445 |
activeandroid | 132376 |
第二次:
框架类型 | 用时(ms) |
ormlite | 47384 |
activeandroid | 142627 |
第三次:
框架类型 | 用时(ms) |
ormlite | 41974 |
activeandroid | 133260 |
平均:
框架类型 | 用时(ms) |
ormlite | 42601 |
activeandroid | 136087.7 |
插入速度,activeandroid 明显没有ormlite 效率高, 都是批量插入。
从20000多条数据中查询20条
第一次:
框架类型 | 用时(ms) |
ormlite | 310 |
activeandroid | 195 |
第二次:
框架类型 | 用时(ms) |
ormlite | 86 |
activeandroid | 72 |
第三次:
框架类型 | 用时(ms) |
ormlite | 89 |
activeandroid | 80 |
第四次:
框架类型 | 用时(ms) |
ormlite | 95 |
activeandroid | 53 |
第五次:
框架类型 | 用时(ms) |
ormlite | 89 |
activeandroid | 36 |
第六次:
框架类型 | 用时(ms) |
ormlite | 81 |
activeandroid | 61 |
第七次:
框架类型 | 用时(ms) |
ormlite | 87 |
activeandroid | 51 |
平均:除了第一次之外的平均值
框架类型 | 用时(ms) |
ormlite | 87 |
activeandroid | 58 |
现象:
1. 第一次普遍大,框架类型ormlite在300ms左右;而activeandroid在200ms左右。
可能原因是:
1. 第一次的原因是,在查询是需要与数据库建立连接,需要耗时长
2. 第二次时间短,不用再建立连接。
3. 在一次之后,某次查询时间才,因为数据连接被关闭。需要重新建立连接
4. ormlite 使用完连接,很快会释放, activeandroid 不会很快释放 所有activeandroid的查询速度比ormlite 快
备注 :如果读者有提高ormlite 查询速度的方案,请留言, 谢谢
测试代码:
ormlite:
插入:
getHelper().getDao().callBatchTasks(new Callable<Void>(){
@Override
public Void call() throws Exception {
long t1 = System.currentTimeMillis() ;
for(int i = 3 ; i < 10003 ; i ++){
Classes cl = new Classes() ;
cl.setName("cl" + i) ;
getHelper().getClassesDao().create(cl); Student student2 = new Student() ;
student2.setName("stu" + i) ;
student2.setAge(i) ;
student2.setClasses(cl) ;
getHelper().getDao().create(student2) ;
}
System.out.println(System.currentTimeMillis() - t1);
return null;
}}) ;
查询:
long t1 = System.currentTimeMillis() ;
QueryBuilder<Student, Integer> builder = getHelper().getDao().queryBuilder() ;
builder.where().le("_id", 50) ;
builder.limit(20l).orderBy("_id", false);
List<Student> stus = getHelper().getDao().query(builder.prepare()) ;
System.out.println(System.currentTimeMillis() - t1);
activeandroid:
插入:
long t1 = System.currentTimeMillis() ;
ActiveAndroid.beginTransaction();
try {
for(int i = 4 ; i < 10004 ; i ++){ Classes cl = new Classes() ;
cl.setName("cl" + i) ;
cl.save(); Student student2 = new Student() ;
student2.setName("stu" + i) ;
student2.setAge(i) ;
student2.setClasses(cl) ;
student2.save();
}
ActiveAndroid.setTransactionSuccessful();
}
finally {
ActiveAndroid.endTransaction();
} System.out.println(System.currentTimeMillis() - t1);
查询:
long t1 = System.currentTimeMillis() ;
List<Student> students = new Select().from(Student.class).where("id <= ?", 50).limit(20).orderBy("id desc").execute() ;
System.out.println(System.currentTimeMillis() - t1);
android ORM 框架 search的更多相关文章
- 简单实用的Android ORM框架TigerDB
TigerDB是一个简单的Android ORM框架,它能让你一句话实现数据库的增删改查,同时支持实体对象的持久化和自动映射,同时你也不必关心表结构的变化,因为它会自动检测新增字段来更新你的表结构. ...
- Android ORM 框架之 greenDAO 使用心得
前言 我相信,在平时的开发过程中,大家一定会或多或少地接触到 SQLite.然而在使用它时,我们往往需要做许多额外的工作,像编写 SQL 语句与解析查询结果等.所以,适用于 Android 的ORM ...
- Android ORM 框架之 greenDAO
前言 我相信,在平时的开发过程中,大家一定会或多或少地接触到 SQLite.然而在使用它时,我们往往需要做许多额外的工作,像编写 SQL 语句与解析查询结果等.所以,适用于 Android 的ORM ...
- 最好的5个Android ORM框架
在开发Android应用时,保存数据有这么几个方式, 一个是本地保存,一个是放在后台(提供API接口),还有一个是放在开放云服务上(如 SyncAdapter 会是一个不错的选择). 对于第一种方式, ...
- 推荐的Android ORM框架
1. OrmLite OrmLite 不是 Android 平台专用的ORM框架,它是Java ORM.支持JDBC连接,Spring以及Android平台.语法中广泛使用了注解(Annotation ...
- 最受欢迎的5个Android ORM框架
在开发Android应用时,保存数据有这么几个方式, 一个是本地保存,一个是放在后台(提供API接口),还有一个是放在开放云服务上(如 SyncAdapter 会是一个不错的选择). 对于第一种方式, ...
- Android orm 框架xUtils简介
数据库操作建议用ORM框架,简单高效.这里推荐xUtils,里面包含DBUtils.github地址:https://github.com/wyouflf/xUtils 获得数据库实例建议用单例模式. ...
- android ORM框架ORMLite封装
源码:http://download.csdn.net/detail/a924571572/9415506 一.框架效率对比 由于目前公司里面android端数据的数据量基本在千条以内,所以选择了更为 ...
- Android 自定义Android ORM 框架greenDAO数据库文件的路径
import android.content.Context; import android.content.ContextWrapper; import android.database.Datab ...
随机推荐
- Linux中等待队列的实现
1. 等待队列数据结构 等待队列由双向链表实现,其元素包括指向进程描述符的指针.每个等待队列都有一个等待队列头(wait queue head),等待队列头是一个类型为wait_quequ ...
- 华东师范大学第十届ECNU Coder程序设计竞赛
华东师范大学第十届ECNU Coder程序设计竞赛 浮点数模运算 solution 转成整数然后取模. 时间复杂度:\(O(1)\) 数螃蟹 solution 找出公差出现次数最多的作为公差,然后找出 ...
- redis aof文件过大问题
http://www.itnose.net/detail/6682725.html 最近新安装了一台redis,版本为redis-3.2.5 数据盘用的是固态硬盘. 之前用的是普通硬盘,redis日志 ...
- htaccess附录:正则表达式、重定向代码
.htaccess正则表达式 # 位于行首时表示注释. [F] Forbidden(禁止): 命令服务器返回 403 Forbidden错误给用户浏览器 [L] Last rule(最后一条规则): ...
- word2vec原理
最原始的是NNLM,然后对其改进,有了后面的层次softmax和skip gram 层次softmax:去掉了隐藏层,后面加了huffuman树,concat的映射层也变成了sum skip gram ...
- MySQL-事务特性
1. 事务概念引入: 现实生活中,我们往往经常会进行转账操作,转账操作可以分为两部分来完成,转入和转出.只有这两部分都完成了才可以认为是转账成功.在数据库中,这个过程是使用两条语句来完成的,如果其中任 ...
- wordpress后台加载速度异常缓慢排查记录(原创)
原因在于在function.php函数中加入了下面的代码导致了缓慢: //停用版本更新通知remove_action('load-update-core.php', 'wp_update_themes ...
- Jmeter----请求的reponse结果中的某个参数作为JDBC Request的查询条件
一.前言 数据库连接成功,若不会的查看:https://www.cnblogs.com/syw20170419/p/9832402.html 二.需求 将登录账号12608523691,接口的repo ...
- **CodeIgniter系列 添加filter和helper
filter: 使用CI的hooks来实现filter. 1.在system/application/config/config.php中,把enable_hooks的值改为TRUE $config[ ...
- day1作业一:编写登陆接口
作业一:编写登陆接口 1.输入用户名和密码 2.认证成功后显示欢迎信息 3.输错三次后锁定 Readme: (1)提示用户输入用户名: (2)用户名验证,验证是否已经锁定: (3)是否锁定:已锁定告诉 ...