Android杂谈(22)GreenDAO的使用
2017-03-11 20:02
441 查看
转载请注意:http://blog.csdn.net/wjzj000/article/details/61426570
本菜开源的一个自己写的Demo,希望能给Androider们有所帮助,水平有限,见谅见谅…
https://github.com/zhiaixinyang/PersonalCollect (拆解GitHub上的优秀框架于一体,全部拆离不含任何额外的库导入)
https://github.com/zhiaixinyang/MyFirstApp(Retrofit+RxJava+MVP)
没有关系啊!我就是在装逼。
今天记录一下使用GreenDAO的过程,第一次使用关于数据库的框架。不得不说真的好用。有多好用?这么形容,十方无影像,六道绝形踪。跳出三界外,不在五行中。这简直就是一个贼6的框架。
依赖:
PS:我并没有用过2.x的版本,因此那种些main方法的经历的确没有接触过。
我们在使用GreenDAO的时候,我们只需要按套路写一个类,这个类就是对应我们数据库的每一张表。比如:
通过
例如,数据库侧的表和列名称派生自实体和属性名称。而不是在Java中使用的骆驼案例样式,默认数据库名称使用大写,使用下划线分隔单词。
例如,名为creationDate的属性 将成为数据库列 CREATION_DATE。
当我们获取
打开已有的数据库:做法很简单。和我们正常打开内置的数据库没什么两样。
然后按套路来创建
OK,到此我们就可以正常的操作数据库了。
更多用法还是直接进官网来的快:http://greenrobot.org/greendao/documentation/
最后希望各位看官可以star我的GitHub,三叩九拜,满地打滚求star:
https://github.com/zhiaixinyang/PersonalCollect
https://github.com/zhiaixinyang/MyFirstApp
本菜开源的一个自己写的Demo,希望能给Androider们有所帮助,水平有限,见谅见谅…
https://github.com/zhiaixinyang/PersonalCollect (拆解GitHub上的优秀框架于一体,全部拆离不含任何额外的库导入)
https://github.com/zhiaixinyang/MyFirstApp(Retrofit+RxJava+MVP)
写在前面
很久没有写博客了,没办法。国际局势着实有点跳脱,腐朽的美帝资本主义能的简直要上天了。把不要脸的精神发挥的淋淋尽致,日甚一日,甚嚣尘上。更可气的是,一些不法分子,资本主义自由思想泛滥,忘掉了本性,应该坚决清理出伟大的社会主义阵营!可这和我没写博客有什么关系呢?没有关系啊!我就是在装逼。
今天记录一下使用GreenDAO的过程,第一次使用关于数据库的框架。不得不说真的好用。有多好用?这么形容,十方无影像,六道绝形踪。跳出三界外,不在五行中。这简直就是一个贼6的框架。
准备阶段
GreenDAO的官方文档:http://greenrobot.org/greendao/documentation/依赖:
compile 'org.greenrobot:greendao:3.2.0'
greendao { schemaVersion 1 //数据库版本 daoPackage 'com.aopa.greendao' //自动生成工具类的目录位置 targetGenDir 'src/main/java' }
PS:我并没有用过2.x的版本,因此那种些main方法的经历的确没有接触过。
我们在使用GreenDAO的时候,我们只需要按套路写一个类,这个类就是对应我们数据库的每一张表。比如:
开始
@Entity public class CollectQuestion { @Id(autoincrement = true) private Long id; @Property(nameInDb = "USERNAME") private int testName; }
通过
@Entity那么这个类便成了数据库中的一张表,而
@Id此表明这是表的主键。当我们build工程之后我们会发现,GreenDAO替我们默认生成了:
关于Entity:
//直接Google翻译的官方注释 @Entity( // 如果你有多个模式,你可以告诉greenDAO // 实体所属的模式(选择任何字符串作为名称). schema = "myschema", // 使实体“活动”的标志:活动实体具有更新,删除和刷新方法。 active = true, // 指定数据库中的表的名称。 默认情况下,名称基于实体类名称。 nameInDb = "AWESOME_USERS", // 在此处定义跨多个列的索引。 indexes = { @Index(value = "name DESC", unique = true) }, // 标记DAO是否应该创建数据库表(默认值为true)。 // 如果您有多个实体映射到一个表,或者表的创建是在greenDAO之外创建的, // 则将此属性设置为false。 createInDb = false, // 是否应生成所有属性构造函数。 // 总是需要一个无参数的构造函数。 generateConstructors = true, // 如果缺少,应该生成属性的getter和setter。 generateGettersSetters = true )
关于Property:
@Property允许您定义属性映射到的非默认列名称。如果不存在,greenDAO将以SQL-ish方式使用字段名(大写字母,下划线代替驼峰,例如 customName将成为 CUSTOM_NAME)。注意:您当前只能使用内联常量来指定列名称。表以及字段的默认值:
greenDAO尝试使用合理的默认值,因此开发人员不必配置每一个位。例如,数据库侧的表和列名称派生自实体和属性名称。而不是在Java中使用的骆驼案例样式,默认数据库名称使用大写,使用下划线分隔单词。
例如,名为creationDate的属性 将成为数据库列 CREATION_DATE。
简单的操作数据库:
创建数据库:DaoMaster.DevOpenHelper devOpenHelper=new DaoMaster.DevOpenHelper(context,"test.db"); SQLiteDatabase database = devOpenHelper.getWritableDatabase(); DaoSession daoSession = new DaoMaster(database).newSession(); QuestionDao questionDao = daoSession.getQuestionDao();
当我们获取
questionDao对象之后,我们便可以很方便的操作数据库了。
//查找表中所有信息 collectQuestionDao.queryBuilder().list(); //按条件查询 collectQuestionDao.queryBuilder() .where(CollectQuestionDao.Properties.TestName .eq("aaa")).list(); //限制,分页 collectQuestionDao.queryBuilder() .limit(5) .offset(5) .list(); //简单的插入: collectQuestionDao.insert(collectQuestion); //通过主键删除: collectQuestionDao.deleteByKey(1L); //更新 question.setTestName("bbb"); collectQuestionDao.update(question); //更多用法,请直接上官网
打开已有的数据库:做法很简单。和我们正常打开内置的数据库没什么两样。
打开assets中的数据库
首先要封装一个返回SQLiteDatabase对象的类。
public class MySQLiteDatabase { String filePath = "data/data/com.aopa/data.db"; String pathStr = "data/data/com.aopa/databases"; public SQLiteDatabase openDatabase(Context context){ File jhPath=new File(filePath); if(jhPath.exists()){ return SQLiteDatabase.openOrCreateDatabase(jhPath, null); }else{ File path=new File(pathStr); if (path.mkdir()){ }else{ } try { InputStream is=context.getClass().getClassLoader().getResourceAsStream("assets/"+"data.db"); FileOutputStream fos=new FileOutputStream(jhPath); byte[] buffer=new byte[10240]; int count = 0; while((count = is.read(buffer))>0){ fos.write(buffer,0,count); } fos.flush(); fos.close(); is.close(); } catch (IOException e) { e.printStackTrace(); return null; } return openDatabase(context); } } }
然后按套路来创建
DaoSession即可。
MySQLiteDatabase s = new MySQLiteDatabase (); SQLiteDatabase db = s.openDatabase(App.getInstance().getContext()); DaoSession daoSession = new DaoMaster(db).newSession();
OK,到此我们就可以正常的操作数据库了。
尾声
如果看的直迷糊,你可拉到吧,别看了。民主富强革命火炬的传承,靠的是我们这些祖国的花朵,王者农药挺好玩的,还不快去上分。更多用法还是直接进官网来的快:http://greenrobot.org/greendao/documentation/
最后希望各位看官可以star我的GitHub,三叩九拜,满地打滚求star:
https://github.com/zhiaixinyang/PersonalCollect
https://github.com/zhiaixinyang/MyFirstApp
相关文章推荐
- Android 关于greenDao的使用教程
- Android GreenDao数据库框架使用
- Android greendao配置及使用
- 【Android - 框架】之GreenDao的使用
- Android GreenDAO ORM的使用(一) 生成DAO和Bean
- Android 关于greenDao的使用教程
- Android之greenDao,一个orm的使用
- 【Android】ORM数据库框架之GreenDao快速入门与使用
- Android数据库框架GreenDao封装使用,易理解、易扩展
- Android ORM 框架:GreenDao的使用,只需看一遍就会
- Android greenDao 数据库的使用(三)
- Android数据库ORM框架:GreenDao在AndroidStudio中使用
- Android GreenDao使用详解
- Android ORM数据库之GreenDao使用教程及源码分析
- Android之greenDao,一个orm的使用
- Android Studio平台使用GreenDao操作数据库
- Android之greenDao的使用
- Android ORM框架之GreenDao的使用方法
- Android greenDao入门以及使用教程
- android高效ORM数据库框架greenDao使用