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'
|
1
| compile 'de.greenrobot:greendao-generator:2.0.0'
|
在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;
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.addIdProperty().autoincrement(); person.addStringProperty("name").notNull(); person.addBooleanProperty("isMan"); person.addIntProperty("age"); new DaoGenerator().generateAll(schema,"./app/main/src/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();
|
- 指定Id:
1
| Person bean = dao.loadByRowId(1);
|
查询所有数量:
1
| long count = dao.queryBuilder().count();
|
查找一条age=18的数据:
1 2
| Person bean = dao.queryBuilder().where(PersonDao.Properties.Age.eq(18)) .build().unique();
|
查找所有isman=true的数据:
1
| List<Person> bean = dao.queryBuilder().where(PersonDao.Properties.IsMan.eq(true)).build().list();
|
删除所有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 2 3
| person.setAge(20); dao.update(person); dao.updateInTx(person2, person, person3);
|
- 更新列表
1 2 3 4 5
| List<Person> list = new ArrayList<>(); list.add(person); list.add(person2); list.add(person3); dao.updateInTx(list);
|