GreenDao官方文档翻译(四)之Sessions

来源:互联网 发布:linux0.11内核源码 编辑:程序博客网 时间:2024/04/27 14:39

GreenDao官方文档翻译(四)之Sessions – identity scope and session cache

Sessions

产生的DaoSession类是greenDAO的中间接口。DaoSession提供给开发者连接“实体”与“DAOs”的复杂操作集的基本方法。

DaoMaster & DaoSession

如前面部分所述,你需要创建一个DaoMaster实体以获取DaoSession实体。

daoMaster = new DaoMaster(db);daoSession = daoMaster.newSession();

注意数据库连接属于DaoMaster管理,所以所创建的所有session连接的是同一个database实体。因此新的Session可以被快速创建。每一个Session对象分配的内存其实是实体对象的“缓存”。

标识域与Session“缓存”

如果你有两个请求,需要返回同一条数据库对象,那么我们获取的java对象时同一个还是,两个不同的呢?这完全取决于Identity scope。

默认的greenDao对于多条请求会返回同一java对象的引用。例如,通过不同的请求从USER表中载入ID为42得Java对象的引用相同。

其实这种缓存机制也会引起一些“副作用”。如果一个实体对象仍然在内存中,实体将不会重新构造。执行请求时会立即从Session缓存中获取,而不是从数据库中获取。

清除标识域

为了清除所有Session的标识域,不返回缓存的对象。你可以执行:

daoSession.clear();

为了清除单个DAO的标识域,可以执行:

noteDao = daoSession.getNoteDao();noteDao.detachAll();

来清理Note对象的缓存。