linwoain的个人blog

知我者谓我心忧,不知我者谓我何求

0%

greenDAO用法

greenDAO 是一个优秀的Android ORM框架。与之前使用xUtils,Afinal等框架不同,不是使用注解Bean的方法。而是通过一个java工程,生成专用的java bean与dao文件。将之加入到所要用到的android工程中。
在AS中,首先创建一个Android Project

新建一个java工程,在AS中并没有直接创建java工程的选项,但是有创建java libray可以使用。创建一个java library的module,module名称任意,这里我用的generator
在app的build.gradle中加入依赖:

1
compile 'de.greenrobot:greendao:2.0.0'//android的工程必须在generator的build.gradle中加入依赖
1
compile 'de.greenrobot:greendao-generator:2.0.0' //生成bean与dao文件所需,生成后可将其删除

在generator任意类里添加java标准main函数,并添加相应代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.linwoain;
import de.greenrobot.daogenerator.DaoGenerator;
import de.greenrobot.daogenerator.Entity;
import de.greenrobot.daogenerator.Schema;
/**
* Created by snow0358530 on 2015/9/12.
*/
public class BeanGenerator {
public static void main(String[] args) throws Exception {
Schema schema = new Schema(1, "com.linwoain.daotest.bean");
Entity person = schema.addEntity("Person");//创建一个Person类
person.addIdProperty().autoincrement();
person.addStringProperty("name").notNull();
person.addBooleanProperty("isMan");
person.addIntProperty("age");
new DaoGenerator().generateAll(schema,"./app/main/src/java");//这里可以指定生成的java所在路径,此路径为android工程下java文件所在路径
}
}

直接在此编辑区运行,可见android工程中增加的代码

方框中内容即为generator生成的文件,generator工程的作用已经完成了。
在Android工程中,使用如下代码添加到数据库:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
       DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "note", null);
SQLiteDatabase db = helper.getWritableDatabase();
DaoMaster master = new DaoMaster(db);
DaoSession session = master.newSession();
PersonDao dao = session.getPersonDao();
Person person=new Person();
person.setName("linwoain");
person.setAge(18);
person.setIsMan(true);
dao.insert(person);
```

可以在数据库看到,已经存在的数据!<br>[](greenDAO用法/wpid-679bb83839132e8c8423f4668f1470f7_7c1aca6c-6417-4896-8839-e25af21cae7a.png)

> 查询数据方法

1. 查询所有:

```java
List<Person> persons = dao.queryBuilder().list();//或
List<Person> bean = dao.loadAll();
  1. 指定Id:
1
Person bean = dao.loadByRowId(1);
  1. 查询所有数量:

    1
    long count = dao.queryBuilder().count();
  2. 查找一条age=18的数据:

1
2
Person bean = dao.queryBuilder().where(PersonDao.Properties.Age.eq(18))
.build().unique();
  1. 查找所有isman=true的数据:

    1
    List<Person> bean = dao.queryBuilder().where(PersonDao.Properties.IsMan.eq(true)).build().list();
  2. 删除所有name=linwoain的数据:

1
2
3
4
5
6
DeleteQuery<Person> query = dao.queryBuilder().where(PersonDao.Properties.Name.eq("linwoain")).buildDelete();
query.executeDeleteWithoutDetachingEntities();dao.delete(person);
dao.deleteByKey((long) 2);
dao.deleteByKeyInTx((long)3,(long)4,(long)6);
dao.deleteInTx(person,person2,person3);
dao.deleteAll();
  1. 修改数据:
1
2
3
person.setAge(20);
dao.update(person);//更新单个
dao.updateInTx(person2, person, person3);//更新多个
  1. 更新列表
    1
    2
    3
    4
    5
    List<Person> list = new ArrayList<>();
    list.add(person);
    list.add(person2);
    list.add(person3);
    dao.updateInTx(list);