Android笔记
——GreenDao
【若对该知识点有更多想了解的,欢迎私信博主~~】
依赖框架:GreenDao
一:优势及作用
- 高性能;
- 易于使用的强大API,涵盖关系和连接;
- 最小的内存消耗;
- 小库大小(<100KB)以保持较低的构建时间并避免65k方法限制;
- 数据库加密:greenDAO支持SQLCipher,以确保用户的数据安全;
二:GreenDao的配置
-
总build.gradle中添加(注入依赖)
dependencies { classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' }
-
分build.gradle顶部添加插件
apply plugin: 'org.greenrobot.greendao'
-
分build.gradle中添加(注入依赖)
dependencies { implementation 'org.greenrobot:greendao:3.2.2' }
-
分build.gradle中配置GreenDao信息
android { greendao{ //数据库版本号,升级时修改 schemaVersion 1 //生成的DAO,DaoMaster和DaoSession的包路径。默认与表实体所在的包路径相同 daoPackage 'lk.greendao.Dao' //生成源文件的路径。默认源文件目录是在build目录中的 (build/generated/source/greendao) targetGenDir 'src/main/java/' } }
三:使用
-
写实体类
@Entity public class Grade { @Id(autoincrement = true) @Property(nameInDb = "class_id") private Long classID; @Property(nameInDb = "class_name") private String className; }
注解:
- @Entity注解
- nameInDb:可自定义表的名称
- createInDb:标记创建数据库表。
- generateGettersSetters:是否自动生成属性的getter和setter方法。
- 基础属性注解
- @Id 主键,必须为Long类型,(autoincrement = true)可自增
- @Property 自定义列的名称(nameInDb = “class_id”)
- @NotNull 非空
- @Transient 表示不会在表中创建列
- 索引注解
- @Index 设置索引
- @Unique 设置唯一约束
- 关系注解
- @ToOne 定义一对一关系
- @ToMany 定义一对多关系
- @Entity注解
-
创建好实体类后重新加载,即可看到自动生成代码
-
定义一个类方便使用GreenDao
import android.app.Application; import android.database.sqlite.SQLiteDatabase; public class MyApplication extends Application { DaoSession daoSession; @Override public void onCreate() { super.onCreate(); initDao(); } //创建DaoSession private void initDao(){ //创建专有SqlOpenHelper DaoMaster.DevOpenHelper helper=new DaoMaster.DevOpenHelper(this,"sqlite"); //创建操作数据库对象 SQLiteDatabase db=helper.getWritableDatabase(); //创建db与GreenDao的联系 DaoMaster daoMaster=new DaoMaster(db); //创建管理表对象 daoSession=daoMaster.newSession(); } //获取DaoSession public DaoSession getDaoSession(){ return daoSession; } }
四:增、删、改、查
-
增
方法 说明 insert() 插入单个数据 insertInTx() 批量插入数据 insertOrReplace() 数据存在则替换、不存在则添加 insertOrReplaceInTx() 批量数据存在则替换、不存在则添加 //insert String word="Hello1"; daoSession.getMessageDao().insert(word); //insertInTx() List<String> list = new ArrayList<String>() {{ add("Hello1"); add("Hello2"); add("Hello3"); }}; daoSession.getMessageDao().insertInTx(list);
-
删(本质是根据Id删)
方法 说明 delete() 删除单个数据 deleteByKey() 根据主键删除单个数据 deleteInTx() 批量删除数据 deleteByKeyInTx() 根据主键批量删除数据 deleteAll() 删除全部数据 -
改(本质是根据Id改)
方法 说明 update() 修改单个数据 updateInTx() 批量修改单个数据 -
查
-
普通查询
方法 说明 load() 加载单个数据 loadByRowId() 根据rowid加载单个数据 loadAll() 加载全部数据 -
高级查询
方法 说明 queryRaw() 参数1:条件语句,参数2:条件值 queryBuilder() 通过QueryBuilder对数据进行操控 daoSession.getStudentDao().queryBuilder(). where(StudentDao.Properties.StudentID.eq(1)).list();
queryBuilder()的方法
方法 说明 where() 条件查询 or() 条件或者 and() 条件并且 join() 多表联查 list() 将数据存储到集合中 orderAsc() 根据某个属性升序显示 orderDesc() 根据某个属性降序显示 orderRaw() 根据sql语句排序 limit() 返回前几行,默认从0开始 offset() 偏移量,配合limit使用 distinct() 去除重复数值 count() 总行数 对Properties【属性】进行筛选的方法
方法 说明 eq() 等于 notEq() 不等于 like() like查询 between() 取中间范围 in() =in notIn() =not in gt() 大于 lt() 小于 ge() 大于等于 le() 小于等于 isNull() 为空 isNotNull() 不为空 利用queryBuilder批量删除
DeleteQuery<Student> dq =daoSession.getStudentDao().queryBuilder().buildDelete(); dq.executeDeleteWithoutDetachingEntities();
-
参考文档:
- https://www.jianshu.com/p/53083f782ea2
- https://www.jianshu.com/p/3ee00bd99593