首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

拆轮子系列之理解GreenDao框架源码

GreenDao概述 如果Android项目中要使用GreenDAO框架,需要先创建一个Java项目用于生成实体类和DAO类,然后Android项目中使用这些类,在此过程中分别需要对Android项目添加...DaoSession对象是连接GreenDao框架到SQLite数据库的纽带,通过该对象我们可以得到一个与数据库某个表相关的操作对象xxxDao。...原因是GreenDao查询这块加了缓存,有趣吧,GreenDao查询时使用了弱引用WeakReference,假如第一次查询时候查询了小明这个Student的数据,那么它将把小明加入一个SparseArray...) 对于实体类,这没什么可讲的,就是一个Bean,一个实体类对应一张表,实体类里面有对应各个字段的getter和setter方法 EntityDao(实体Dao类) 由生成器生成的数据库操作类,它继承于...,还有比较重要的就是这个静态内部类Properties,该类中分别对每一个实体类的属性都创建了一个Property对象,而我们可以根据Property来得到这个属性对应表中的列名、是否为主键等值,其中还包括了一些方法

1.1K40

GreenDao 3.0解析

= true)设置自增长 @Property:设置一个非默认关系映射所对应的列名,默认是的使用字段名 举例:@Property (nameInDb=”name”) @NotNul:设置数据库表当前列不能为空...id; private String name; @Transient private int tempUsageCount; // not persisted } 我们新建实体类的时候...关系注解 @ToOne:定义与另一个实体一个实体对象)的关系 @ToMany:定义与多个实体对象的关系 接下来让我们点击as中Build菜单栏中的Make Project,make完成之后会发现我们的...DaoMaster就代表着一个数据库的连接;DaoSession可以让我们使用一些Entity的基本操作和获取Dao操作类,DaoSession可以创建多个,每一个都是属于同一个数据库连接的。...5) 进行试验 接下来,MainAcitivty写入如下代码,进行试验 public class MainActivity extends AppCompatActivity { @Override

59520
您找到你想要的搜索结果了吗?
是的
没有找到

GreenDao教程1

@Entity注解 schema:告知GreenDao当前实体属于哪个schema active:标记一个实体处于活跃状态,活动实体有更新、删除和刷新方法 nameInDb:在数据库中使用的别名,默认使用的是实体的类名...indexes:定义索引,可以跨越多个列 createInDb:标记创建数据库表 基础属性注解 @Id:主键 Long 型,可以通过@Id(autoincrement = true)设置自增长 @Property...:设置一个非默认关系映射所对应的列名,默认是使用字段名,例如:@Property(nameInDb = “name”) @NotNull:设置数据库表当前列不能为空 @Transient:添加此标记后不会生成数据库表的列...索引注解 @Index:使用@Index作为一个属性来创建一个索引,通过name设置索引别名,也可以通过unique给索引添加约束 @Unique:向数据库添加了一个唯一的约束 关系注解 @ToOne...:定义与另一个实体(一个实体对象)的关系 @ToMany:定义与多个实体对象的关系 注:定义实体类的时候,不用定义get和set方法。

79641

GreenDAO快速入门

前言 之前自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是不停的切换,但是没有真正去了解他们的差异。...//省略 compile 'org.greenrobot:greendao:3.2.0' } ---- 注解 实体@Entity注解 schema:告知GreenDao当前实体属于哪个schema...active:标记一个实体处于活动状态,活动实体有更新、删除和刷新方法 nameInDb:在数据中使用的别名,默认使用的是实体的类名 indexes:定义索引,可以跨越多个列 createInDb:标记创建数据库表...基础属性注解 @Id :主键 Long型,可以通过@Id(autoincrement = true)设置自增长 @Property:设置一个非默认关系映射所对应的列名,默认是的使用字段名 举例:@Property...,通过name设置索引别名,也可以通过unique给索引添加约束 @Unique:向数据库列添加了一个唯一的约束 关系注解 @ToOne:定义与另一个实体一个实体对象)的关系 @ToMany:定义与多个实体对象的关系

85230

开源数据库框架greenDAO

或者官网) greenDAO一个可以帮助Android开发者快速将Java对象映射到SQLite数据库的表单中的ORM解决方案,通过使用一个简单的面向对象API,开发者可以对Java对象进行存储、更新...(二)创建表 1.创建一个实体类 Entity note = schema.addEntity("Note"); 默认表名就是类名,也可以自定义表名 dao.setTableName("NoteList..."); greenDAO会自动根据实体类属性创建表字段,并赋予默认值。...例如在数据库方面的表名和列名都来源于实体类名和属性名。默认的数据库名称是大写使用下划线分隔单词,而不是Java中使用的驼峰式大小写风格。...greenDAO时,一个实体类只能对应一个表,目前没法做到一个表对应多个实体类,或者多个表共用一种对象类型。

2.2K50

Android ORM 框架之 greenDAO

CORE CLASSES & MODELLING ENTITIES 关于以上几个类的相关概念与作用,将在下面的代码(注释)中详细讲解。 当然,你也可以 官网 中找到相关介绍。 让我们开始吧 一.... ANDROID 工程中配置「GREENDAO GENERATOR」模块 .src/main 目录下新建一个与 java 同层级的「java-gen」目录,用于存放由 greenDAO 生成的 Bean...「GreenDao Generator」的输出,你可以在这个类中通过对象、关系等创建数据库结构,下面将以注释的形式详细讲解代码内容。...Schema 对象后,你便可以使用它添加实体(Entities)了。...// note.setTableName("NODE"); // greenDAO 会自动根据实体类的属性值来创建表字段,并赋予默认值 // 接下来你便可以设置表中的字段

1.1K60

Android greenDAO 3.2.2简单使用

@Property 参数 字段 @Unique 唯一约束 @ToOne 一对一,定义到另一个实体对象的关系,应在持有目标实体对象的字段上使用该注解 @ToMany 一对多,使用@ToMany的属性代表目标实体的...List,集合里的对象都必须至少有一个属性指向拥有@ToMany的实体 @JoinEntity 多对多,如果两个实体是多对多的关系,那么需要第三张表(表示两个实体关系的表) 常用的SQL语句条件关键词...= orderAsc:升序排序 orderDesc: 降序排序 gt(): > t():< ge:>= le:<= like():包含 between:俩者之间 in:某个值内 notIn:不在某个值内...limit(int): 限制查询的数量 list() 返回一个集合 listLazy() 懒查询 新建一个实体类 @Entity public class OrderDB { @Id(autoincrement...= -1; return flag; } /** * 插入多条数据,子线程操作 */ public boolean insertMultiOrderDB

52110

优雅地烘焙 DBService

如果是这样的话,那商店未免也太辛苦了不是?...3.x 之后,我们可以使用注解来声明一个 PO,然后 build 一下,greenDao 会自动 greendao 这个包目录(包目录可以根据自己的喜好指定)下生成我们需要的 DaoMaster、DaoSession...DBHelper.getInstance(App.getInstance(), "pero_db").getDaoSession().getUserDao()) { }; } } 这里,只定义了一个...sort); List queryAll(); void clear(); } 这时候,我们 save 一个 User 的时候可以这么写了: PeroDBServiceStore.getInstance...比如,需要根据 User 的某个属性(比如用户 Id)来获取数据,怎么破? 解答 额,这个骚操作, DataSource 里确实不怎么好定义(至少当时没想好),可以破。

66740

Android数据库开源框架GreenDao分析

这里主要分析、对比一下GreenDao框架 原生的基础之上进行了怎么样的封装。 进行源码分析之前我们先说一下GreenDao 的优缺点,然后在下面的阅读过程中自己进行体会。...原生 SQLite 过度到 GreenDao 相对还是比较容易; 数据表结构和Entity数据结构convert支持,Entity的不同数据结构和数据库存储结构之间做一个灵活的转换; 缺点: 不支持组合主键...数据库表有关系时,第一次请求上会有延迟并且之后的更新都不会自动同步,需要主动更新或者清楚缓存之后再请求,写的时候需要主动同时更新。...数据库框架设计 文章前面简单的用代码进行数据库操作,我们可以从中看到一般Android中操作数据库所需要的对象有: SQLiteOpenHelper:数据库的创建、更新的操作对象; SQLiteDatabase...还有 join 方法可以进行 表的关联查询 。

1.4K30

知识图谱的设计(一)

本文将简单介绍知识图谱的设计工具之一:Protege, 并通过一个简单的知识图介绍如何构建。第二篇中将用 webProtege 构建,并将构建的文件导入到图数据库NEO4J中。 1....回到Individuals by class 标签,选中实体Property assertions窗口中为实体设置数据属性。...点击Data property assertions旁的“+”号按钮,弹出的框中,选择属性名称,右侧输入属性值。 ? ? 至此,我们添加了实体实体的数据属性。...回到individuals by class标签,选择一个实体Property assertions内容页中,点击Object property assertions。...左侧填入关系名称,需要准确填写,也可使用 Ctrl + 空格键进行补全,如果填写的关系名称不存在则会提示 非法的属性名;右侧填写另一个实体的名称。 ? 确定完成之后,可以看到该属性: ?

2.7K30

关于mybatis一对一查询,一对多查询遇到的错误

Navicat (或许有些字段不支持特定的命名) 也是醉了,以前idea还是19版的,navicat也是老版本的时候mybatis关联查询mapper操作能正常运行,拿到相应字段,并封装,但最近写项目过程中遇到一个离谱的是...,过了好久才发现, 当关联查询时,无论一对一还是一对多 除了需要注意javaType和ofType之外,还应该注意各表主键不能同一名称 实体类文章 @Data @AllArgsConstructor...) 先看一下下面代码块的写法,注意一对一,一对多的各个实体查询时的id,都是拿的数据库的id字段,只有标签被我改为了tag_id 如下图 所以当我测试的时候能正常根据id拿到每张表的同一主键名称id 并不能拿到 控制台仅仅正确输出了标签list中的tag_id,没错,细心点,也是最后才发现...,它nn的,上面输出的user(文章作者)他的id封装错了,他的id是这篇文章的id,所以,sql自此所有==表的主键不都全命名为id==了,防止此处再烙下病根,而且数据库字段命名时,发现字段名字为

89550

GreenDao:你一定值得拥有的轻量数据库框架

它实际是创建了一个可在编程语言里使用的“虚拟对象数据库”。 众所周知,我们Android开发中使用的java是一种面向对象的编程语言。...优点: 文档较全面,社区活跃,有好的维护,使用简单,易上手 缺点: 基于反射,效率较低 2 GreenDao GreenDAO一个可以帮助Android开发者快速将Java对象映射到SQLite数据库的表单中的...ORM解决方案,通过使用一个简单的面向对象API,开发者可以对Java对象进行存储、更新、删除和查询。...优点: 效率很高,插入和更新的速度是sqlite的2倍,加载实体的速度是ormlite的4.5倍。...:greendao-generator:2.2.0' 2 提取出的代码生成器(三个通用类) 这三个通用类用于生成表、字段以及对应的对象,我们可以理解为一个对象对应一个table,每个对象里面的属性对应每个

1K10

iOS开发之使用Runtime给Model类赋值

一、创建我们的测试工程     本测试工程中使用不到iOS开发的UI部分,所以我们就创建一个基于系统控制台的工程,主调用代码当然是放到main函数中了,Project创建过程如下图所示,Create...key值一致的情况,然后在下篇博客中将会实现如何把不同key值的字典转换成实体类的属性。     ...1、首先我们先创建一个实体类,这个实体类要继承与实体基类,因为一些公用的方法是实体基类中进行编写的,如便利构造器,便利初始化方法,把字典转成Model属性等方法回被抽象到这个基类当中。...实体基类中的方法是从各个Model中抽象出来的并且可以重复利用的部分,实体基类的方法中大致包括:生成getter方法,生成setter方法,获取Model类的属性,把字典的值赋给对应的Model, 动态的调用...通过调用这个方法就可以把字典的值赋给对应的实体类的属性,调用这个方法的前提是要求字典的key与实体类的属性名必须相同。有的小伙伴会问如果不一样该怎么做呢?这个问题到下篇博客中进行介绍。

96770

Android集成GreenDao数据库

保存在内存中的数据是处于瞬时状态的,而保存在存储设备中的数据是处于持久状态的,持久化技术则提供了一种机制可以让数据瞬时状态和持久状态之间进行转换。...当然,除了这3种方式之外,你还可以将数据保存在手机的SD卡中,不过使用文件、Shared Preferences或数据库来保存数据会相对更简单一些,而且比起将数据保存在SD卡中会更加地安全。...Android开发中,集成Greendao通常需要如下几步: 首先,项目的build.gradle文件中添加依赖: classpath 'org.greenrobot:greendao-gradle-plugin...:3.3.0' // add plugin 然后,app/build.gradle文件中添加如下依赖: apply plugin: 'org.greenrobot.greendao' // apply...首先,我们创建一个实体对象: package com.yufulife.xj.model; import com.yufulife.xj.bean.CameraTakeBean; import com.yufulife.xj.bean.JoinTakeBean

55320

Android开发笔记(八十五)手机数据库Realm

greenDAO一个将对象映射到SQLite数据库中的ORM解决方案,它在github上的地址是https://github.com/greenrobot/greenDAO,下面是greenDAO相比直接使用...SQLite的几个改进点: 1、简化数据库操作的编码,开发者可以不用熟悉SQL语法; 2、使用灵活,可在实体类中自定义类和枚举类型; 3、号称是基于SQLite的ORM框架中性能最好的;(博主没对比...Realm使用C++引擎还有一个好处,就是可以跨平台使用,不但能用于Android,也能用于IOS。...Programming Languages”,然后勾选“Eclipse Java Development Tools”(最新版本是3.8.2) 4、点击“Next”按钮,执行安装操作 5、安装完毕重启ADT,就可以...Realm实体类除了字段声明与set方法、get方法之外,还要加上若干必要的注解,举例如下: @RealmClass : 加在类名前面,表示这是一个Realm实体类。

1.7K20
领券