GreenDao源码分析

151 阅读1分钟

代码生成

使用freemaker 生成BeanDao 对象, DaoMaster, DaoSession.

数据库操作

通过Bean 的操作更新数据库, 把bean 的字段转拼成 sql语句 原生的数据库对象SQLiteDatabase,SQLiteOpenHelper,SQLiteStatement

  • 定义TableStatements 通过静态代理 StandardDatabaseStatement(不加密), EncrytedDatabaseStatement(加密) 的方式来操作SQLiteStatment
  • StandardDatabase, EncrytedDatabase 来操作 SQLiteDatabase.

优化:

  • 在StandardDatabaseStatement 中 缓存 Statement 优化
  • IdentityScope 在内存中缓存数据,当然是Hashmap<K,Referer> 弱引用
  • 执行sql操作时,先判断是不是被当前线程锁定,如果没锁定,再开启事务