《greenDao快速使用1——接入》

一、环境

Android中提供了一个占用内存极小的关系型数据库SQLite,常规的编写SQL语句,特别的麻烦,并且容易出错。所以现在出现了许多ORM(对象关系映射)框架。其中比较著名的有Greendao、OrmLite、Litepal等。

GreenDao简介:

《greenDao快速使用1——接入》

greendao是一个将对象映射到SQLite数据库中的轻量且快速的ORM解决方案。GreenDao是使用ORM对象关系映射,就是通过GreenDao将数据库和bean关联起来有以下优点:

1.存取速度快;

2.支持数据库加密;

3.轻量级;

4.**实体;

5.支持缓存;

6.代码自动生成;

二、源码地址:

https://github.com/greenrobot/greendao

三、接入配置

1.在project中的build中添加如下代码

buildscript {
    repositories {
        jcenter()
        mavenCentral()
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.1.0' //greendao
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
再在Module中的build添加引用
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' //此处需要添加
android {
    compileSdkVersion 25
    buildToolsVersion "27.0.1"

    defaultConfig {
        applicationId "com.xs.laizhen.visit"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        flavorDimensions "versionCode"
        multiDexEnabled true
        //android studio3.0  butterknife:5.1.1报错问题。
        javaCompileOptions {
            annotationProcessorOptions {
                includeCompileClasspath = true
            }
        }
        //bugly调试时需要注释掉
        ndk {
            abiFilters 'armeabi', 'armeabi-v7a', 'x86'
        }
    }

    //greendao配置
    greendao {
        schemaVersion 1 //版本
        daoPackage 'com.xs.laizhen.visit.greendao' //指定路径
        targetGenDir 'src/main/java' //目标目录
    }
}


repositories {
    flatDir {
        dirs 'libs'
    }
    google()
}


dependencies {
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.jakewharton:butterknife:5.1.1'

    //greendao数据库
    compile 'org.greenrobot:greendao:3.1.0'
    compile 'org.greenrobot:greendao-generator:3.1.0'
}
四、代码
(一)实体类
import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.Generated;

/**
 * Created by Laizhen on 2018/2/1.
 */
@Entity
public class User {
    @Id
    private String userId; //唯一id号
    private String name; //姓名
    private String gender; //性别
    private String ethnic; //民族
    private String birthday; //生日
    private String idCard; //身份证号码
    private String organ; //签发机关
    private String term; //有效期限
    private String address; //家庭住址
    private String phone; //手机号码
    private String visitingTime; //来访时间
    private String idCardPhoto; //身份证头像
    private String facePhoto; //人脸照片
    private String originalPhoto; //原图照片
    private String flag; //记录上否上传 0未上传;1已上传
    public String getFlag() {
        return this.flag;
    }
    public void setFlag(String flag) {
        this.flag = flag;
    }
    public String getOriginalPhoto() {
        return this.originalPhoto;
    }
    public void setOriginalPhoto(String originalPhoto) {
        this.originalPhoto = originalPhoto;
    }
    public String getFacePhoto() {
        return this.facePhoto;
    }
    public void setFacePhoto(String facePhoto) {
        this.facePhoto = facePhoto;
    }
    public String getIdCardPhoto() {
        return this.idCardPhoto;
    }
    public void setIdCardPhoto(String idCardPhoto) {
        this.idCardPhoto = idCardPhoto;
    }
    public String getVisitingTime() {
        return this.visitingTime;
    }
    public void setVisitingTime(String visitingTime) {
        this.visitingTime = visitingTime;
    }
    public String getPhone() {
        return this.phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getAddress() {
        return this.address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    public String getTerm() {
        return this.term;
    }
    public void setTerm(String term) {
        this.term = term;
    }
    public String getOrgan() {
        return this.organ;
    }
    public void setOrgan(String organ) {
        this.organ = organ;
    }
    public String getIdCard() {
        return this.idCard;
    }
    public void setIdCard(String idCard) {
        this.idCard = idCard;
    }
    public String getBirthday() {
        return this.birthday;
    }
    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }
    public String getEthnic() {
        return this.ethnic;
    }
    public void setEthnic(String ethnic) {
        this.ethnic = ethnic;
    }
    public String getGender() {
        return this.gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getUserId() {
        return this.userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
    @Generated(hash = 593467924)
    public User(String userId, String name, String gender, String ethnic,
            String birthday, String idCard, String organ, String term,
            String address, String phone, String visitingTime, String idCardPhoto,
            String facePhoto, String originalPhoto, String flag) {
        this.userId = userId;
        this.name = name;
        this.gender = gender;
        this.ethnic = ethnic;
        this.birthday = birthday;
        this.idCard = idCard;
        this.organ = organ;
        this.term = term;
        this.address = address;
        this.phone = phone;
        this.visitingTime = visitingTime;
        this.idCardPhoto = idCardPhoto;
        this.facePhoto = facePhoto;
        this.originalPhoto = originalPhoto;
        this.flag = flag;
    }
    @Generated(hash = 586692638)
    public User() {
    }
    

}
对Bean中的对象进行解释
[email protected]:告诉GreenDao该对象为实体,只有被@Entity注释的bean类才能被dao类操作;

[email protected]:对象的Id,使用Long类型作为EntityId,否则会报错。(autoincrement = true)表示主键会自增,如果false就会使用旧值;

[email protected] 可以自定义字段名,注意外键不能使用该属性;

[email protected]:属性不能为空;

[email protected]:使用该注释的属性不会被存入数据库的字段中;

[email protected]:该属性值必须在数据库中是唯一值;

[email protected]:编译后自动生成的构造函数、方法等的注解,提示构造函数,方法等不能被修改。

(二)创建数据库名称

public static DaoMaster.DevOpenHelper mHelper;
private SQLiteDatabase db;
public static DaoMaster mDaoMaster;
private static DaoSession mDaoSession;
/** * 设置greenDao */private void setDatabase() { // 通过 DaoMaster 的内部类 DevOpenHelper,你可以得到一个便利的 SQLiteOpenHelper 对象。 // 可能你已经注意到了,你并不需要去编写「CREATE TABLE」这样的 SQL 语句,因为 greenDAO 已经帮你做了。 // 注意:默认的 DaoMaster.DevOpenHelper 会在数据库升级时,删除所有的表,意味着这将导致数据的丢失。 // 所以,在正式的项目中,你还应该做一层封装,来实现数据库的安全升级。
  mHelper = new DaoMaster.DevOpenHelper(this, "Attendance-db", null);
  db = mHelper.getWritableDatabase();
// 注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。 mDaoMaster = new DaoMaster(db); mDaoSession = mDaoMaster.newSession();}public DaoSession getDaoSession() { return mDaoSession;}

上述配置完成后,Build-->Make Project 就会自动生成UserDao、DaoSession、DaoMaster文件。

《greenDao快速使用1——接入》

到这就创建数据库完毕。