greenDAO文档翻译之四:会话

来源:互联网 发布:高新区山东广电网络 编辑:程序博客网 时间:2024/05/18 01:29

(生成的)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的会话文档获取会话和域标识的全面概念。


原文档在这里,欢迎指正。

原创粉丝点击