所以适应Android的ORM框架就产生了。 目前较为流行的Android的ORM框架就是GreenDao, ORM就是关系映射(Object Relation Mapping),即对象关系映射。...它的实现思想就是将关系数据库中表的数据映射为对象,以对象的形式展现,这样开发人员就可以把数据库的操作转化为对这些对象的操作。...官网上说,GreenDao 3.0通过一个新的插件来生成代码,这个插件会去浏览所有的被Entity注释的类去收集表信息,并生成3个类,DaoSession,DaoMaster,和所有的Dao...关系注解 @ToOne:定义与另一个实体(一个实体对象)的关系 @ToMany:定义与多个实体对象的关系 接下来让我们点击as中Build菜单栏中的Make Project,make完成之后会发现我们的...;DaoSession可以让我们使用一些Entity的基本操作和获取Dao操作类,DaoSession可以创建多个,每一个都是属于同一个数据库连接的。
有关SQLCipher可以参考这篇博客Android数据存储之Sqlite采用SQLCipher数据库加密实战 5.简洁易用的API 第一步:将项目需要的工程库进行引用 ?...当前实体属于哪个schema active:标记一个实体处于活跃状态,活动实体有更新、删除和刷新方法 nameInDb:在数据库中使用的别名,默认使用的是实体的类名 indexes:定义索引,可以跨越多个列...)的关系 @ToMany:定义与多个实体对象的关系 注:定义实体类的时候,不用定义get和set方法。...(没有在app的gradle里面设置targetGenDir 路径的,默认生成目录如下图) ? 第三步:在application中需要初始化数据库相关操作的对象 ?...DaoMaster,所以多个 Session 指的是相同的数据库连接。
Source Qualifier可以联接来自同一源数据库的数据。通过将源链接到一个Source Qualifier转换,我们可以将两个或多个具有主键-外键关系的表连接起来。...null*** RTR –路由器转换两组 组1连接到TGT_NULL(表达式O_FLAG =’NULL’) 组2连接到TGT_NOT_NULL(表达式O_FLAG =’NNULL’) 11.如何通过映射流将备用记录加载到不同的表中...如果完全可分割,即没有余数,则将它们发送到另一个目标,再将它们发送到另一个目标。 在源限定符之后连接一个表达式转换。 将序列生成器的下一个值端口添加到表达式转换中。 ?...将端口从exp_1连接到target_1。 将端口从exp_2连接到target_2,并将端口从exp_3连接到target_3。 ? 19.我有三个相同的源结构表。但是,我想加载到单个目标表中。...您可以基于映射中的源限定符转换指定目标加载顺序。如果您有多个源限定符转换连接到多个目标,则可以指定集成服务将数据加载到目标中的顺序。
而今天的主角便是 greenDAO,下面,我将详解地介绍如何在 Android Studio 上使用 greenDAO,并结合代码总结一些使用过程中的心得。 关于 greenDAO ?...而关于 ORM (Object Relation Mapping - 对象关系映射)的概念,可参见 Wikipedia。...compile 'de.greenrobot:greendao-generator:1.3.1' 编写 ExampleDaoGenerator 类,注意: 我们的 Java 工程只有一个类,它的内容决定了...「GreenDao Generator」的输出,你可以在这个类中通过对象、关系等创建数据库结构,下面我将以注释的形式详细讲解代码内容。... DaoMaster,所以多个 Session 指的是相同的数据库连接。
前言 之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的差异。...只停留在会使用的阶段。说起来也是惭愧。本文的重点也是在于如何快速使用。不会进行较深的探究。 ---- GreenDAO: 介绍:对象关系映射的数据库(ORM) ?...GreenDAO 官网地址 优点 性能高,号称Android最快的关系型数据库 内存占用小 库文件小,编译时间短 支持数据库加密 API简介易用 说了他的优点,那么我们来看下如何使用。...active:标记一个实体处于活动状态,活动实体有更新、删除和刷新方法 nameInDb:在数据中使用的别名,默认使用的是实体的类名 indexes:定义索引,可以跨越多个列 createInDb:标记创建数据库表...,通过name设置索引别名,也可以通过unique给索引添加约束 @Unique:向数据库列添加了一个唯一的约束 关系注解 @ToOne:定义与另一个实体(一个实体对象)的关系 @ToMany:定义与多个实体对象的关系
,就是为每一个EntityDao字节码对象建立与之对应的db数据库的映射关系,从而管理所有的EntityDao类。...DaoSession对象是连接GreenDao框架到SQLite数据库的纽带,通过该对象我们可以得到一个与数据库某个表相关的操作对象xxxDao。...StudentDao类对应的数据库db的关系映射,而这个DaoConfig对象正是管理了对应的db对象。...GreenDao的逻辑: 1. 实例化一个SQLiteOpenHelper对象,以便建立与指定数据库(如”testDb”)之间的连接; 2....没有ORMLite那样封装的完整,不过greenDao的官网上也提到了这一点,正是基于generator而不是反射,才使得其效率高的多。
前段时间写Demo的时候遇到了数据库的并发问题 Android数据库多线程并发操作异常 ,然后研究了一下 Android中的数据库连接池 。...不支持合并写,写入的时候判断已有这条数据那么进行更新,没有则实现插入。...green-entity.png 上图为XXEntity、XXEntity.Properties、XXEntityDao 的关系和类的相关功能。...green-session.png GreenDao的优化 GreenDao 的优化主要体现在 DaoConfig 这个类中。...property PK. */ public final Property pkProperty;//表的主键属性,如果有多个或者没有那么为null public final boolean
LazyList类 Query类对象代表一个可以被多次执行的查询.当你使用QueryBuilder中的一个方法来获取结果(如一个list()方法),QueryBuilder内部使用Query类.如果你要以相同的条件多次查询...greenDao支持唯一结果(0或1个结果)、和多个结果的查询.如果你期望唯一的结果,调用Query或者QueryBuilder的unique()方法,它会给你唯一的结果或者null(如果没有找到匹配的实体...greenDao的LazyList类.为了使用时才加载数据,它保存了数据库游标的引用.这也是使用后必须调用关闭方法的原因(一般在try/finally代码块中关闭).一旦所有的元素被访问或遍历到,listLazy....Dao类中还有一个Properties内部类 ,包含所有的属性常量(对应数据库列名). 6.删除查询 批量删除会删除符合条件的实体.想要行批量删除,需要创建一个QueryBuilder,调用它的buildDelete...这里有2个静态的标识,一个是将sql语句打印出来,一个是将传入QueryBuilder的参数打印出来: QueryBuilder.LOG_SQL = true; QueryBuilder.LOG_VALUES
timber 通过一行代码就可以同时调用多种方式。...每种类型的树都可以通过种植操作把自己添加到森林对象中,或者通过移除操作从森林对象中删除,从而实现该类型日志记录的开启和关闭。...使用 gson 解析时,对应的 Java 实体类无需使用注解进行标记,支持任意复杂 Java 对象包括没有源代码的对象。...为了解决这个问题,对象关系映射(ORM)框架出现了,比较好的有 ActiveAndroid,ormlite 和 greenDAO。...如果你的 HTTP 服务有多个 IP 地址,OkHttp 在第一次连接失败是,会尝试其他可选的地址。这对于 IPv4+IPv6 以及托管在冗余数据中心的服务来说是必要的。
不过从安全性考虑,当你之前使用的是一个非官方、非开源的钱包产品时(尤其是小众钱包),或者之前没有对私钥、助记词、Keysotre文件小心保存时。...greenDAO greenDAO 是一个将对象映射到 SQLite 数据库中的轻量且快速的 ORM 解决方案,以下是一个greenDAO的作用示意图: ?...对象映射保存 把ETHWallet映射的到数据库,需要给类加上@Entity注解,这样greenDAO会生成几个类:DaoMaster、DaoSession及 ETHWalletDao 帮我们完成构建数据库表等操作...为我们生成的辅助类,插入到数据库就很简单了,一行代码: ethWalletDao.insert(ethWallet); // ethWallet为ETHWallet实例, 前面不管是新创建还是导入的账号都会构造这样一个实例...多账号管理 考虑到用户可能会创建多个账号,因此需要确定一个当前选定的账号,一般情况下,用户新创建的账号应该作为当前选中的的账号,同时其他账号应该取消选中, 我们完善下账号存储逻辑, 如下: (代码在代码库
(ORM全称Object Relational Mapping,即对象关系映射),最常见的便是greenDAO了。...greenDAO是一个将对象映射到SQLite数据库中的ORM解决方案,它在github上的地址是https://github.com/greenrobot/greenDAO,下面是greenDAO相比直接使用...greenDAO与直接使用SQLite的性能差异,所以只能是跟其他ORM框架比较,比如ORMLite、sugarORM等等) 但是greenDAO使用的数据库引擎还是SQLite,因此某些方面并没有本质的改善...支持注解才行。...-0.87.5.jar,点击“OK”按钮,然后工程又会重新编译; 3、为了确保注解的处理器一直工作,我们得在所有RealmObject派生类的前一行加上注解:@RealmClass 另外,正式的
,但是随着项目越来越大,依赖也会越来越多,常常会有几十甚至上百行,导致build.gradle越来越长 有没有一种好的方式不在 build.gradle 中写这么多的依赖配置?...schema版本,也可以理解为数据库版本号 schemaVersion 1 //设置DaoMaster、DaoSession、Dao包名,也就是要放置这些类的包的全路径。...' 这样做主要有2个优点 单一职责原则,将greendao的相关配置封装在一个文件里,不与其他文件混淆 精简了build.gradle的代码,同时后续修改数据库相关时不需要修改build.gradle...答案是可以的,主要是利用gradle的sourceSets属性 我们可以将资源文件像代码一样按业务分包,具体操作如下 新建res_xxx目录 ?...这样做的主要优点在于 不需要修改原有的依赖配置,而是通过全局的配置,利用本地的源码替换掉aar,侵入性低 如果有多个Module依赖于同一个aar,不需要重复修改,只需在根目录build.gradle
图结构是一种网络结构的抽象模型,是一组由边连接而成的节点 同时图可以表示任何二元关系,比如道路、航班… 那为什么可以表示二元关系呢?...因为图中的每一条边都是由两个节点相连而成的,因此图可以表示任何二元关系 在我们生活中,每天使用的微信等社交软件,我们的好友关系网也能被形象成一种图结构,如图,图能表示各种丰富的关系结构 在 JS 中没有图结构...邻接矩阵 我们可以采用一个二维数组来确定顶点间的连接关系,如果 A 能连接到 B 那么我们就置为 1 ,如果连不到就是 0 如图 A 连接 B 节点,因此 第一行第二列为 1,表示 A 连接 B 2....实现 addVertex 方法 添加这个顶点,我们先判断一下图中有没有这个顶点,有的话我们就不添加了,没有的话,添加到顶点列表中,同时添加到邻接表中来建立边关系 addVertex(value) {...实现 addEdge 方法 我们通过这个方法来建立边连接的关系,接收两个参数,表示需要进行连接的两个节点,当这两个节点都存在,并且没有进行连接时,我们再进行邻接表的修改操作,具体实现就是,将 a 放到
在使用SQLite前,我们先要搞清楚几个概念: 表是数据库中存放关系数据的集合,一个数据库里面通常都包含多个表,比如学生的表,班级的表,学校的表,等等。表和表之间通过外键关联。...要操作关系数据库,首先需要连接到数据库,一个数据库连接称为Connection; 连接到数据库后,需要打开游标,称之为Cursor,通过Cursor执行SQL语句,然后,获得执行结果。...Python定义了一套操作数据库的API接口,任何数据库要连接到Python,只需要提供符合Python标准的数据库驱动即可。...由于关系数据库的多个表还可以用外键实现一对多、多对多等关联,相应地,ORM框架也可以提供两个对象之间的一对多、多对多等功能。...ORM框架的作用就是把数据库表的一行记录与一个对象互相做自动转换。 正确使用ORM的前提是了解关系数据库的原理。
的http请求实现更换成Okhttp的实现,把OrmLite更换成greenDao或者Realm?...说到这里,可能很多有经验的朋友已经会心一笑,是的,老实说这篇文章可能对老司机没有太大的意义,但是如果看到这里还是心存疑问,或者你不知道什么是工厂方法模式,也不知道如何使用接口解耦什么的,没关系,请继续往下看...本文完整代码 https://github.com/AweiLoveAndroid/HttpRequestProcessor ,可以先clone到本地再看文章,为了方便阅读,下文中的代码将省略非重点部分...再试想一下,如果你有很多个Activity/Fragment/Presenter使用了VolleyRequestManager对象,你是不是要每个地方都更换一遍? ...注意我们创建请求对象的代码,这里没有出现具体的实现类: IRequestManager requestManager = RequestFactory.getRequestManager(
Android开发中常用的数据库有5个: 1. OrmLite OrmLite 不是 Android 平台专用的ORM框架,它是Java ORM。支持JDBC连接,Spring以及Android平台。...提供简单易学的APIs。可以很容易的处理1对1和1对多的关系型数据,并通过3个函数save(), delete() 和 find() (或者 findById()) 来简化CRUD基本操作。 3. ...GreenDAO 当性能很重要时(数据访问频繁),GreenDao是一个很快的解决方案,它能够支持数千条记录的CRUD每秒,和OrmLite相比,GreenDAO要快几乎4.5倍。...GreenDAO小于100KB,所以对于应用程序APK的大小影响很小。 4. ...,有点在于,realm去帮我们管理这个数据库,并且在安全上我这还没有讲到,这里只讲了基本用法,大家可以去看看官方的文档说明: 官方文档
如何将Spring Boot项目连接到H2? 什么是内存数据库? 典型的数据库涉及大量的设置。...例如,对于Oracle或mySQL数据库,您需要 安装数据库 设置架构 设置表格 填充数据 通过设置数据源和许多其他代码将应用程序连接到数据库 场景1 - 让我们考虑一下你想要快速进行POC概念验证测试的情况...Spring Boot和H2 您需要很少的配置才能将Spring Boot应用程序与H2连接。 在大多数情况下,只需将H2运行时jar添加到依赖项中即可。...但是,如果连接到mysql数据库,Spring Boot会知道它是一个永久数据库。默认情况下,它要求您设置数据库,设置表并使用您建立的连接。 Spring Boot应用程序是如何连接数据库H2的?...指定数据库连接信息在哪里?它如何知道自动连接到H2? 这就是Spring Boot Autoconfiguration的魔力。
31.3 Neo4j Neo4j是一个开源的NoSQL图形数据库,它使用由一级关系连接的节点的丰富数据模型,与传统的RDBMS方法相比,它更适合于连接的大数 据。...31.3.1连接到Neo4j数据库 要访问Neo4j服务器,您可以注入自动配置的 org.neo4j.ogm.session.Session 。...默认情况下,实例尝试使用Bolt协议连接 到 localhost:7687 的Neo4j服务器。...31.3.2使用嵌入模式 如果将 org.neo4j:neo4j-ogm-embedded-driver 添加到应用程序的依赖项中,Spring Boot会自动配置Neo4j的进程内嵌入式实例,该应用程...有关兼容版本的列 当类路径上有多个驱动程序时,嵌入式驱动程序优先于其他驱动程序。
然而,时隔多年,当我再次看到自己曾经留在项目里的那段代码时,相顾无言,惟有泪千行… 自己挖的坑,哭着也要填完 在此,向川神和小飞飞道歉,哈哈,让你们一直用着我当年的拙劣之作,实在抱歉,你们那时候一定很想打死我吧...新的类图,更强的封装 ? 目录结构看起来是这样的 ?...思路 数据库版本 greenDao3.x,3.x版本的 greenDao 采用注解+apt 的方式生成 PO(数据持久化对象),和以前的定义 Generator 方式相比,真的简洁了不少。...User 的声明,greenDao 3.x 之后,我们可以使用注解来声明一个 PO,然后 build 一下,greenDao 会自动在 greendao 这个包目录(包目录可以根据自己的喜好指定)下生成我们需要的...,只需要调用 createDBService 方法,将具体的工厂 XXDBServiceFactory 作为参数传入即可。
由于目前VULTR快照(Snapshot)创建是限时免费的,而且功能也很强,几乎是100%还原(连密码都会备份还原)。...目前还没写脚本,大家动手能力强的可以照着做。(后期会开发shell脚本和py脚本) 开启VULTR的API功能,并将服务器IP添加到白名单。...复制API key 和 服务器ID 连接到服务器,将任务添加到crontab定时执行即可 详细步骤 开启API 打开API开启地址:https://my.vultr.com/settings/#settingsapi...点击Enable IPV6,允许IPV6地址的调用。 将API Key保存好即可。 ---- 获取服务器ID 其实这个很简单,点击需要备份的服务器,查看网址,?...---- 设置crontab定时任务 PS:以下内容全是在服务器进行,需要用Xshell或者其他sftp连接工具连接到服务器后,执行命令。
领取专属 10元无门槛券
手把手带您无忧上云