(生成的)DaoSession类是greenDAO核心接口之一。DaoSession提供给开发者通道操作基础实体和DAO类更多完整的一系列操作。另外,会话还管理着实体的域标识。
DaoMaster和DaoSession
正如在如何开始部分文档里写的,你需要创建一个DaoMaster对象来得到DaoSession:
daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();
注意数据库连接属于DaoMaster,所以多个会话指向同一个数据库连接。因此,新会话可以被创建得十分快。虽然如此,每一个会话分配了着内存,通常是一个实体的会话“缓存”缓存。
域标识和会话
如果你想两次查询返回同样的数据库对象,那需要有多少个Java对象与你一起工作:一个还是两个?这完全取决于域标识。
默认情况下(这个行为是可配置的),greenDAO里对于多次的查询会返回同一个Java对象的引用。举个例子,有两次查询,需要从USER表中加载一个ID是42的User对象会返回同一个Java对象。
这样做的一个副作用是会有很多的实体“缓存”。如果一个实体对象仍在存在于内存中(这里greenDAO使用弱引用),这个实体不会被再次构建。同样,greenDAO也不会再去查询数据库来更新实体的数值。相反的,对象会“立刻”从会话缓存中返回,速度要快上一到两个数量级。
清除域标识
要清除整个会话的域标识所以没有“被缓存”的对象返回:
daoSession.clear();
要清除一个DAO的域标识:
noteDao = daoSession.getNoteDao();
noteDao.detachAll();
概念
当前这个页面的文档信息很有限。请参考Hibernate的会话文档获取会话和域标识的全面概念。
原文档在这里,欢迎指正。
greenDAO通过DaoSession管理实体操作及缓存,实现高效数据库交互。本文介绍DaoSession与DaoMaster的关系,解释如何利用会话机制提高应用性能,并探讨域标识的概念。

2151

被折叠的 条评论
为什么被折叠?



