GreenDao概述 如果Android项目中要使用GreenDAO框架,需要先创建一个Java项目用于生成实体类和DAO类,然后在Android项目中使用这些类,在此过程中分别需要对Android项目添加...DaoSession对象是连接GreenDao框架到SQLite数据库的纽带,通过该对象我们可以得到一个与数据库某个表相关的操作对象xxxDao。...原因是GreenDao在查询这块加了缓存,有趣吧,GreenDao在查询时使用了弱引用WeakReference,假如第一次查询时候我查询了小明这个Student的数据,那么它将把小明加入一个SparseArray...) 对于实体类,这没什么可讲的,就是一个Bean,一个实体类对应一张表,实体类里面有对应各个字段的getter和setter方法 EntityDao(实体Dao类) 由生成器生成的数据库操作类,它继承于...,还有比较重要的就是这个静态内部类Properties,该类中分别对每一个实体类的属性都创建了一个Property对象,而我们可以根据Property来得到这个属性对应表中的列名、是否为主键等值,其中还包括了一些方法
= 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
@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方法。
前言 之前在自己做项目的时候,用到了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:定义与多个实体对象的关系
或者官网) greenDAO是一个可以帮助Android开发者快速将Java对象映射到SQLite数据库的表单中的ORM解决方案,通过使用一个简单的面向对象API,开发者可以对Java对象进行存储、更新...(二)创建表 1.创建一个实体类 Entity note = schema.addEntity("Note"); 默认表名就是类名,也可以自定义表名 dao.setTableName("NoteList..."); greenDAO会自动根据实体类属性创建表字段,并赋予默认值。...例如在数据库方面的表名和列名都来源于实体类名和属性名。默认的数据库名称是大写使用下划线分隔单词,而不是在Java中使用的驼峰式大小写风格。...greenDAO时,一个实体类只能对应一个表,目前没法做到一个表对应多个实体类,或者多个表共用一种对象类型。
CORE CLASSES & MODELLING ENTITIES 关于以上几个类的相关概念与作用,我将在下面的代码(注释)中详细讲解。 当然,你也可以在 官网 中找到相关介绍。 让我们开始吧 一....在 ANDROID 工程中配置「GREENDAO GENERATOR」模块 在 .src/main 目录下新建一个与 java 同层级的「java-gen」目录,用于存放由 greenDAO 生成的 Bean...「GreenDao Generator」的输出,你可以在这个类中通过对象、关系等创建数据库结构,下面我将以注释的形式详细讲解代码内容。...Schema 对象后,你便可以使用它添加实体(Entities)了。...// note.setTableName("NODE"); // greenDAO 会自动根据实体类的属性值来创建表字段,并赋予默认值 // 接下来你便可以设置表中的字段
@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
如果是这样的话,那商店未免也太辛苦了不是吗?...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 里确实不怎么好定义(至少我当时没想好),可以破。
一、添加GreenDao支持 1.1 在项目根目录下的build.gradle下的代码添加下列代码: ?...1.2 在module下build.gradle(这里是app下的build.gradle)中添加下列代码: compile 'org.greenrobot:greendao:3.2.2' 并且在最上面添加...二、创建数据库对应的实体类,以用户信息为例 2.1 新建一个User实体类,里面有id,name、pass、sex、age五个字段,如图所示: ?...这是一个普通的实体类,我们通过注解,可以让后续声称对应的表。...@Entity 表明这个实体类会在数据库中生成一个与之相对应的表 @Id 对应数据表中的 Id 字段 其他更多注解可以参考greendao官方网站:http://greenrobot.org/greendao
这里主要分析、对比一下GreenDao框架 在原生的基础之上进行了怎么样的封装。 在进行源码分析之前我们先说一下GreenDao 的优缺点,然后在下面的阅读过程中自己进行体会。...原生 SQLite 过度到 GreenDao 相对还是比较容易; 数据表结构和Entity数据结构convert支持,Entity的不同数据结构和数据库存储结构之间做一个灵活的转换; 缺点: 不支持组合主键...数据库表有关系时,在第一次请求上会有延迟并且之后的更新都不会自动同步,需要主动更新或者清楚缓存之后再请求,写的时候需要主动同时更新。...数据库框架设计 文章前面简单的用代码进行数据库操作,我们可以从中看到一般在Android中操作数据库所需要的对象有: SQLiteOpenHelper:数据库的创建、更新的操作对象; SQLiteDatabase...还有 join 方法可以进行 表的关联查询 。
本文将简单介绍知识图谱的设计工具之一:Protege, 并通过一个简单的知识图介绍如何构建。在第二篇中将用 webProtege 构建,并将构建的文件导入到图数据库NEO4J中。 1....回到Individuals by class 标签,选中实体,在Property assertions窗口中为实体设置数据属性。...点击Data property assertions旁的“+”号按钮,在弹出的框中,选择属性名称,在右侧输入属性值。 ? ? 至此,我们添加了实体和实体的数据属性。...回到individuals by class标签,选择一个实体,在Property assertions内容页中,点击Object property assertions。...在左侧填入关系名称,需要准确填写,也可使用 Ctrl + 空格键进行补全,如果填写的关系名称不存在则会提示 非法的属性名;在右侧填写另一个实体的名称。 ? 确定完成之后,可以看到该属性: ?
+更加便捷生成DaoMaster和DaoSession 本文项目地址 首先让你的android studio配置Greendao数据库 在build.gradle目录下 dependencies {...:3.1.0' } 在app/build.gradle目录下设置 apply plugin: 'org.greenrobot.greendao' android { greendao{...:3.1.0' } 新建一个User类 @Entity public class User { @Id private Long id; @Property(nameInDb =...下面来说GreenDao的升级数据库,在user表插入age 1、修改build.gradle下面的schemaVersion 2 2、在user类,新增age对象 public class User...and setter & toString } 3、你要新建一个类MyDBHelper继承DaoMaster.OpenHelper,在类的构造函数传入Context,super(context,DB_NAME
前天我再次在项目中使用到 Sqlite 来做缓存,一般的代码是下面这样的。...GreenDao本身已经是很方便了,但我觉得还是不够方便。所以有了下面的"故事"。阅读完这个"故事",从此你使用 GreenDao 真正需要你手写的将会单表是不超过10行!...Java 程序了里面使用到 Json 的操作 API,我们可以在解析完之后就不再引用这些 Jar 包。...泛型约束 上面说的 T 泛型是属于 Dao 的配置类,稍作代码分析就可以看出,GreenDao 所有生成的数据表配置类都是继承于 AbstractDao 类。...您请留言,我补刀。
使用gradle导入greendao包和greendao-generator包并配置我们的路径 其中greendao用于我们操作数据库的类。...我们在项目配置文件中添加如下代码: compile 'org.greenrobot:greendao:3.0.1' compile 'org.greenrobot:greendao-generator:...在src/main下创建一个java-gen的包,用于生成我们的bean类文件 ? 创建Dao的生成类文件YeehotGeneratorDao.java,用于生成上面说的几个类。...这里我直接在项目里面创建了。 ?...Desktop/a/GreendaoInfo/app/src/main/java-gen"); } private static void addTable(Schema schema) { // 创建一个实体
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==了,防止此处再烙下病根,而且数据库字段在命名时,我发现字段名字为
;而LitePal是在另外的一个xml文件中定义。...图片发自简书App 2.greenDAO将会生成Java数据对象(实体)和DAO对象。这些DAO对象被用来让实体有最好的合理映射射方式。...而LitePal是直接将Java模型类映射成SQLite数据库对象; 3.添加关系数据表的属性时,greenDAO通过生成的Java实体类的实例调用对应数据类型的方法进行属性添加: ?...图片发自简书App 4.两个框架的增删改查操作风格不一(下面列举一个查询例子的代码片段): greenDAO: ? 图片发自简书App LitePal: ?...在使用的时候可以根据具体的操作环境或者个人的编程风格习惯进行抉择。
它实际是创建了一个可在编程语言里使用的“虚拟对象数据库”。 众所周知,我们在Android开发中使用的java是一种面向对象的编程语言。...优点: 文档较全面,社区活跃,有好的维护,使用简单,易上手 缺点: 基于反射,效率较低 2 GreenDao GreenDAO是一个可以帮助Android开发者快速将Java对象映射到SQLite数据库的表单中的...ORM解决方案,通过使用一个简单的面向对象API,开发者可以对Java对象进行存储、更新、删除和查询。...优点: 效率很高,插入和更新的速度是sqlite的2倍,加载实体的速度是ormlite的4.5倍。...:greendao-generator:2.2.0' 2 提取出的代码生成器(三个通用类) 这三个通用类用于生成表、字段以及对应的对象,我们可以理解为一个对象对应一个table,每个对象里面的属性对应每个
一、创建我们的测试工程 在本测试工程中使用不到iOS开发的UI部分,所以我们就创建一个基于系统控制台的工程,主调用代码当然是放到main函数中了,Project创建过程如下图所示,Create...key值一致的情况,然后在下篇博客中将会实现如何把不同key值的字典转换成实体类的属性。 ...1、首先我们先创建一个实体类,这个实体类要继承与实体基类,因为一些公用的方法是在实体基类中进行编写的,如便利构造器,便利初始化方法,把字典转成Model属性等方法回被抽象到这个基类当中。...实体基类中的方法是从各个Model中抽象出来的并且可以重复利用的部分,在实体基类的方法中大致包括:生成getter方法,生成setter方法,获取Model类的属性,把字典的值赋给对应的Model, 动态的调用...通过调用这个方法就可以把字典的值赋给对应的实体类的属性,调用这个方法的前提是要求字典的key与实体类的属性名必须相同。有的小伙伴会问如果不一样该怎么做呢?这个问题到下篇博客中在进行介绍。
保存在内存中的数据是处于瞬时状态的,而保存在存储设备中的数据是处于持久状态的,持久化技术则提供了一种机制可以让数据在瞬时状态和持久状态之间进行转换。...当然,除了这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
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实体类。
领取专属 10元无门槛券
手把手带您无忧上云