GreenDao

可以先上官网看下对于GreenDao的介绍,以及为什么使用greendao。

Introduction


greenDAO is an object/relational mapping (ORM) tool for Android. It offers an object oriented interface to the relational database SQLite. ORM tools like greenDAO do many repetitive tasks for you and offer a simple interface to your data.

greenDAO是Android的对象/关系映射(ORM)工具。它为关系数据库SQLite提供了面向对象的接口。像greenDAO这样的ORM工具可以为您完成许多重复性任务,并为您的数据提供简单的界面。

 

并且目前greendao是android ORM(对象关系映射)框架中速度最快,效率最高的一个数据库操作框架。

 

配置:官方教程配置

// In your root build.gradle file:
buildscript {
    repositories {
        jcenter()
        mavenCentral() // add repository
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.1'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
    }
}
 
// In your app projects build.gradle file:
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin
 
dependencies {
    implementation 'org.greenrobot:greendao:3.2.2' // add library
}

另外最好在app的build.gradle中加入数据库版本,另外一些参数也可按照自己喜好编辑。

// In the build.gradle file of your app project:
android {
...
}
 
greendao{
    schemaVersion 2 //数据库版本号
   // daoPackage      //生成的DAO,DaoMaster和DaoSession的包名称。默认为源实体的包名称。
    //targetGenDir   //生成DaoMaster,DaoSession,Dao的目录路径。默认为构建目录(build / generated / source / greendao)中生成的源文件夹。
   // generateTests   //设置为true以自动生成单元测试
    //targetGenDirTests  //生成单元测试存储的基本目录。默认为src / androidTest / java。
}

这样子就配置完了GreenDao了。

体验:

新建一个实体类

@Entity
public class User {
    @Id
    private Long id;
 
    private String name;
 
    @Transient
    private int tempUsageCount; // not persisted
 
   // getters and setters for id and user ...
}

关于注解的解释:

Entity注释将Java类标记为greenDAO的可预设实体。即生成数据库中的一个表

Id注释选择long / Long属性作为实体ID。在数据库方面,它是主键。参数autoincrement是一个标志,用于使ID值不断增加(不重用旧值)。 

@Property

设置一个非默认关系映射所对应的列名,默认是使用字段名,例如:@Property(nameInDb = “userName”)

@NotNull

设置数据库表当前列不能为空

@Transient

添加此标记后不会生成数据库表的列

@Unique

表名该属性在数据库中只能有唯一值

@ToMany

定义一对多个实体对象的关系

@ToOne

表示一对一关系

@OrderBy

更加某一字段排序 ,例如:@OrderBy(“date ASC”)

然后make project。默认生成的目录在

生成了DaoMaster,DaoSession,UserDao这三个类。

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

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

DAO:数据访问对象(DAO)持久存在并查询实体。对于每个实体,greenDAO生成DAO。它具有比DaoSession更多的持久性方法


    private DaoMaster master;
    private DaoSession daoSession;
    private SQLiteDatabase db;
    private UserDao userDao;



              
       db = new DaoMaster.DevOpenHelper(MainActivity.this,"test.db",null).getWritableDatabase();
        master = new DaoMaster(db);
        daoSession = master.newSession();
        userDao = daoSession.getUserDao();

//看生成的代码可以发现,DevOpenHelper继承了DatabaseOpenHelper,所以可以使用getWritableDataase

所以应该先通过DaoMaster的DevOpenHelper方法来创建一个数据库,然后再获得一个db,通过新建一个DaoMaster,获得master,再通过master new一个Daosession,接着通过session get到一个可操作数据库的实体类dao。

 

插入数据:

User user = new User();
        user.setName("sss");
        user.setAge(15);
        userDao.insert(user);

查询数据

使用greendao的查询

 List<User> userList = userDao.queryBuilder().list();
        for (User user:userList) {
            Log.d("user","query all "+ user.getName());
        }
  • list() All entities are loaded into memory. The result is typically an ArrayList with no magic involved. Easiest to use.
  • listLazy() Entities are loaded into memory on-demand. Once an element in the list is accessed for the first time, it is loaded and cached for future use. Must be closed.
  • listLazyUncached() A “virtual” list of entities: any access to a list element results in loading its data from the database. Must be closed.
  • listIterator() Let’s you iterate through results by loading the data on-demand (lazily). Data is not cached. Must be closed.

list()将所有实体加载到内存中。结果通常是一个没有魔法的ArrayList。最容易使用。 

   如果是一对一,一对多,多对多的关系,那么该方法会把相对应的表的对象也会加载进内存,不是很好。

    例如一个son表和father表,一个son对应一个father(son中有father的外键),对son使用该方法,会把father也加载金内存。


listLazy()实体按需加载到内存中。首次访问列表中的元素后,将加载并缓存该元素以供将来使用。必须关闭。 

  这个按需是你需要访问哪个数据就会加载哪个数据(延时加载),该方法就避免了list方法的缺点,提高了应用的性能。

 使用该方法必须关闭。

  LazyList<Son> sonList = sonDao.queryBuilder().listLazy();
        for (Son son:sonList) {
            Log.d("son","query all "+ son.toString());
        }
        sonList.close();

  关闭方法的原理我们查看源码可以得知,是使用了游标的关闭。

public void close() {
        cursor.close();
    }


listLazyUncached()实体的“虚拟”列表:对列表元素的任何访问都会导致从数据库加载其数据。必须关闭。 

  
listIterator()让我们通过按需加载数据(懒惰)来迭代结果。数据未缓存。必须关闭。

Iterator sonList = sonDao.queryBuilder().listIterator();
        while (sonList.hasNext()) {
            Son son = (Son) sonList.next();
            Log.d("son","query all "+ son.getName());
        }

有关更过的查询方法和使用可以前往官网看文档。

http://greenrobot.org/greendao/documentation/queries/

 

我们还可以在控制台看进行该查询的时候所对应的SQL语句是怎样。

只需要加入这个就行。



QueryBuilder.LOG_SQL = true;
QueryBuilder.LOG_VALUES = true;

查看控制台:

 

github:https://github.com/callmexiaolu/GreenDaoDemo

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要配置GreenDao,你需要按照以下步骤进行操作: 1. 在module级别的build.gradle文件中,将以下代码添加到文件的顶部: ``` apply plugin: 'org.greenrobot.greendao' ``` 2. 在同一个build.gradle文件中,添加以下配置到android模块下的greendao块中: ``` greendao { schemaVersion 1 // 设置数据库版本号,升级可修改 daoPackage 'com.example.greendaodemo.db' // 设置生成DAODaoMasterDaoSession的包路径,默认与表实体所在的包路径相同 targetGenDir 'src/main/java' // 设置生成的源文件的路径,默认在build目录下的build/generated/source/greendao目录中 } ``` 3. 添加GreenDao的依赖库,将以下代码添加到dependencies块中: ``` implementation 'org.greenrobot:greendao:3.2.2' ``` 这样,你就完成了GreenDao的配置。如果需要生成GreenDao的代码,请确保你还添加了以下依赖库: ``` implementation 'org.greenrobot:greendao-generator:3.2.2' ``` 参考链接:<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [GreenDao的简单配置](https://blog.csdn.net/qq_42061290/article/details/82586342)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [GreenDao配置](https://download.csdn.net/download/a511341250/9593713)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [GreenDao配置文档](https://blog.csdn.net/chentaishan/article/details/105263937)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值