当前位置: 首页 > news >正文

greenDAO讲义(一):使用篇

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

      目前android开发刚学习了一个多月,最近开始研究三方开源框架的用法。了解android开发的人应该都会知道,android的数据库开发主要用到sqlite(如果这点你不清楚,那这篇文章就直接pass吧)。greenDAO应该算是当前最火的数据库开源框架了吧,它是一个移动开发的ORM(object / relational mapping)框架,至于ORM是什么,可以百度之,本人理解也不是很深,大概意思就是为懒人设计的能够将对象和关系以映射的方式表达出来。greenDAO就是如此:

    greenDAO will do the word for you: it maps Java objects to datebase tables(often called ORM). 这样开发人员就可以吧精力集中在软件开发上,减轻了"wrting sql and parsing query results" 等等这些"quite tedious tasks".

144440_rFDu_1392982.jpg

总之,一句话,greenDAO就是实现Java对象和SQLite Datebase的一个媒介人,简化了SQLite的操作。

注:官方网站http://greendao-orm.com/


1. 下载greenDAO

    要使用肯定要先下载他的软件包了,官网上有它的连接,对于marven和gradle环境直接到serarch.maven.org上下载jar包就好了。

144509_kXx6_1392982.png

下载的jar导入到工程里面就可以了,通常都是/libs目录下。


2. 前言

    (1)generator --- greenDAO-generator.jar

   网上使用说明很少,搜到的都是对于我这个新人来说看的云里雾里,于是本人就干脆直接看官方文档,这篇文章也是边看边写的,可能会有些混乱。

    在github上下载的实例源码以及上面图中我们都会发现,会有一个generator。比如包里面会有greendao和greendao-generator,示例工程会有DaoExample和DaoExampleGenerator两个工程。之前一直不明白,看了官方文档终于理解了。

    “In order to use greenDao in your project, you need to create a second project, the "generator project". 这个额外的工程是一个普通的java工程,而非android工程。它的任务是生成你希望的java对象所对应的DAO接口对象。


  (2)核心的class -- greenDAO.jar

    DAO的core library(greenDAO.jar)中有以下几个核心类,也是后面比用到的,先来大概了解下他们的结构吧,不然直接看他们的使用会云里雾里。


144509_mKD1_1392982.jpg

DaoMaster:一看名字就知道它是Dao中的最大的官了。它保存了sqlitedatebase对象以及操作DAO classes(注意:不是对象)。其提供了一些创建和删除table的静态方法,其内部类OpenHelperDevOpenHelper实现了SQLiteOpenHelper并创建数据库的框架。

DaoSession:会话层。操作具体的DAO对象(注意:是对象),比如各种getter方法。

XXXDao:实际生成的某某DAO类,通常对应具体的java类,比如NoteDao等。其有更多的权限和方法来操作数据库元素。

XXXEntity:持久的实体对象。通常代表了一个数据库row的标准java properties。

如下一个实例初始化代码:

helper = new DaoMaster.DevOpenHelper(this, "notes-db", null);
db = helper.getWritableDatabase();
daoMaster = new DaoMaster(db);
daoSession = daoMaster.newSession();
noteDao = daoSession.getNoteDao();

即:先创建了一个SQLiteOpenHelper并创建连接到一个具体数据库;再根据具体的datebase创建一个master对象用于;最后通过master创建一个数据库的会话操作。


3. 创建generator工程

(1)创建Java工程

(2)导入greenDao-generator.jar和freemarker.jar两个包。

    freemarker是一个用java写的模板引擎,它能够基于模板来生成文本输出。应该就是用来自动生成DAO文件的。eclipse下面就是在            properties --> Java build path --> libraries下面导入jar包。

(3)创建schema

    这个不知道怎么业内怎么翻译的,暂时先翻译成”框架“吧。即搭建自己应用的数据库框架,包括table。

    创建schema时需要制定数据库的版本号、默认的Java package等参数。

 Schema schema = new Schema(1, "de.greenrobot.daoexample");

  默认Java package用来存放生成的entity、DAO文件、test代码。但也可以重新制定test文件的单独路径以及DAO文件的路径,代码:

schema.setDefaultJavaPackageTest("de.greenrobot.daoexample.test");
schema.setDefaultJavaPackageDao("de.greenrobot.daoexample.dao");


  另外,还有两个flag,用来标示entity是否是activie以及是否使用keep sections。代码:

schema2.enableKeepSectionsByDefault();
schema2.enableActiveEntitiesByDefault();

Keep sections:因为entity class在每次generator执行时均会覆盖原来的程序,为了能够添加用户自定义代码到entity中,需要设置该参数。只需要把自己的代码添加到下面的KEEP[]块中间就可以了。

// KEEP INCLUDES - put your custom includes here
// KEEP INCLUDES END
...
// KEEP FIELDS - put your custom fields here
// KEEP FIELDS END
...
// KEEP METHODS - put your custom methods here
// KEEP METHODS END

(4)创建entity

    schema中可以添加entity,简单的理解应该是entity对应一个具体的java class,entity可以添加property。Entity通常也是对应一个table。除了添加property之外,entity也可以添加to-one和to-many关系,即添加一对一的关系和一对多的关系。

    下面就直接贴一个官方示例的代码吧:

 public static void main(String[] args) throws Exception {
        Schema schema = new Schema(3, "de.greenrobot.daoexample");
        addNote(schema);
        new DaoGenerator().generateAll(schema, "../DaoExample/src-gen");
 } 
 
 
 private static void addNote(Schema schema) {
        Entity note = schema.addEntity("Note");
                
        note.addIdProperty();
        note.addStringProperty("text").notNull();
        note.addStringProperty("comment");
        note.addDateProperty("date");
 }

        系统会自动以传入的参数作为表的名字,但也可以自定义表名称:note.setTableName("NoteTable");

(5)生成DAO文件

    生成DAO文件就是使用main函数的最后一句话,其中后面的参数就是希望自动生成的代码对应的项目路径。

    new DaoGenerator().generateAll(schema, "../DaoExample/src-gen");

    注:设置的路径必须存在,否则会抛出异常。该路径是另外的工程下面的目录,当然也可以自己不这么做,只要这个目录存在就行。在schema创建的时候指定的package接口也是相对于该路径的。

    执行generator工程,会发现生成了DaoMaster、DaoSession、NoteDao、Note共4个类文件,Note是一个纯Java类,内部各种getter和setter接口均自动创建实现了。NoteDao文件则是创建Note这个表的各个接口,包括sql语句等。很神奇很方便哈!!


4. 创建基于greenDao的android工程

       完成了generator工作之后后面的东西就简单了:

    (1)创建一个android工程

    (2)插入一个Note对象:

DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "notes-db", null);  
db = helper.getWritableDatabase();  
daoMaster = new DaoMaster(db);  
daoSession = daoMaster.newSession();  
noteDao = daoSession.getNoteDao();  
Note note = new Note(null, noteText, comment, new Date());  
noteDao.insert(note);  
noteDao.deleteByKey(id);

真的是so easy!!


转载于:https://my.oschina.net/cheneywangc/blog/196354

相关文章:

  • vue中完美解决html2canvas图片跨域问题
  • Eclipse+kafka集群 实例源码
  • 高并发处理思路与手段(六):服务降级与服务熔断
  • 2014第6周日杂记
  • 26. Remove Duplicates from Sorted Array C++ 删除排序数组中的重复项
  • Usage of API documented as @since 1.8+”报错的解决办法
  • Mysql容器启动失败-解决方案
  • Linux的epoll模型
  • java B2B2C电子商务平台分析之七-Spring Cloud Config
  • 安排
  • Effective_STL 学习笔记(三十六) 了解 copy_if 的正确 实现
  • 强健x86平台
  • Dubbo各种协议详解
  • Java,console输出实时的转向GUI textbox
  • SpringBoot 日志框架
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 2018一半小结一波
  • 5、React组件事件详解
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • Brief introduction of how to 'Call, Apply and Bind'
  • CEF与代理
  • Effective Java 笔记(一)
  • Electron入门介绍
  • ES10 特性的完整指南
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • spring boot下thymeleaf全局静态变量配置
  • 服务器从安装到部署全过程(二)
  • 服务器之间,相同帐号,实现免密钥登录
  • 缓存与缓冲
  • 开源SQL-on-Hadoop系统一览
  • 前端工程化(Gulp、Webpack)-webpack
  • 前端性能优化——回流与重绘
  • 使用Gradle第一次构建Java程序
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • ​iOS实时查看App运行日志
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)EOS中账户、钱包和密钥的关系
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .NET Framework与.NET Framework SDK有什么不同?
  • .NET NPOI导出Excel详解
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .NET Project Open Day(2011.11.13)
  • .net 流——流的类型体系简单介绍
  • .NET 中创建支持集合初始化器的类型
  • .net反编译工具
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .net与java建立WebService再互相调用