使用的GreenDao版本为3.2.2
1.引入GreenDao
// 在根 build.gradle 文件中添加:
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
}
}
// 在app工程 build.gradle 文件中添加:
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin
dependencies {
implementation 'org.greenrobot:greendao:3.2.2' // add library
}
引入成功后会添加两个greendao的aar包
2.最简单的使用
通过第一步其实就可以使用GreenDao了。
第一步:创建一个Bean
创建一个UserInfo类:
import org.greenrobot.greendao.annotation.Entity;
@Entity
public class UserInfo {
public long id;
public String name;
}
注意这里添加了一个@Entity注解,这个注解标明这个类需要和数据库进行映射。
第二步:Make Project
这步是GreenDao最主要的操作,会自动帮我们生成一些用于数据库映射的代码
Make Project 操作完成后,会在build目录下生成如下代码:
同时GreenDao会自动帮我们给bean生成构造函数和get/set等方法。
@Entity
public class UserInfo {
public long id;
public String name;
@Generated(hash = 134938140)
public UserInfo(long id, String name) {
this.id = id;
this.name = name;
}
@Generated(hash = 1279772520)
public UserInfo() {
}
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;
}
}
我们看到GreenDao在默认build->generated->source目录下为我们创建了DaoMaster,DaoSession,UserInfoDao这几个类。
(可选项,不写也能运行GreenDao):添加下面代码来指定GreenDao生成代码的位置,不添加则在上面的默认目录生成代码
greendao {
schemaVersion 1
daoPackage 'com.ping.greendao.gen'
targetGenDir 'src/main/java'
}
第三步:初始化GreemDao
在Application类里面初始化GreenDao,最主要的目的是为了获取一个全局的DaoSession。
public class MyApplication extends Application {
private DaoSession daoSession;
@Override
public void onCreate() {
super.onCreate();
// 通常 SQLite database
DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "notes-db");
Database db = helper.getWritableDb();
// 加密 SQLCipher database
// note: you need to add SQLCipher to your dependencies, check the build.gradle file
// DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "notes-db-encrypted");
// Database db = helper.getEncryptedWritableDb("encryption-key");
daoSession = new DaoMaster(db).newSession();
}
/**
* 提供daoSession给全局使用
* @return
*/
public DaoSession getDaoSession() {
return daoSession;
}
}
这里先解释下上面GreenDao自动生成的DaoMaster类。这个类是用来管理所有的Dao的。通过上面的代码我们获取到了我们最重要的一个类DaoSession,并提供了get方法,以后大部分发数据库操作都要用到它。
运行App到手机上,这时GreenDao会创建一个notes-db的数据库,具体是通过new DaoMaster.DevOpenHelper(this, "notes-db");这行代码创建的。
我是在真机上通过Root Explorer管理器查看的,需要root权限,数据库具体位置为/data/data/应用包名/databases。
简单原理:
到这里GreenDao就为我们创建了数据库并且还创建了数据里面我们指定的UserInfo表。创建数据库是比较好理解的,通过new DaoMaster.DevOpenHelper(this, "notes-db");这行代码创建,那么它是如何创建UserInfo表的?
答:用到了@Entity()和UserInfoDao这两个类。具体步骤MyApplication->创建数据库->识别有@Entity注解的bean->通过xxxDao(这里是UserInfoDao)创建表。
第四步:具体使用
通过@Entity注解可以让GreenDao帮我们创建具体的表,那么剩下的工作就是具体的增删改查了!
如何增删改查?我们需要用到DaoSession。
public class MainActivity extends AppCompatActivity {
DaoSession daoSession;
UserInfoDao userInfoDao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initDB();
}
private void initDB() {
daoSession= ((MyApplication)getApplication()).getDaoSession();
//通过这个具体的dao操作
userInfoDao=daoSession.getUserInfoDao();
UserInfo userInfo=new UserInfo();
userInfo.setName("小明");
userInfoDao.insert(userInfo);
}
}
1.通过MyApplication写的getSession()方法获取DaoSession;
2.通过DaoSession 获取到具体的Dao(这里是UserInfoDao)。
3.通过Dao进行增删改查等具体操作。
3.GreenDao特性
3.1关于id
1.如果需要id为自增长类型,必须设置id的类型包装Long类型,而不是基本数据类型long.
2.当id字段被@ID注解标记时,数据库中的字段名称为_id,如果id没有被@ID注解标记,那么在数据库中的字段名字就是id,不会在前面添加下划线。