Android orm mysql_android ORM 框架 search

1. ORMLite

特性:

通过在类上添加注解设置类

强大抽象DAO类

QueryBuilder 可以灵活的构造简单和复杂的查询语句

支持MySQL, Postgres, Microsoft SQL Server, H2, Derby, HSQLDB, and Sqlite, 并且能够容易的扩展到其它的关系数据库

临时支持DB2, Oracle, ODBC and Netezza.

能防止编译好的语句重复查询

支持外键

支持基本的数据库事务

自动生成创建和删除SQL语句

支持不用注解配置表和字段

1. 支持表与JavaBean的映射

2. 支持表之间的关联查询

3. 支持,onetomany, manytomany

4. 社区很活跃,更新速度快

2. androidorm

主要功能特征:

1.实现数据库与java对象之间的映射转换

2.增加属性时自动更新数据库结构而不影响数据

3.支持sql直接操作,包括取对象列表

4.基于Apache License 2.0,可任意修改或二次开发

不足:

1. 不支持onetomany, manytomany

2. 不支持数据之间的关联查询

3. 更新速度慢,社区不活跃

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(){

@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 builder = getHelper().getDao().queryBuilder() ;

builder.where().le("_id", 50) ;

builder.limit(20l).orderBy("_id", false);

List 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 students = new Select().from(Student.class).where("id <= ?", 50).limit(20).orderBy("id desc").execute() ;

System.out.println(System.currentTimeMillis() - t1);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值