电脑疯子技术论坛|电脑极客社区

微信扫一扫 分享朋友圈

已有 1868 人浏览分享

Android的GreenDao3.0数据库详解及使用

[复制链接]
1868 0
本帖最后由 luowei 于 2017-7-21 17:07 编辑

我们知道所有的ORM的,greenDAO是最快的。greenDAO不作性能方面任何妥协。数据库是非常适合存储大量数据,从而加速事项。使用greenDAO,大多数实体可以插入,更新和在速率加载每秒几千实体。我们在greenDAO的表现充满信心,并邀请您比较greenDAO对其他的框架。我们开源了我们的测试充分的透明度。下图比较了Android的greenDAO,OrmLite和ActiveAndroid 3个最流行的ORM解决方案(根据基于GitHub上星和Appbrain的统计普及)。greenDAO插入和更新实体快约2倍,并围绕比ORMLite快4倍的负载实体。典型应用的加载速度是最相关的。

一、GreenDao配置

配置项目的build.gradle

  1. classpath 'com.android.tools.build:gradle:2.3.3'
  2. classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
复制代码

配置位置如图:
22.png



2.配置Model的build.gradle

  1. [size=2][size=1]1)添加第一处
  2. apply plugin: 'org.greenrobot.greendao'
  3. 2)添加第二处
  4. compile 'org.greenrobot:greendao:3.2.2'
  5. compile 'org.greenrobot:greendao-generator:3.2.2'
  6. 3)添加第三处
  7. greendao {
  8.         //指定数据库schema版本号,迁移等操作会用到
  9.         schemaVersion 3
  10.         //DaoSession、DaoMaster以及所有实体类的dao生成的目录,默认为你的entity所在的包名
  11.         //daoPackage 包名
  12.         daoPackage 'com.example.tianmei.myapplication.greendao.gen'
  13.         //这就是我们上面说到的自定义生成数据库文件的目录了,可以将生成的文件放到我们的java目录中,而不是build中,
  14.         这样就不用额外的设置资源目录了
  15.         //工程路径
  16.         targetGenDir 'src/main/java'
  17. }
  18. [/size][/size]
复制代码

配置位置如图:

  1. [align=center]
  2. [/align]

  3. 3.编写entity类,创建实体类
  4. //@Entity 将我们的java普通类变为一个能够被greenDAO识别的数据库类型的实体类
  5. @Entity
  6. public class Person {
  7.     //@Id:通过这个注解标记的字段必须是Long类型的,这个字段在数据库中表示它就是主键,并且它默认就是自增的
  8.     @Id
  9.     private int Id;
  10.     private String UserName;
  11.     private String PassWord;
  12.     //@Transient:表明这个字段不会被写入数据库,只是作为一个普通的java类字段,用来临时存储数据的,不会被持久化
  13.     @Transient
  14.     private String Mobile; // not persisted
  15. }
复制代码

4.MakeProject 编译项目,User实体类会自动编译,生成get、set方法并且会在com.example.tianmei.myapplication.greendao.gen

3.png


二、GreenDao使用

声明属性

  1. private DaoMaster.DevOpenHelper mHelper;
  2. private SQLiteDatabase db;
  3. private DaoMaster mDaoMaster;
  4. private DaoSession mDaoSession;
  5. private PersonDao personDao;
  6. public static BlankFragment1 instances
复制代码

初始化greenDao方法

DaoMaster:使用greenDAO的切入点。 DaoMaster保存数据库对象(SQLiteDatabase)并管理特定模式的DAO类(而不是对象)。它有静态方法来创建表或删除它们。它的内部类OpenHelper和DevOpenHelper是SQLiteOpenHelper实现,在SQLite数据库中创建模式。

DaoSession:管理特定模式的所有可用DAO对象,您可以使用其中一个getter方法获取。 DaoSession还为实体提供了一些通用的持久性方法,如插入,加载,更新,刷新和删除。最后,DaoSession对象也跟踪标识范围。

DAO:数据访问对象(DAO)持续并查询实体。对于每个实体,greenDAO生成DAO。它具有比DaoSession更多的持久化方法,例如:count,loadAll和insertInTx。

实体:持久对象。通常,实体是使用标准Java属性(如POJO或JavaBean)表示数据库行的对象。

  1. **
  2.   * 设置greenDao
  3.   */
  4. private void setDatabase() {
  5.      // 通过 DaoMaster 的内部类 DevOpenHelper,你可以得到一个便利的 SQLiteOpenHelper 对象。
  6.      // 可能你已经注意到了,你并不需要去编写「CREATE TABLE」这样的 SQL 语句,因为 greenDAO 已经帮你做了。
  7.      // 注意:默认的 DaoMaster.DevOpenHelper 会在数据库升级时,删除所有的表,意味着这将导致数据的丢失。
  8.      // 所以,在正式的项目中,你还应该做一层封装,来实现数据库的安全升级。
  9.      mHelper = new DaoMaster.DevOpenHelper(getActivity(), "notes-db", null);
  10.      db = mHelper.getWritableDatabase();
  11.      // 注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。
  12.      mDaoMaster = new DaoMaster(db);
  13.      mDaoSession = mDaoMaster.newSession();
  14. }
  15. public static BlankFragment1 getInstances(){
  16.      return instances;
  17. }
  18. public DaoSession getDaoSession() {
  19.      return mDaoSession;
  20. }
  21. public SQLiteDatabase getDb() {
  22.      return db;
复制代码

  1. 在主方法中调用
  2. //设置greenDao
  3.      setDatabase();
  4. 获取Person对象
  5. personDao = getDaoSession().getPersonDao();
复制代码

三、用法(增删改查操作)

1、插入数据

  1. //新建一个对象
  2.         Person person = new Person(null, "sc", "123");
  3.         //插入
  4.         personDao.insert(person);
复制代码

2、查找数据
   
  1. List<Person> personList = personDao.queryBuilder()
  2.                 .where(PersonDao.Properties.Id.notEq(999))
  3.                 .orderAsc(PersonDao.Properties.Id)
  4.                 .limit(5)
  5.                 .build().list();
复制代码

3、修改数据

   
  1. //1.where是查询条件,
  2.         //2.unique()表示查询结果为一条数据,若数据不存在,findUser为null。
  3.         Person person = personDao.queryBuilder().where(PersonDao.Properties.UserName.eq("sc")).build().unique();
  4.         if(person != null) {
  5.             person.setUserName("lm");
  6.             // update为更新
  7.             personDao.update(person);
  8.             Toast.makeText(getActivity(), "修改成功", Toast.LENGTH_SHORT).show();
  9.         } else {
  10.             Toast.makeText(getActivity(), "用户不存在", Toast.LENGTH_SHORT).show();
  11.         }
复制代码

4、删除数据
   
  1. Person person  = personDao.queryBuilder().where(PersonDao.Properties.UserName.eq("sc")).build().unique();
  2.         if(person != null){
  3.             //通过Key来删除,这里的Key就是user字段中的ID号
  4.             personDao.deleteByKey(person.getId());
  5.         }
复制代码




1.png
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

关注

0

粉丝

60

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Powered by Pcgho! X3.4

© 2008-2022 Pcgho Inc.