GreenDAO是一个开源的Android ORM,是SQLite数据库的开发变得简单,节省了开发时间。GreenDAO通过将Java对象映射到数据库表(称为ORM,”对象/关系映射”),这样我们可以使用简单的面向对象的接口来存储,更新,删除和查询Java对象。
GreenDAO的功能
- 最高性能
- 易于使用的API
- 最小的内存消耗
- 数据库加密
- 较小的文件体积,避免65K方法限制
GreenDAO 3.0与GreenDAO 2.0相比较,GreenDAO3.0采用注解的方式来定义实体类,通过gradle插件生成相应的代码。
一,导入相关的包
compile 'org.greenrobot:greendao:3.0.1'
compile 'org.greenrobot:greendao-generator:3.0.0'
二,在build.gradle中进行配置:
apply plugin: 'org.greenrobot.greendao'
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'org.greenrobot:greendao-gradle-plugin:3.0.0'
}
}
三,在gradle中配置greenDAO的相关属性
greendao {
schemaVersion 1
daoPackage 'com.example.administrator.greendao3demo.gen'
targetGenDir 'src/main/java'
}
- schemaVersion—->指定数据库schema版本号,迁移等操作会用到
- daoPackage——–>通过gradle插件生成的数据库相关文件的包名,默认为你的entity所在的包名
- targetGenDir——–>这就是我们上面说到的自定义生成数据库文件的目录了,可以将生成的文件放到我们的java目录中,而不是build中,这样就不用额外的设置资源目录了
到此我们就完成了GreenDao的基本配置了。
四,编写实体类
@Entity
public class User {
@Id
private Long id;
private String name;
private String age;
private String phone;
@Transient
private int tempUsageCount; // not persisted
}
编写完成之后点击as中Build菜单栏中的Make Project,make完成之后会发现我们的User类中突然多了好多代码,这就是greenDAO自动为你生成的了,代码如下:
@Entity
public class User {
@Id
private Long id;
private String name;
private String age;
private String phone;
@Transient
private int tempUsageCount; // not persisted
public String getPhone() {
return this.phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAge() {
return this.age;
}
public void setAge(String age) {
this.age = age;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
@Generated(hash = 1982716926)
public User(Long id, String name, String age, String phone) {
this.id = id;
this.name = name;
this.age = age;
this.phone = phone;
}
@Generated(hash = 586692638)
public User() {
}
}
Make project之后自动生成了get和set方法,以及在目录文件下生成了三个文件,如图所示:
五,在BaseApplication中进行数据库的初始化操作
public class BaseApplication extends Application {
public DaoSession daoSession;
public SQLiteDatabase basedb;
public DaoMaster.DevOpenHelper helper;
public DaoMaster daoMaster;
@Override
public void onCreate() {
super.onCreate();
setupDatanase();
}
private void setupDatanase() {
helper = new DaoMaster.DevOpenHelper(this,Constants.DB_NAME,null);
basedb = helper.getWritableDatabase();
daoMaster = new DaoMaster(basedb);
daoSession = daoMaster.newSession();
}
public DaoSession getDaoSession() {
return daoSession;
}
public SQLiteDatabase getDb() {
return basedb;
}
}
六,在Activity中进行增删改查的操作
增
String name = etName.getText().toString().trim();
String age = etAge.getText().toString().trim();
String phone = etPhone.getText().toString().trim();
if (TextUtils.isEmpty(name)) {
Toast.makeText(this, "姓名不能为空", Toast.LENGTH_SHORT).show();
return;
}
User user = new User(null, name, age, phone);
getUserDao().insert(user);
cursor.requery();
adapter.notifyDataSetChanged();
删,根据id来进行删除
getUserDao().deleteByKey(tId);
cursor.requery();
adapter.notifyDataSetChanged();
改
String name = etName.getText().toString().trim();
String age = etAge.getText().toString().trim();
String phone = etPhone.getText().toString().trim();
User user = new User(tId, name, age, phone);
getUserDao().update(user);
cursor.requery();
adapter.notifyDataSetChanged();
查,根据姓名来查询结果
String name = etName.getText().toString().trim();
if(TextUtils.isEmpty(name)){
Toast.makeText(this,"名字不能为空",Toast.LENGTH_SHORT).show();
return;
}
Query<User> query=getUserDao().queryBuilder()
.where(UserDao.Properties.Name.eq(name))
.orderAsc(UserDao.Properties.Id)
.build();
List<User> list = query.list();
Toast.makeText(this,list.size()+"",Toast.LENGTH_SHORT).show();
七,最终的效果图