greenDao的实现原理

核心:

首先明确一点,sqlite操作都是依靠sql语句的,所以 greendao的所有api及实现都是为这个准则服务的。

 

变化:

3.0之前需要通过新建GreenDaoGenerator工程生成Java数据对象(实体)和DAO对象,非常的繁琐而且也加大了使用成本。

GreenDao  3.0最大的变化就是采用注解的方式通过编译方式生成Java数据对象和DAO对象。

 

DatabaseOpenHelper也是实现了SQLiteOpenHelper的一个帮助类,它内部可以获取到两种不同的数据库类型,一种是标准型的数据库StandardDatabase,另一种是加密型的数据库EncryptedDatabase


基本原理:

传入对象,实现sql拼接。

为每一个EntityDao字节码对象建立与之对应的db数据库的映射关系,从而管理所有的EntityDao类。

建立特定模式下的所有的DAO对象和数据库db对象的映射,管理特定模式下的所有DAO对象,并提供一些通用的CRUD持久化方法。

 

特点:

首先,它通过使用自身的插件配套相应的freemarker模板生成所需的静态代码,避免了反射等消耗性能的操作。其次,它内部提供了实体数据的映射缓存机制,能够进一步加快查询速度。对于不同数据库对应的SQL语句,也使用了不同的DataBaseStatement实现类结合代理模式进行了封装,屏蔽了数据库操作等繁琐的细节。最后,它使用了sqlcipher提供了加密数据库的功能,在一定程度确保了安全性,同时,结合RxJava,我们便能更简洁地实现异步的数据库操作。

 

延申:

数据库升级是怎么实现的?

GreenDao的升级思路:

  1. 创建临时表TMP_,复制原来的数据库到临时表中;
  2. 删除之前的原表;
  3. 创建新表;
  4. 将临时表中的数据复制到新表中,最后将TMP_表删除掉;

 

GreenDao 对当然也是对提供对 Rxjava 的支持(只是支持版本上有待同步)

 

多线程环境下怎么保证数据安全的?(sqlite本身不支持多线程读写)

 

crud的效率是如何做到提升的?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值