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 ...
随机推荐
- elk系列8之logstash+redis+es的架构来收集apache的日志【转】
preface logstash--> redis --> logstash --> es这套架构在讲究松耦合关系里面是最简单的,架构图如下: 解释下这个架构图的流程 首先前端log ...
- 【bzoj4293】【PA2015】Siano
如题,首先可以考虑相对大小是不变的. 那么先sort,之后每次在线段树上二分即可. #include<bits/stdc++.h> typedef long long ll; using ...
- JSOI 2017 退役记
意料之中,真的要退役了. 懒得写游记了. Round 2 的时候状态一直不太清醒,最后混了个rank19,准备AFO吧.
- php PDO判断连接是否可用的方法
转载自:傲雪星枫 原文地址: http://blog.csdn.net/fdipzone/article/details/53117541 mysql_ping() 检查到服务器的连接是否正常.如果 ...
- 20165301陈潭飞2017-2018-2 20165301 实验三《Java面向对象程序设计》实验报告
2017-2018-2 20165301 实验三<Java面向对象程序设计>实验报告 一.敏捷开发与XP实践-1 实验要求: 在IDEA中使用工具(Code->Reformate C ...
- CAS单点登陆的两个原理图
最近学习CAS单点登录,所以在网上找了两张比较清晰的原理图以供参考: [CAS浏览器请求认证序列图] 其中:* ST:Service Ticket,用于客户端应用持有,每个ST对应一个用户在一个客户 ...
- 【LOJ】#2586. 「APIO2018」选圆圈
题解 不旋转坐标系,TLE,旋转坐标系,最慢一个点0.5s--maya,出题人数据水平很高了-- 好吧,如果你不旋转坐标系,写一个正确性和复杂度未知的K - D树,没有优化,你可以得到87分的好成绩 ...
- python的select和epoll
python的select和epoll 1.select模型: linux中每个套接字都是文件,都有唯一的文件描述符,这些设备的文件描述符被放在一个数组中,然后select调用的时候遍历这个数组,如果 ...
- QT在windows平台安装使用MInGW编译
首先,Qt 5.9 的安装包与之前相比,不再区分 VS 版本和 MinGW 版本,而是全都整合到了一个安装包中.因此,与之前的安装包相比,体积也是大了不少,以前是 1G 多,现在是 2G 多. 双击启 ...
- thinkphp5.0Traits引入
ThinkPHP 5.0开始采用trait功能(PHP5.4+)来作为一种扩展机制,可以方便的实现一个类库的多继承问题. Traits 是一种为类似 PHP 的单继承语言而准备的代码复用机制.Trai ...