greenDao 3.0基本使用

一、greenDao概念

greenDao是一种实现ORM( Object Relation Mapping 即 对象关系映射)多的技术。greenDao支持android原生的数据库SQLite,且代码库仅仅100k大小。greenDao 会根据modle类自动生成实体类(entities)和Dao对象,并且Dao对象是根据entities类量身定做的并且一 一对应。

二、集成greenDao

AndroidStudio集成greenDao,在gradle中做如下配置:

引入依赖库:

dependencies {
    compile 'org.greenrobot:greendao:3.0.1'
    compile 'org.greenrobot:greendao-generator:3.0.0'
}

配置引入greenDao插件:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'org.greenrobot:greendao-gradle-plugin:3.0.0'
    }
}

greenDao数据库的配置:

android {
        ......
        greendao{
            schemaVersion 1
            targetGenDir 'src/main/java'
            daoPackage 'com.example.xiangyong.greendaodemo.greendao.gen'
        }
        ......
    }
schemaVersion:数据库schema版本,也可以理解为数据库版本号,如果数据库需要迁移更新修改这个版本号即可,如增加、删除、修改字段等。
targetGenDir :设置自动生成的DaoMaster 、DaoSession、Dao目录。
daoPackage:设置自动生成的DaoMaster 、DaoSession、Dao的包名。

至此greenDao已经集成到AndroidStudio中了。接下来就是写实体类,
通过注释来定义表单与实体,例:

@Entity
public class Patient {
    @Id(autoincrement = true)
    private Long id;
    @NotNull
    private String patientName;
    @Transient
    private String patientPid;
    ......
}

@Entity:用于标记该实体类,只有使用 @Entity 注释的Bean类才能被dao类操作,目的就是告诉greenDao该类需要持久化。
@Id@Id一般会选择long/Long属性作为Entity ID(即数据库中的主键)autoincrement=true表示主键会自增如果false就会使用旧值。
@NotNull:确保属性值不会为null值。
@Transient:使用该注释的属性不会被存入数据库中。

接下来让我们点击AndroidStudio中Build菜单栏中的Make Project(或者直接sync),make完成之后会发现我们的greenDao以为我们生成了如下的类:
DaoMaster、DaoSession和我们自己的Dao。

DaoMaster:是GreenDao的入口也是greenDao顶级对象,对于一个指定的表单持有数据库对象(SQLite数据库)并且能够管理DAO类- 能够创建表和删除表;其内部类OpenHelper 与DevOpenHelper是创建SQlite数据库的SQLiteOpenHelper的具体实现。
DaoSession:对于一个指定的表单可以管理所有的Dao 对象,也能够对实体类执行 insert ,loadupdate,refresh.delete操作。

三、greenDao操作增删改查

初始化:

//初始化代码只需执行一次,故可放在application里面
DaoMaster.DevOpenHelper openHelper =new DaoMaster.DevOpenHelper(MainActivity.this,"patient.db",null);
DaoMaster daoMaster = new DaoMaster(openHelper.getWritableDb());            DaoSession daoSession = daoMaster.newSession();

//下面这个获取具体的dao的代码在需要用到的地方调用即可
PatientDao patientDao = daoSession.getPatientDao();

注:

增:

Patient patient = new Patient(null,"张三");
patientDao.insert(patient);

删:删除数据跟修改数据一样,需要先查出来

List<Patient> list = patientDao.queryBuilder().where(PatientDao.Properties.PatientName.eq("张三")).build().list();
for (Patient patient: list ) {  
            userDao.delete(user);  
        }

如果想删除所有数据:
userDao.deleteAll(); 

改:

Patient Patient = patientDao.queryBuilder().where(PatientDao.Properties.PatientName.eq("张三")).build().unique();
 patient.setPatientName("王五");

查:

//只查询一条数据
Patient Patient = patientDao.queryBuilder().where(PatientDao.Properties.PatientName.eq("张三")).build().unique();
//查询多条
List<Patient> list = patientDao.queryBuilder().where(PatientDao.Properties.PatientName.eq("张三")).build().list();

greenDao的增删改查还支持sql语句如:

String sql ="insert into patient values (null,'111')";
GreenDaoManager.getInstance().getSession().getDatabase().execSQL(sql);
发布了29 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/sushineboy/article/details/73225106