最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个框架还是不错的。直接面向对象的,可以通过对对象的操作,实现数据的存储。
但是官网上的API是在不敢恭维,文档写的很糙,看了半天,才搞懂一系列的流程。在此进行一下纪念。免得那天需要修改的时候,一脸懵逼。直接上干货
官网地址:http://greenrobot.org/greendao/
Github地址:https://github.com/greenrobot/greenDAO
GreenDao 优点:
1.性能高,号称Android最快的关系型数据库
2.内存占用小
3.库文件比较小,小于100K,编译时间低,而且可以避免65K方法限制
4.支持数据库加密 greendao支持SQLCipher进行数据库加密 有关SQLCipher可以参考这篇博客Android数据存储之Sqlite采用SQLCipher数据库加密实战
5.简洁易用的API
第一步:将项目需要的工程库进行引用
注:GreenDao可以自定义数据库操作对象的路径示例如下:
此处路径对应的是APP的gradle文件,android节点内填写。
属性介绍:
schemaVersion--> 指定数据库schema版本号,迁移等操作会用到;
daoPackage --> dao的包名,包名默认是entity所在的包;
targetGenDir --> 生成数据库文件的目录;
第二步:创建一个实体类
1 @Entity 2 public class ClassInfoBean { 3 //表ID,是每一条记录的唯一标识,自增 4 @Id(autoincrement = true) 5 private Long tabid; 6 /** 班型ID */ 7 private Integer classTypeId; 8 /** 班型编码 */ 9 private String classTypeCode; 10 /** 班型名称 */ 11 private String classTypeName; 12 /** 分期 */ 13 private Integer period; 14 /** 年级 */ 15 private Integer gradeId; 16 /** 科目 */ 17 private Integer subjectId; 18 /** 学科 */ 19 private Integer subjectProductId; 20 }
相关注解说明:
- 实体@Entity注解
schema:告知GreenDao当前实体属于哪个schema
active:标记一个实体处于活跃状态,活动实体有更新、删除和刷新方法
nameInDb:在数据库中使用的别名,默认使用的是实体的类名
indexes:定义索引,可以跨越多个列
createInDb:标记创建数据库表
基础属性注解
@Id:主键 Long 型,可以通过@Id(autoincrement = true)设置自增长
@Property:设置一个非默认关系映射所对应的列名,默认是使用字段名,例如:@Property(nameInDb = “name”)
@NotNull:设置数据库表当前列不能为空
@Transient:添加此标记后不会生成数据库表的列
索引注解
@Index:使用@Index作为一个属性来创建一个索引,通过name设置索引别名,也可以通过unique给索引添加约束
@Unique:向数据库添加了一个唯一的约束
关系注解
@ToOne:定义与另一个实体(一个实体对象)的关系
@ToMany:定义与多个实体对象的关系
注:定义实体类的时候,不用定义get和set方法。只需写方法名和相关注解,在后面进行点击Make Project或者Make Module 'app',就会自动在实体类中生成get和set方法,同时会在自己设定的目录下看到生成的三个类文件:- DaoMaster- DaoSession- UserDao。(没有在app的gradle里面设置targetGenDir 路径的,默认生成目录如下图)
第三步:在application中需要初始化数据库相关操作的对象
1 private static WeexApplication application; 2 @Override 3 public void onCreate() { 4 super.onCreate(); 5 application = this; 6 initGreenDao(); 7 } 8 public static WeexApplication getApplication() { 9 return application; 10 } 11 private SQLiteDatabase db; 12 private DaoSession mDaoSession; 13 private void initGreenDao() { 14 DaoMaster.DevOpenHelper mHelper; 15 DaoMaster mDaoMaster; 16 // 通过DaoMaster 的内部类 DevOpenHelper,你可以得到一个便利的SQLiteOpenHelper 对象。 17 // 可能你已经注意到了,你并不需要去编写「CREATE TABLE」这样的 SQL 语句,因为greenDAO 已经帮你做了。 18 // 注意:默认的DaoMaster.DevOpenHelper 会在数据库升级时,删除所有的表,意味着这将导致数据的丢失。 19 // 所以,在正式的项目中,你还应该做一层封装,来实现数据库的安全升级。 20 mHelper = new DaoMaster.DevOpenHelper(this, "notes-db", null); 21 db = mHelper.getWritableDatabase(); 22 // 注意:该数据库连接属于DaoMaster,所以多个 Session 指的是相同的数据库连接。 23 mDaoMaster = new DaoMaster(db); 24 mDaoSession = mDaoMaster.newSession(); 25 } 26 public DaoSession getDaoSession() { 27 return mDaoSession; 28 } 29 public SQLiteDatabase getDb() {return db;}
至此greendao的使用的相关配置已经全部配置完毕。下次会为大家介绍通过使用greenDao来实现数据库的增删改查等操作。