greenDAO 3.0简明教程
配置环境
在项目gradle中:
-
一:配置仓库
repositories { jcenter() mavenCentral() // 添加mavenCentral仓库 }
-
二:配置依赖
dependencies { classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1' // 添加greendao依赖 }
在模块gradle中配置
-
一:配置首行:
apply plugin: 'org.greenrobot.greendao'
-
二:配置依赖:
dependencies { compile 'org.greenrobot:greendao:3.2.0' <-- add library }
make project一下
对象介绍
DaoMatser
- 原文:
The entry point for using greenDAO. DaoMaster holds the database object (SQLiteDatabase) and manages DAO classes (not objects) for a specific schema. It has static methods to create the tables or drop them. Its inner classes OpenHelper and DevOpenHelper are SQLiteOpenHelper implementations that create the schema in the SQLite database.
- 大意:
用greenDAO的时候这个实体是重点。使用这个类可以用一个具体的模式持有和管理一个DAO类(而不是对象)。它有一个静态的方法可以用来创建表和删除它们。它是
OpenHelper
和DevOpenHelper
的内部类,同时也是SQLiteOpenHelper
的实现类,可以用来在SQLite数据库中创建一个模式
DaoSession
- 原文:
Manages all available DAO objects for a specific schema, which you can acquire using one of the getter methods. DaoSession provides also some generic persistence methods like insert, load, update, refresh and delete for entities. Lastly, a DaoSession objects also keeps track of an identity scope. For more details, have a look at the session documentation.
- 大意:
用你获得的任一getter类型的方法可以用一个具体的模式进行管理所有可用的DAO对象。DAOSession也为实体类提供一些通常持续性的方法例如
insert
,load
,update
,refresh
和delete
。最后,一个DaoSession对象也可以对一个实体作用域范围进行持续追踪。关于具体的细节,可以查看会话文档。
前期准备
-
编写实体类,在数据库中代表列的各个属性值:
@Entity // 表明这是一个实体类 public class User { @Id // id序号,用来唯一标示 private Long id; @NotNull // 字段属性 private String name; private int age; }
-
完成之后,需要执行
Build
->Make Project
,会自动生成相应的方法。@Entity public class User { @Id private long id; @NotNull private String name; private int age; @Generated(hash = 1198735498) public User(long id, @NotNull String name, int age) { this.id = id; this.name = name; this.age = age; } @Generated(hash = 586692638) public User() { } public long getId() { return this.id; } public void setId(long id) { this.id = id; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public int getAge() { return this.age; } public void setAge(int age) { this.age = age; } }
- 其中
@Generated
部分是自动生成的。
- 其中
-
下面代码只需执行一次,建议在你的
Application
类中执行。helper = new DaoMaster.DevOpenHelper(this, "user.db", null); // 数据库名称,不带后缀也行 db = helper.getWritableDatabase(); daoMaster = new DaoMaster(db); daoSession = daoMaster.newSession(); // 本类中提供一个静态方法获取daoSession对象
-
在需要操作数据库的类中执行如下代码:
mUserDao = MyApplication.getDaoSession().getUserDao();
实践操作
-
插入数据
User user = new User(); user.setId(2); user.setAge(24); user.setName("张三"); mUserDao.insert(user);
-
删除数据
-
根据id进行删除,参数类型为
long
类型:mUserDao.deleteByKey(Long.valueOf(1));
-
删除所有数据:
mUserDao.deleteAll();
-
-
修改数据
-
使用查询到的唯一数据,通过实体类的set方法进行修改,然后更新即可。
mUserDao.update(user);
-
-
查询数据
-
查询唯一数据(当数据结果不等于1时会报错):
User unique = mUserDao.queryBuilder().where(UserDao.Properties.Age.eq(24)).unique();
-
查询结果集:
List<User> list = mUserDao.queryBuilder().where(UserDao.Properties.Name.eq("haha")).list();
-
高级用法
- 未完待续。。。