GreenDao理解

原创 2017年01月03日 23:04:40

1.实体类的注解:
在Java代码中使用实体类代表我们需要持久化的数据。3.0以后由我们编写实体类,并添加注解。
1)@Entity
该实例是类的注解,告诉greenDAO这个类是需要持久化的实体类
2)@ID,field注解,表示选择一个long或Long类型的属性作为该实体所对应数据库中数据表的主键,参数可以设置(autoincreament=true)
3)@Property,field注解,可以自定义该属性在数据表的列名,默认的列名为属性名大写,并由下划线隔开多个单词
4)@NotNull对应着数据表中该列不能为空
5)@Transient与Java中的Transient关键字类似,指不对该属性持久化,即不为该属性在数据表中创建相应列
6)@Index为属性创建索引,有name和unique两个参数,name可以为索引指定名称,unique与数据表中建立索引的unique含义一致
7)@Generated greenDAO会根据开发者定义的实体类定义schema,并生成DAOs,而在生成过程中会为开发者编写的实体类的一些方法和域上添加@Generated注解,该注解只是提示开发者,避免对此域或方法代码的修改,如果想手动对其修改则需要改成@Keep注解,但是会影响后面的持久化过程。最好不要这样做。
2.Sessions
greenDAO为我们生成的类中包括DaoMaster,DaoSession和一些实体对应的DAOs,而前两个是greenDAO的机制中核心的接口。
每一个DaoMaster持有一个数据库连接,通过DaoMaster.newSession()方法可以实例化多个Session,这些Session对应同一个数据库连接,但是系统会为每一个Session分配内存,在这片内存中会为实体进行缓存。每一个Session对应一个Identity scope
从DaoSession中可以获取各实体类的对应DAO,然后就可以进行增删改查的操作了,对于每一个Session中的查询操作都会对查到的实体类做缓存操作,所以对应同一个Session的多次查询操作,如果entity的对象在该Session中有对应缓存则直接使用,而不再从数据库中读取数据并构建新的实体类对象。
3.查询
QueryBuilder的基本使用方法
通过DAOs的queryBuilder()方法构建一个构造器对象,然后对该构造器设置查询,排序条件等,最后获取查询结果。
QueryBuilder qb = userDao.queryBuilder(); //获取QueryBuilder
qb.where(Properties.FirstName.eq("Joe")) //设置查询条件
.orderAsc(Properties.LastName) //设置排序
.list(); //返回查询结果

greenDAO提供Query类用于返回查询结果,通过QueryBuilder.build()方法返回这一次查询的Query对象
返回单个结果:使用unique()或uniqueOrThrow(),返回单个结果,如果没有满足条件的结果,前者返回null, 后者抛出异常
返回所有结果:使用list(): 在内存中构建所有满足条件的实体类对象,通常保存到ArrayList中
1)多次查询

Query query = userDao.queryBuilder().where(
Properties.FirstName.eq("Joe"), Properties.YearOfBirth.eq(1970))
.build();
List joesOf1970 = query.list();
query.setParameter(0, "Maria");
query.setParameter(1, 1977);
List mariasOf1977 = query.list();

2)多线程查询
需要调用Query的forCurrentThread()返回Thread Local的Query对象。通过该对象可以执行线程安全的查询,无需锁。
4.连接

QueryBuilder<User> queryBuilder = userDao.queryBuilder();
queryBuilder.join(Address.class, AddressDao.Properties.userId)
  .where(AddressDao.Properties.Street.eq("Sesame Street"));
List<User> users = queryBuilder.list();

由于可以默认连接某个数据表的主键,所以可以省略连接源或目的的属性,因此join()方法有如下三种重载形式:

/**
* Expands the query to another entity type by using a JOIN. The primary key property of the primary entity for
* this QueryBuilder is used to match the given destinationProperty.
*/
public <J> Join<T, J> join(Class<J> destinationEntityClass, Property destinationProperty)

/**
 * Expands the query to another entity type by using a JOIN. The given sourceProperty is used to match the primary
 * key property of the given destinationEntity.
 */
public <J> Join<T, J> join(Property sourceProperty, Class<J> destinationEntityClass)

/**
 * Expands the query to another entity type by using a JOIN. The given sourceProperty is used to match the given
 * destinationProperty of the given destinationEntity.
 */
public <J> Join<T, J> join(Property sourceProperty, Class<J> destinationEntityClass, Property destinationProperty)

greenDao是对sqlite数据库操作的封装,可以让我们更加方便的使用sqlite,它不是使用反射的机制,而是直接生成相关代码。这就大幅度提升了它的性能
这里写图片描述
greenDao是将一个Java对象直接映射到了数据库中。

greenDAO的优势
1.一个精简的库
2.性能最大化
3.内存开销最小化
4.易于使用的APIs
5.对Android进行高度优化

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Android数据库框架GreenDao封装使用,易理解、易扩展

一、概述 在之前一个项目中,因为涉及到数据库,所以就接触到了ORM框架的GreenDao。后面就去网上大量的搜索下载学习,发现很多都是官网的翻译或者是官网DEMO的简单入门讲解,而且对于小白,也不知道...
  • FJeKin
  • FJeKin
  • 2016-04-13 12:00
  • 2793

GreenDao使用demo

  • 2017-06-20 15:10
  • 25.13MB
  • 下载

GreenDao-master

  • 2017-04-05 16:55
  • 16.81MB
  • 下载

强大的数据库ORM框架-GreenDao项目构建篇(Eclispe平台)

GreenDao项目是一个非常优秀的数据库ORM框架,除了拥有高性能、低消耗、易于使用的APIs等优点,它对有关数据库的操作进行了深度封装,且是完全面向对象的。也就是说,你基本可以不与SQL语句打交到...

greenDao在AS中的运用

  • 2016-05-19 14:33
  • 96KB
  • 下载

Android_ORM框架_GreenDao

  • 2017-08-09 15:39
  • 21.44MB
  • 下载

greenDAO的简单使用(二)

在上一篇greenDAO的简单使用(一)中已经介绍了如何生成DAO文件,这里就来介绍下如何使用DAO文件,利用源码 生成相应的daocore.jar库,这里也是新建一个Android工程,把相应的...

greenDao代码实例

  • 2015-12-24 16:07
  • 671KB
  • 下载

数据库greendao

  • 2015-06-01 17:41
  • 962KB
  • 下载

Android ORM 框架之 greenDAO

前言在平时的开发过程中,大家一定会或多或少地接触到 SQLite。然而在使用它时,我们往往需要做许多额外的工作,像编写 SQL 语句与解析查询结果等。所以,适用于 Android 的ORM 框架也就孕...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)