GreenDao是一个轻量级的数据库框架,相比Xutils 等他的速度和效率会更快更好

这里展示GreenDao 的使用方法

①建立

compile 'org.greenrobot:greendao:3.2.0'

  基于Android Studio 的集成非常简单,你需要现在Build Gradle里依赖此GreenDao库

除此之外,你还需要在Build Gradle里使用插件的形式声明

//使用greendao
apply plugin: 'org.greenrobot.greendao'

  还应该在build.gradle里配置dao 的package和targetGenDir 和 version,此配置应是在android{ }内声明

 

  //greendao配置
greendao {
//版本号,升级时可配置
schemaVersion 1
daoPackage 'arcturis.greendao'
targetGenDir 'src/main/java' }

  补充一句,数据库的使用是需要SD卡的读写权限的所以别忘了添加权限

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

  tips!还需要再工程的build.gradle里声明,此处位于dependencies{ }内

        //GreenDao3依赖
classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'

②代码自动生成机制

GreenDao 的数据基类生成方式和xutils不一样,Xutils你需要手动去写bean类,然后和他的一些get Set方法,虽然Green也需要你去写,但是他更多亮点的东西是自动生成这些相关方法,包括他的数据库声明以及控制文件

比如我们需要一个列表购物的清单文件这个商品我们需要保存于数据库中

类似于这个是开始的bean基类

@Entity
public class Shop {
//表示为购物车列表
public static final int TYPE_CART = 0x01;
//表示为收藏列表
public static final int TYPE_LOVE = 0x02; //不能用int
@Id(autoincrement = true)
private Long id; //商品名称 Unique 该属性值必须在数据库中是唯一值
@Unique
private String name; //商品价格 Property 可以自定义字段名,注意外键不能使用该属性
@Property(nameInDb = "price") private String price;
//已售数量
private int sell_num;
//图标url
private String image_url;
//商家地址
private String address;
//商品列表类型
private int type;
}

  这里就是一个基本的bean基类,我们需要注解,这样GreenDao才会知道这个是我们的bean基类,才会有后面的自动生成代码的部分,然后我们看下各个注解的意思

@Entity 这个是一个Bean基类Entity
@Id(autoincrement = true) ID 可以设置是否自增涨,开启自增长之后就算初始化你传入null也没有关系,类型为Long型
@Unique 由此标识标识在数据库中此字段为唯一

@Property:设置一个非默认关系映射所对应的列名,默认是使用字段名,例如:@Property(nameInDb = "name")

之后点击编译按钮,然后如果各项设置均准确设置成功,GreenDao就会帮助我们生成以下文件

就是标红的三个文件

DaoMaster

DaoSession

ShopDao(这个名字是根据我们定义的bean类类名字来定义的)

然后我们就可以在Application里进行初始化工作

   private void steupDataBase(){
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this,"shop.db",null); //获取可写DataBase
SQLiteDatabase db = helper.getWritableDatabase();
//获取数据库对象
DaoMaster daoMaster = new DaoMaster(db);
//获取Dao对象管理者
daoSession = daoMaster.newSession();
}

  

DaoMaster:

使用 greenDAO 的入口点。DaoMaster 负责管理数据库对象(SQLiteDatabase)和 DAO 类(对象),我们可以通过它内部类 OpenHelper 和 DevOpenHelper SQLiteOpenHelper 创建不同模式的 SQLite 数据库。

DaoSession :

管理指定模式下的所有 DAO 对象,DaoSession提供了一些通用的持久性方法比如插入、负载、更新、更新和删除实体。

XxxDAO :

每个实体类 greenDAO  多会生成一个与之对应DAO对象,如:User 实体,则会生成一个一个UserDao 类

这样我们就将GreenDao建立完成

还需要获取daoSession的实例

   private static DaoSession  daoSession;

    public static DaoSession getDaoinstan(){
return daoSession;
}

  使用静态方法获取DaoSession的实例,就可以进行数据库的增删改查操作。

③如何将GreenDao生成在特定的CD卡位置

有时候我们需要将GreenDao声称在特定的位置,这个时候我们怎么做,GreenDao也给我们提供了定制的机会,按照以下类写即可

此类继承自contextWrapper需重写getDatabasePath方法

public class GreenDaoContext extends ContextWrapper {

    private Context mContext;

    public GreenDaoContext(){
super(MyApplication.getContext());
this.mContext = MyApplication.getContext();
} @Override
public File getDatabasePath(String dbName) { String dbBasePath = AppPathUtils.getDbCacheBaseDir(mContext); File dbDir = new File(dbBasePath);
if(!dbDir.exists()){
dbDir.mkdirs();
} StringBuffer buffer = new StringBuffer();
buffer.append(dbBasePath);
buffer.append(File.separator);
buffer.append(dbName); String dbPath = buffer.toString(); File dbFile = new File(dbPath); if(!dbFile.exists()){ try {
dbFile.createNewFile();// 创建文件 } catch (IOException e) {
e.printStackTrace();
}
return dbFile;
}else{
return super.getDatabasePath(dbName);
}
} /***
* 重载这个方法,是用来打开SD卡上的数据库的,android 2.3及以下会调用这个方法。
* @param name
* @param mode
* @param factory
* @return
*/
@Override
public SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory) {
SQLiteDatabase result =SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), factory);
return result;
} /**
* Android 4.0调用此方法获取数据库
* @param name
* @param mode
* @param factory
* @param errorHandler
* @return
*/
@Override
public SQLiteDatabase openOrCreateDatabase(String name, int mode, SQLiteDatabase.CursorFactory factory, DatabaseErrorHandler errorHandler) {
SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), factory);
return result;
}

然后再application里初始化的时候改变一个地方的传入值即可

   DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(new GreenDaoContext(),"shop.db",null);

        //获取可写DataBase
SQLiteDatabase db = helper.getWritableDatabase();
//获取数据库对象
DaoMaster daoMaster = new DaoMaster(db);
//获取Dao对象管理者
daoSession = daoMaster.newSession();

												

GreenDao使用解析的更多相关文章

  1. ORM对象关系映射之GreenDAO源码解析

    上一篇我们学习了GreenDAO的CRUD基本操作,可以说是非常的方便的,而且GreenDAO的效率和性能远远高于其它两款流行的ORM框架,下面是我从官网找的一副它们三个ORM框架之间的性能测试的直观 ...

  2. 数据库开源框架GreenDao的使用解析

    数据库开源框架GreenDao的使用解析 1,GreenDao概述 1),greenDao是一个当下十分火热的数据库开源框架,或者说是一个帮助Android开发者将数据存到SQLite中的一个开源项目 ...

  3. 一篇好文之Android数据库 GreenDao的完全解析

    数据库GreenDao.jpg 之前在开发过程中,数据库基本上会使用Litepal或者SQlite自己写,最近换新环境,公司原先使用的数据库就是GreenDao,在各种情况的作用下,准备了解下Gree ...

  4. Android ORM 框架之 greenDAO 使用心得

    前言 我相信,在平时的开发过程中,大家一定会或多或少地接触到 SQLite.然而在使用它时,我们往往需要做许多额外的工作,像编写 SQL 语句与解析查询结果等.所以,适用于 Android 的ORM  ...

  5. GreenDao关系建表

    关系 在greenDAO,实体涉及使用一对一或一对多的关系.例如,如果要模拟一个1:greenDAOñ关系,你将有一个一对一和一对多的关系.但是,请注意,一对一和一对多的关系不是相互连接,所以你必须同 ...

  6. GreenDao介绍

    GreenDao介绍 greenDAO 是一个将对象映射到 SQLite 数据库中的轻量且快速的 ORM 解决方案 何为ORM? ORM(Object/Relation Mapping): 对象/关系 ...

  7. greenDao生成的实体类无法存放JsonArray的解决方法

    今天在解析Json数据的时候,发现我们用greenDao生成的实体类只能是基本数据类型,而我请求回来的json数据里面还包含了jsonArray. 下面是json的数据格式 "content ...

  8. GreenDao官方文档翻译(上)

    笔记摘要: 上一篇博客简单介绍了SQLite和GreenDao的比较,后来说要详细介绍下GreenDao的使用,这里就贴出本人自己根据官网的文档进行翻译的文章,这里将所有的文档分成上下两部分翻译,只为 ...

  9. Android 开源项目android-open-project工具库解析之(一) 依赖注入,图片缓存,网络相关,数据库orm工具包,Android公共库

    一.依赖注入DI 通过依赖注入降低View.服务.资源简化初始化.事件绑定等反复繁琐工作 AndroidAnnotations(Code Diet) android高速开发框架 项目地址:https: ...

随机推荐

  1. Python3基础 response.read 输出网页的源代码

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  2. class类的使用

    我们在ES5中经常使用方法或者对象去模拟类的使用,虽然可以实现功能,但是代码并不优雅,ES6为我们提供了类的使用.需要注意的是我们在写类的时候和ES5中的对象和构造函数要区分开来,不要学混了. 类的声 ...

  3. kubernetes 实战4_命令_Configure Pods and Containers

    Configure Service Accounts for Pods A service account provides an identity for processes that run in ...

  4. HDU 4400 Mines(好题!分两次计算距离)

    http://acm.hdu.edu.cn/showproblem.php?pid=4400 题意: 在笛卡尔坐标中有多个炸弹,每个炸弹有一个坐标值和一个爆炸范围.现在有多次操作,每次引爆一个炸弹,问 ...

  5. c++中static的用法详解

    C 语言的 static 关键字有三种(具体来说是两种)用途: 1. 静态局部变量:用于函数体内部修饰变量,这种变量的生存期长于该函数. int foo(){ static int i = 1; // ...

  6. _spellmod_leech_spell

    comment  备注 spell 技能ID,玩家释放该技能时附带吸血效果 meetAura  产生吸血效果需要满足的光环ID,比如做一个空的光环,为寒冰箭吸血光环,则有些光环时候,寒冰箭会附带吸血效 ...

  7. BZOJ 2754 【SCOI2012】 喵星球上的点名

    题目链接:喵星球上的点名 首先可以发现姓和名两个串就是逗你玩的.在两个串中间插入一个\(10001\),当成一个串做就可以了. 于是我们的问题转化为了: 有\(n\)个串\(A_1,A_2,\dots ...

  8. JS绘制拓扑图示例 (JTopo)

    目前在做的项目是渔政的监控,需要用到的设备包括雷达,光电,站点信息等,想要更直观的展现设备之间的连接关系和状态信息,这时候需要画一张拓扑图 在做拓扑图之前,首先要学习一下,html里面另一个比较常用的 ...

  9. java递归 处理权限管理菜单树或分类

    1.数据库表设计 2.实体类设计 package com.ieou.capsule.dto.SystemPermissions; import java.util.List; /** * 功能菜单类 ...

  10. python+win32+ie浏览器操作 TypeError: getElementById() takes exactly 1 argument (2 given)

    使用body操作 # -*- coding:UTF- -*- import win32com.client from time import sleep second=win32com.client. ...