GreenDao使用解析
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使用解析的更多相关文章
- ORM对象关系映射之GreenDAO源码解析
上一篇我们学习了GreenDAO的CRUD基本操作,可以说是非常的方便的,而且GreenDAO的效率和性能远远高于其它两款流行的ORM框架,下面是我从官网找的一副它们三个ORM框架之间的性能测试的直观 ...
- 数据库开源框架GreenDao的使用解析
数据库开源框架GreenDao的使用解析 1,GreenDao概述 1),greenDao是一个当下十分火热的数据库开源框架,或者说是一个帮助Android开发者将数据存到SQLite中的一个开源项目 ...
- 一篇好文之Android数据库 GreenDao的完全解析
数据库GreenDao.jpg 之前在开发过程中,数据库基本上会使用Litepal或者SQlite自己写,最近换新环境,公司原先使用的数据库就是GreenDao,在各种情况的作用下,准备了解下Gree ...
- Android ORM 框架之 greenDAO 使用心得
前言 我相信,在平时的开发过程中,大家一定会或多或少地接触到 SQLite.然而在使用它时,我们往往需要做许多额外的工作,像编写 SQL 语句与解析查询结果等.所以,适用于 Android 的ORM ...
- GreenDao关系建表
关系 在greenDAO,实体涉及使用一对一或一对多的关系.例如,如果要模拟一个1:greenDAOñ关系,你将有一个一对一和一对多的关系.但是,请注意,一对一和一对多的关系不是相互连接,所以你必须同 ...
- GreenDao介绍
GreenDao介绍 greenDAO 是一个将对象映射到 SQLite 数据库中的轻量且快速的 ORM 解决方案 何为ORM? ORM(Object/Relation Mapping): 对象/关系 ...
- greenDao生成的实体类无法存放JsonArray的解决方法
今天在解析Json数据的时候,发现我们用greenDao生成的实体类只能是基本数据类型,而我请求回来的json数据里面还包含了jsonArray. 下面是json的数据格式 "content ...
- GreenDao官方文档翻译(上)
笔记摘要: 上一篇博客简单介绍了SQLite和GreenDao的比较,后来说要详细介绍下GreenDao的使用,这里就贴出本人自己根据官网的文档进行翻译的文章,这里将所有的文档分成上下两部分翻译,只为 ...
- Android 开源项目android-open-project工具库解析之(一) 依赖注入,图片缓存,网络相关,数据库orm工具包,Android公共库
一.依赖注入DI 通过依赖注入降低View.服务.资源简化初始化.事件绑定等反复繁琐工作 AndroidAnnotations(Code Diet) android高速开发框架 项目地址:https: ...
随机推荐
- C# 监控代码执行效率
System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch(); stopwatch.Start(); stop ...
- 赞 ( 84 ) 微信好友 新浪微博 QQ空间 180 SSD故事会(14):怕TLC因为你不了解!【转】
本文转载自:https://diy.pconline.com.cn/750/7501340.html [PConline 杂谈]从前,大家谈TLC色变:如今,TLC攻占SSD半壁江山.是的,这个世界就 ...
- selinux 设置的彻底理解 并要 熟练经常的使用
只需要参考这篇文章就好了: http://www.jishux.com/plus/view-631994-1.html 注意 在linux中 两个术语 的严格区分和使用: 改变: change; 改变 ...
- [蓝桥] 算法训练 P0505
时间限制:1.0s 内存限制:256.0MB 一个整数n的阶乘可以写成n!,它表示从1到n这n个整数的乘积.阶乘的增长速度非常快,例如,13!就已经比较大了,已经无法存放在一个整型变量中:而35!就更 ...
- 《操作系统_FCFS和SJF》
先来先服务FCFS和短作业优先SJF进程调度 转自:https://blog.csdn.net/qq_34374664/article/details/73231072 一.概念介绍和案例解析 FCF ...
- 以结算价交易TAS和以市价交易TAM
CME Group的合约规格中提到TAS和TAM交易,如:Gold Futures Contract Specs Gold 期货 合约规格 Trading at Settlement (TAS) is ...
- Qt打包
先在Qt Creator里release一遍,打开Qt下载时自带的像命令控制台一样的东西,比如我在创建项目时选用的是MinGw编译器, 然后在文件管理器里找到release生成的exe,cd进exe所 ...
- 关于Django的Ajax操作
一 什么是Ajax AJAX(Asynchronous Javascript And XML)翻译成中文就是"异步Javascript和XML".即使用Javascript语言与服 ...
- HttpUrlConnection底层实现和关于java host绑定ip即时生效的设置及分析
最近有个需求需要对于获取URL页面进行host绑定并且立即生效,在java里面实现可以用代理服务器来实现:因为在测试环境下可能需要通过绑定来访问测试环境的应用实现代码如下: public static ...
- R----ggplot2包介绍学习--转载
https://www.cnblogs.com/nxld/p/6059603.html 分析数据要做的第一件事情,就是观察它.对于每个变量,哪些值是最常见的?值域是大是小?是否有异常观测? ggplo ...