GreenDao开源ORM框架浅析
版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/u011133213/article/details/37738943
Android程序开发中,避免不了要用到数据库。我们都知道android提供了内置的Sqlite,即调用SQLiteOpenHelper的方法,来操作数据库。可是使用过程较为繁琐,从建表到对表中数据的正删改查操作,须要大量的代码来建立表。和完毕这些操作。
GreenDao竟然是ORM框架。它跟hibernate是非常像的。就是当你配置了一些參数信息之后,能够由框架来帮你生成相应的实体类。还有生成相应的操作实体类的代码(自己主动建表和主要的增删改查)。
其它的ORM框架:OrmLite, Androrm 相对照较简单,可是性能没有GreenDao好!
长处: 1.最大性能(最快的Android ORM)
2.易于使用API
3.高度优化
4.最小内存消耗
首先我们先看下怎么构建GreenDao的环境
一、Android Studio 中配置GreenDao依赖(Eclipse中直接下载jar包)
在项目中build.gradle中加入以下红色字体部分:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:19.+'
compile 'de.greenrobot:greendao:1.3.7'
compile 'de.greenrobot:greendao-generator:1.3.1'
}
Eclipse的话直接下载以下三个包导入libs
aaarticlea/png;base64,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" alt="" />
二、GreenDao使用详细解释
GreenDao流程图:
引入了这个流程图,那么我们開始浅析关于这幅图。
竟然GreenDao是用来帮我们简化建表、增删改查操作的,并且从上面的图中我们能够知道,原来不用GreenDao的时候,我们须要自己去写XyzEntity(实体类bean), 写完实体类之后,我们会写操作相应实体类的XyzDao。
另外GreenDao引入了两个类,
DaoSession: 操作详细DAO对象的各种getter方法。
DaoMaster: 它保存了我们的SQLiteDataBase对象及操作DAO类。
还有提供一些创建和删除Table的静态方法,它的内部类OpenHelper和DevOpenHelper实现了SQLiteOpenHelper并创建数据库的框架。
那么如今用了GreenDao我们须要做些什么。而不须要做什么呢?
1.我们须要在Android项目中创建一个Java类(带main函数)
2.导入greenDao-generator.jar和freemarker.jar两个包。
3.创建Schema,指定数据库的版本、Java package參数
Schema schema = new Schema(1000,"com.example.greendao.note");
4.创建Entity,并加入到Schema对象中(Entity:相当于数据库中的表, 所以又可能有ToOne, ToMany的关系),调用该函数 传入
第三步生成的Schema对象。
private static void addNote(Schema schema){
//生成一个Note Bean
Entity note = schema.addEntity("Note");
note.addIdProperty();
note.addStringProperty("text").notNull();
note.addStringProperty("comment");
note.addDateProperty("date");
}
5.Entity加入到Schema对象之后。调用DaoGenerator,进行自己主动生成上面所述的四个类
new DaoGenerator().generateAll(schema,"./app/src/main/java");//指定要生成的Schema,还有类生成之后存放的路径
aaarticlea/png;base64,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" alt="" />
到此为止。就基本上已经完毕了一个最简单的对象实体关系映射了。
然后我们就要開始使用这些类了。依据我们上面的介绍,我们知道我们须要先从DaoMaster的内部类DevOpenHelper中得到我们想要的SQLiteDatabase对象。然后我们须要通过这个对象创建出相应的DaoMaster类对象daoMaster,有了这个daoMaster之后,我们就能够实例化一个新的会话Session, 通过这个Session再来得到相应的实体Dao, 最后操作这个Dao中的函数,就能够对数据库中相应的表进行增删改查了。
DaoMaster.DevOpenHelper devOpenHelper = new DaoMaster.DevOpenHelper(getApplicationContext(),"notedb",null);
db = devOpenHelper.getWritableDatabase();
master = new DaoMaster(db);
DaoSession session = master.newSession();
CustomerDao customerDao = session.getCustomerDao();
customerDao.insert(new Customer());
此文仅抛砖引玉,还有另外的一些GreenDao更加详细的使用,希望大家自己去看官方的文档学习。
1.greenDAO官网:http://greendao-orm.com/
GreenDao开源ORM框架浅析的更多相关文章
- 手写开源ORM框架介绍
手写开源ORM框架介绍 简介 前段时间利用空闲时间,参照mybatis的基本思路手写了一个ORM框架.一直没有时间去补充相应的文档,现在正好抽时间去整理下.通过思路历程和代码注释,一方面重温下知识,另 ...
- 《Andorid开源》greenDao 数据库orm框架
一 前言:以前没用框架写Andorid的Sqlite的时候就是用SQLiteDatabase ,SQLiteOpenHelper ,SQL语句等一些东西,特别在写SQL语句来进行 数据库操作的时 ...
- Dos.ORM logo.Net轻量级开源ORM框架 Dos.ORM
http://www.oschina.net/p/dos-orm http://www.oschina.net/project/lang/194/csharp http://www.cnblogs.c ...
- 5 -- Hibernate的基本用法 --1 3 流行的ORM框架简介
⊙ JPA : JPA本身只是一种ORM规范,并不是ORM产品.它是Java EE规范制定者向开源世界学习的结果.JPA实体与Hibernate PO十分相似,甚至JPA实体完全可作为Hibernat ...
- orm框架综合
一, 目前ORM框架的产品非常之多,除了个大公司.组织的产品外,其他一些小团队也在推出自己的ORM框架.目前流行的ORM框架有如下这些产品: (1)Enitiy EJB:Enitiy EJB实际上也是 ...
- ORM框架对分表分库的实现
*:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !impor ...
- 2022年了有哪些值得推荐的.NET ORM框架?
前言: 最近有很多同学问我.NET方面有哪些好用的ORM框架,我觉得这方面的介绍网上应该会介绍的比较全面文章,于是我想搜一篇全面的介绍文章发给他们结果我发现网上说来说去基本上就是那几个,于是就有了这篇 ...
- 【转载】Android开源:数据库ORM框架GreenDao学习心得及使用总结
转载链接:http://www.it165.net/pro/html/201401/9026.html 最近在对开发项目的性能进行优化.由于项目里涉及了大量的缓存处理和数据库运用,需要对数据库进行频繁 ...
- ORM框架greenDao 2 (用于了解旧版本的使用方法,目前最新版本为3.2.2,使用注释的方式来生成)
摘要: Android中对SQLite数据库使用,是一件非常频繁的事情.现今,也有非常多的SQLite处理的开源框架,其中最著名的greenDao,它以占用资源少,处理效率高等特点,成为优秀的ORM框 ...
随机推荐
- ffmpeg安装步骤
首先要安装各种解码器 1.lame lame-3.99.5.tar.gz Url:http://sourceforge.net/project/showfiles.php?group_id=290&a ...
- 欢迎访问我的最新个人技术博客http://zhangxuefei.site
博客已经搬家,欢迎访问我的最新个人技术博客:http://zhangxuefei.site
- am335x ubi Read-only mode
是因为kernel里面有一个错误,要注释一下就好.
- 【nodejs】初识 NodeJS(三)
上节我们将 http 服务器(server.js)和请求路由模块(route.js)整合在一起了,当然这还不够,路由,顾名思义,是指我们要针对不同的 url 有不同的处理方式. 请求处理程序模块(re ...
- XCode10 运行app报错
原因很简单:Xcode10起,苹果摒弃了对libstdc++库的支持转而支持libc++库了.为了保证老代码能跑,必须将几个库复制到对应文件夹(见后).同时修改Build Phases中的Link B ...
- 火车头采集器如何采集QQ群成员中的QQ号
如何采集QQ群群员QQ号,采集QQ号,批量采集QQ号 众所周知,QQ群群员QQ号无法导出,即使会员也不可以,那我们只能通过三方工具来实现我们的要求,那今天我们讲讲如何通过火车采集器来采集QQ群群员QQ ...
- Houdini技术体系 基础管线(二) :Heightfiled与UE4的无缝导入以及对World Composition的支持
Authored by TraceYang 前言 传统的制作做比较真实大世界3D关卡地形时,通常的采用的方式是把HeightMap和SplatMap(Layer Mask)导入到引擎的地形系统里 ...
- 【Dubbo 源码解析】03_Dubbo Protocol&Filter
Protocol & Filter Dubbo 服务暴露和服务引用都是通过的 com.alibaba.dubbo.rpc.Protocol 来实现的.它是一个 SPI 扩展. @SPI(&qu ...
- Mock an function to modify partial return value by special arguments on Python
Mock an function to modify partial return value by special arguments on Python python mock一个带参数的方法,修 ...
- OpenGL矩阵变换,坐标空间变换