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. 启动maven的web项目

    一.可以通过在pom中配置tomcat插件. 首先要确保你的仓库里有这个插件,然后按如下配置. <build> <plugins> <!-- 配置Tomcat插件 --& ...

  2. freeswitch控制台日志级别设置以及存储

    1.在管理控制台上设置 console loglevel (0~7)越往上级别越大 2.打开sip详细日志 sofia profile internal siptrace on 3.关闭sip详细日志 ...

  3. Restful framework【第四篇】视图组件

    基本使用 -view的封装过程有空可以看一下 -ViewSetMixin # ViewSetMixin 写在前面,先找ViewSetMixin的as_view方法 # 用了ViewSetMixin , ...

  4. git使用操作

    git config --system --unset credential.helper 重置git

  5. 解决/var/log下没有messages文件的问题?

    fedora23和centos7+ 都是使用的 systemd 来代替sysv 管理系统启动和服务了. 在systemd 中主要包含两个方面的内容, 当打开/etc/inittab 文件时, 会看到: ...

  6. windows进程中的几个杂项-hpguard 进程终止

    打印机后台进程 c:\windows\system32\spool printers,servers, tool等, 清空printers中的内容就可以正常打印; 锐爽的后视镜跟其他的车型的后视镜不一 ...

  7. Vim的一些使用

    Vim的三种模式 normal(普通模式) insert(插入模式) command(命令模式) Vim的工作方式不同于常规的编辑器,在常规编辑器下对应到Vim中就是一直使用insert模式进行操作, ...

  8. getAttribute与getParameter的区别

    1.getParameter得到的是字符串,其取值源于jsp页面,从jsp页面中接受一个存在的参数,多用于servlet中,用于判断业务的类型和跳转页面.如: request.getParameter ...

  9. [转载]解决linux 下多线程错误 undefined reference to `sem_init'

    转自:https://blog.csdn.net/yzycqu/article/details/7396498?utm_source=copy 解决linux 下多线程错误 undefined ref ...

  10. [转载]undefined reference to `memcpy@GLIBC_2.14'

    转自:http://blog.sina.com.cn/s/blog_6c5a47d30102wfw9.html undefined reference to `memcpy@GLIBC_2.14' ( ...