GreenDao踩坑记
来源:互联网 发布:java招聘信息从哪找 编辑:程序博客网 时间:2024/06/03 09:24
GreenDao踩坑记
前言
以前都是自己写SQLite的dao,然后自己写sql语句,自己管理.最近发现一款开源库比较火,已经被开发者广泛使用.入门简单,不用再写sql语句,增删改查都只需一句话即可搞定.
当然流行也是有原因的,在第三方主流库中它的操作(插入,更新,读取)是最快的.
优点主要是下面几点:
- 存取速度快
- 支持数据库加密
- 轻量级
- 激活实体
- 支持缓存
- 代码自动生成
1. 引入GreenDao
首先在应用程序最外层的build.gradle中加入如下代码:
// In your root build.gradle file: buildscript { repositories { jcenter() mavenCentral() // add repository } dependencies { classpath 'com.android.tools.build:gradle:2.3.3' classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin } }
其次是在app主工程的build.gradle里面加入如下代码:
// In your app projects build.gradle file:apply plugin: 'com.android.application'apply plugin: 'org.greenrobot.greendao' // apply plugindependencies { compile 'org.greenrobot:greendao:3.2.2' // add library}
2.创建Bean对象
@Entitypublic class CacheBean { /** * 对象的Id,必须使用Long类型作为EntityId,否则会报错。(autoincrement = true)表示主键会自增,如果false就会使用旧值 */ @Id(autoincrement = true) private Long id; @Unique private String key; private String json;}
其中注解的意思:
- @Entity:告诉GreenDao该对象为实体,只有被@Entity注释的Bean类才能被dao类操作
- @Id:对象的Id,使用Long类型作为EntityId,否则会报错。(autoincrement = true)表示主键会自增,如果false就会使用旧值
- @Property:可以自定义字段名,注意外键不能使用该属性
- @NotNull:属性不能为空
- @Transient:使用该注释的属性不会被存入数据库的字段中
- @Unique:该属性值必须在数据库中是唯一值
- @Generated:编译后自动生成的构造函数、方法等的注释,提示构造函数、方法等不能被修改
注意:写好了bean对象之后必须进行如下操作:Android Studio菜单栏->Build->make project,然后greenDao会自动生成代码
自动生成的代码如下:
其中这些类对应的意思:
- DevOpenHelper:创建SQLite数据库的SQLiteOpenHelper的具体实现
- DaoMaster:GreenDao的顶级对象,作为数据库对象、用于创建表和删除表
- DaoSession:管理所有的Dao对象,Dao对象中存在着增删改查等API
3.初始化(创建)数据库
直接在应用程序的Application中进行初始化GreenDao,获取可以操作数据库的dao
public class NewsApplication extends Application { /** * 获取Dao对象管理者 Dao对象中存在着增删改查等API */ private static DaoSession daoSession; @Override public void onCreate() { super.onCreate(); initDatabase(); } private void initDatabase() { //创建数据库news.db DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "news.db", null); //获取可写数据库 Database db = helper.getWritableDb(); //获取Dao对象管理者 daoSession = new DaoMaster(db).newSession(); } /** * 获取Dao对象管理者 * @return DaoSession */ public static DaoSession getDaoSession() { return daoSession; }}
4.数据库的增删改查,实现自己的业务逻辑
public class CacheDao { /** * 插入cache 如果已经存在则替换 * * @param cacheBean CacheBean数据 */ public static void insertCache(CacheBean cacheBean) { NewsApplication.getDaoSession().insertOrReplace(cacheBean); } /** * 删除缓存 * * @param cacheBean CacheBean */ public static void deleteCache(CacheBean cacheBean) { NewsApplication.getDaoSession().delete(cacheBean); } /** * 更新缓存 * * @param cacheBean CacheBean */ public static void updateCache(CacheBean cacheBean) { NewsApplication.getDaoSession().update(cacheBean); } /** * 查询指定key的缓存 * * @param key 缓存的key 唯一标识 * @return 返回查询到的key的缓存集合 一般来说,这里是返回1个,当然,可能数据库里面没有该key对应的缓存 */ public static List<CacheBean> queryCacheByKey(String key) { //CacheEntityDao是自动生成的里面是一些数据库操作 //然后这里的Properties.Key也是自动生成的,意思是表里面的一个字段 return NewsApplication.getDaoSession().queryBuilder(CacheBean.class).where(CacheEntityDao .Properties.Key.eq(key)).list(); } /** * 查询全部缓存数据 * * @return 缓存集合 */ public static List<CacheBean> queryAllCache() { return NewsApplication.getDaoSession().loadAll(CacheBean.class); }}
结语
关于GreenDao的基本操作就到这里,它的高级操作请到官网学习.
- GreenDao踩坑记
- greenDao
- greenDAO
- greenDAO
- greenDAO
- GreenDao
- GreenDAO
- Greendao
- greenDAO
- GreenDao
- GreenDao
- GreenDao
- GreenDAO
- GreenDAO
- GreenDao
- GreenDao
- greenDAO
- GreenDAO
- Python多进程
- android 基础面试题锦记(4) Service
- 脚本乐园 Shell中read的选项及用法
- 能统一成全局变量的尽量别单个写
- Mat和IplImage相互转换
- GreenDao踩坑记
- 欢迎使用CSDN-markdown编辑器
- hibernate和mybatis的优缺点
- throw er; // Unhandled 'error' event
- 数据库设计---PowerDesigner(物理模型和概念模型)
- 经理的三个女儿问题
- repo安装方法
- iOS绘图方法介绍: UIBezierPath 和 Core Graphics
- 8.ActiveMQ,RabbitMQ,Kafka综合对比