1.引入greenDAO
用过3.0之前的greenDAO的小伙伴们应该都知道在引入greenDAO的时候是非常麻烦,但是在3.0之后这个引入过程简化了很多,参考官网给出的指导,我们来看看如何引入greenDAO:
首先在project的gradle文件中引入greenDAO插件,引入之后如下:
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
classpath 'org.greenrobot:greendao-gradle-plugin:3.1.0'
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.0'
classpath 'org.greenrobot:greendao-gradle-plugin:3.1.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
然后在module的gradle文件中添加greenDAO的插件,并引入相关类库,修改之后如下:
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao'
greendao {
schemaVersion 1
daoPackage 'com.cloudminds.meta.greendao'
targetGenDir 'src/main/java'
}
schemaVersion 1
daoPackage 'com.cloudminds.meta.greendao'
targetGenDir 'src/main/java'
}
dependencies {
compile 'org.greenrobot:greendao:3.1.0'
compile 'org.greenrobot:greendao-generator:3.0.0'
}
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao'
android {
...
...
greendao{
schemaVersion 1
targetGenDir 'src/main/java'
}
}
dependencies {
...
...
compile 'org.greenrobot:greendao:3.1.0'
}
小伙伴们注意首先是引入相关插件,然后在dependencies中引入greenDAO的类库。至于greenDAO中,schemaVersion表示数据库版本号,每次数据库升级的时候我们修改这里的版本号即可(修改这里的版本号,greenDAO会自动修改生成到DAOMaster中的版本号),targetGenDir表示greenDAO生成的DAOMaster和DaoSession的位置。OK,做完这一切我们就已经成功将greenDAO引入到我们的项目中了。
2.数据库初始化
数据库引入成功后,在使用之前,我们还得先来创建一个实体类:
@Entity
public class User {
@Id (autoincrement = true)//自增
private Long id;
@Property(nameInDb = "USERNAME")
private String username;
@Property(nameInDb = "NICKNAME")
private String nickname;
}
@Entity
public class User {
@Id
private Long id;
@Property(nameInDb = "USERNAME")
private String username;
@Property(nameInDb = "NICKNAME")
private String nickname;
}
@Entity表示这个实体类一会会在数据库中生成对应的表,
@Id表示该字段是id,小伙伴们注意该字段的数据类型为包装类型Long,为什么要用包装类型呢?我们一会插入数据的时候再说。
@Property则表示该属性将作为表的一个字段,其中nameInDb看名字就知道这个属性在数据库中对应的数据名称。
@Transient,该注解表示这个属性将不会作为数据表中的一个字段。就是这么简单。另外还有一些比如
@NotNull表示该字段不可以为空,
@Unique表示该字段唯一。这里的注解还是挺多的,小伙伴们有兴趣可以自行研究。
写完这些之后将项目进行编译,编译成功之后系统会帮助我们生成相应的构造方法和get/set方法,并且还会在我们的包下生成DaoMaster和DaoSession。
下面是自己写的一个表操作工具类
public class DBManager {
private String TAG="DBManager";
private final static String dbName = "meta_db";
private static DBManager manager;
private DaoMaster.DevOpenHelper openHelper;
private Context context;
private String TAG="DBManager";
private final static String dbName = "meta_db";
private static DBManager manager;
private DaoMaster.DevOpenHelper openHelper;
private Context context;
private DBManager(Context context) {
this.context = context;
}
public static DBManager getInstance(Context context){
if (manager == null) {
synchronized (DBManager.class) {
if (manager == null) {
manager = new DBManager(context);
}
}
}
return manager;
}
private SQLiteDatabase getReadableDatabase() {
if (openHelper == null) {
openHelper = new DaoMaster.DevOpenHelper(context, dbName, null);
}
SQLiteDatabase db = openHelper.getReadableDatabase();
return db;
}
private SQLiteDatabase getWritableDatabase() {
if (openHelper == null) {
openHelper = new DaoMaster.DevOpenHelper(context, dbName, null);
}
SQLiteDatabase db = openHelper.getWritableDatabase();
return db;
}
this.context = context;
}
public static DBManager getInstance(Context context){
if (manager == null) {
synchronized (DBManager.class) {
if (manager == null) {
manager = new DBManager(context);
}
}
}
return manager;
}
private SQLiteDatabase getReadableDatabase() {
if (openHelper == null) {
openHelper = new DaoMaster.DevOpenHelper(context, dbName, null);
}
SQLiteDatabase db = openHelper.getReadableDatabase();
return db;
}
private SQLiteDatabase getWritableDatabase() {
if (openHelper == null) {
openHelper = new DaoMaster.DevOpenHelper(context, dbName, null);
}
SQLiteDatabase db = openHelper.getWritableDatabase();
return db;
}
public void insertFamilyItemBean(FamilyItemBean familyItemBean) {
DaoMaster daoMaster = new DaoMaster(getWritableDatabase());
DaoSession daoSession = daoMaster.newSession();
FamilyItemBeanDao familyItemBeanDao = daoSession.getFamilyItemBeanDao();
familyItemBeanDao.insertOrReplace(familyItemBean);
}
public void insertFamilyItemBeanList(List<FamilyItemBean> familyItemBeanList) {
if (familyItemBeanList == null || familyItemBeanList.isEmpty()) {
return;
}
DaoMaster daoMaster = new DaoMaster(getWritableDatabase());
DaoSession daoSession = daoMaster.newSession();
FamilyItemBeanDao familyItemBeanDao = daoSession.getFamilyItemBeanDao();
familyItemBeanDao.insertOrReplaceInTx(familyItemBeanList);
}
public void deleteFamilyItemBean(FamilyItemBean familyItemBean) {
DaoMaster daoMaster = new DaoMaster(getWritableDatabase());
DaoSession daoSession = daoMaster.newSession();
FamilyItemBeanDao familyItemBeanDao= daoSession.getFamilyItemBeanDao();
familyItemBeanDao.delete(familyItemBean);
}
public void updateFamilyItemBean(FamilyItemBean familyItemBean) {
DaoMaster daoMaster = new DaoMaster(getWritableDatabase());
DaoSession daoSession = daoMaster.newSession();
FamilyItemBeanDao familyItemBeanDao = daoSession.getFamilyItemBeanDao();
familyItemBeanDao.update(familyItemBean);
}
DaoMaster daoMaster = new DaoMaster(getWritableDatabase());
DaoSession daoSession = daoMaster.newSession();
FamilyItemBeanDao familyItemBeanDao = daoSession.getFamilyItemBeanDao();
familyItemBeanDao.insertOrReplace(familyItemBean);
}
public void insertFamilyItemBeanList(List<FamilyItemBean> familyItemBeanList) {
if (familyItemBeanList == null || familyItemBeanList.isEmpty()) {
return;
}
DaoMaster daoMaster = new DaoMaster(getWritableDatabase());
DaoSession daoSession = daoMaster.newSession();
FamilyItemBeanDao familyItemBeanDao = daoSession.getFamilyItemBeanDao();
familyItemBeanDao.insertOrReplaceInTx(familyItemBeanList);
}
public void deleteFamilyItemBean(FamilyItemBean familyItemBean) {
DaoMaster daoMaster = new DaoMaster(getWritableDatabase());
DaoSession daoSession = daoMaster.newSession();
FamilyItemBeanDao familyItemBeanDao= daoSession.getFamilyItemBeanDao();
familyItemBeanDao.delete(familyItemBean);
}
public void updateFamilyItemBean(FamilyItemBean familyItemBean) {
DaoMaster daoMaster = new DaoMaster(getWritableDatabase());
DaoSession daoSession = daoMaster.newSession();
FamilyItemBeanDao familyItemBeanDao = daoSession.getFamilyItemBeanDao();
familyItemBeanDao.update(familyItemBean);
}
public List<FamilyItemBean> queryFamilyItemBeanList() {
DaoMaster daoMaster = new DaoMaster(getReadableDatabase());
DaoSession daoSession = daoMaster.newSession();
FamilyItemBeanDao familyItemBeanDao = daoSession.getFamilyItemBeanDao();
QueryBuilder<FamilyItemBean> qb = familyItemBeanDao.queryBuilder();
List<FamilyItemBean> list=qb.orderDesc(FamilyItemBeanDao.Properties.Id).list();
return list;
}
}
DaoMaster daoMaster = new DaoMaster(getReadableDatabase());
DaoSession daoSession = daoMaster.newSession();
FamilyItemBeanDao familyItemBeanDao = daoSession.getFamilyItemBeanDao();
QueryBuilder<FamilyItemBean> qb = familyItemBeanDao.queryBuilder();
List<FamilyItemBean> list=qb.orderDesc(FamilyItemBeanDao.Properties.Id).list();
return list;
}
}