Android GreenDao框架基本使用(ORM数据库)

GreenDao 介绍:
GreenDao是ORM框架(Object Relation Mapping对象关系映射),能够提供一个接口通过操作对象的方式去操作关系型数据库,它能够让你操作数据库时更简单、更方便,表现形式就是通过GreenDao将数据库和Bean对象关联起来
比较主流的几个ORM框架分别是GreenDao,OrmLite,ActiveAndroid,又兴趣可以了解下,因为据我了解GreenDao对数据库操作的速度是最快的,所以其他两个我只是知道,并没有去了解
GreenDao优点:存取速度快.支持数据库加密.轻量级.激活实体.支持缓存.代码自动生成

想看看源码什么的,可以参考:
官网地址:http://greenrobot.org/greendao/
github:https://github.com/greenrobot/greenDAO

GreenDao3.2的配置:
<1>需要在工程根目录的build.gradle中添加依赖

buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.1'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
    }
}

<2>在项目app的build.gradle中添加依赖

apply plugin: 'com.android.application'
//使用greendao
apply plugin: 'org.greenrobot.greendao'

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.project.gubipproject"
        minSdkVersion 22
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    greendao {
        //版本号,升级时可配置
        schemaVersion 1
        //这里可以指定编译成功后(DaoMaster、DaoSession、DAOS类)的文件目录,可以不指定
        //daoPackage '你的包名.你的文件目录'
        //targetGenDir 'src/main/java'
    }

}

dependencies {
    api fileTree(include: ['*.jar'], dir: 'libs')
    testImplementation 'junit:junit:4.12'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
    api 'com.android.support:appcompat-v7:27.1.1'
    api 'com.android.support.constraint:constraint-layout:1.1.0'
    api 'com.android.support:support-v4:27.1.1'ign:27.1.1'
     //greendao依赖
    api 'org.greenrobot:greendao:3.2.2'
}

然后就是GreenDao的使用了:
我感觉比较常用的可能保存历史记录之类的,这里就弄个数据列表吧
<1>创建Bean对象(表名和字段名)
GreenDao需要创建Bean对象之后,该Bean对象就是表名,而它的属性值就是字段名,其实现是通过注释的方式来实现的,下面是购物车的Bean对象(每个Bean对象对应一张表)
这里对Bean对象的注释进行解释
@Entity:告诉GreenDao该对象为实体,只有被@Entity注释的Bean类才能被dao类操作
@Id:对象的Id,使用Long类型作为EntityId,否则会报错。(autoincrement = true)表示主键会自增,如果false就会使用旧值
@Property:可以自定义字段名,注意外键不能使用该属性
@NotNull:属性不能为空
@Transient:使用该注释的属性不会被存入数据库的字段中
@Unique:该属性值必须在数据库中是唯一值
@Generated:编译后自动生成的构造函数、方法等的注释,提示构造函数、方法等不能被修改

@Entity
public class DataList{
    //不能用int(@Id :主键 Long型,可以通过@Id(autoincrement = true)设置自增长)
    @Id(autoincrement = true)
    private Long id;

    @Property
    private String title;               //标题
    private String content;         //内容
    private String image_url;     //缩略图

}

创建完成之后,我们只需要Rebulid Project 来完成我们的代码自动生成,自动生成的代码有:
Bean实体的构造方法和get、set方法
DaoMaster、DaoSession、DAOS类

<2>GreenDao数据库创建以及初始化:

/**
 * 在Application中进行创建和配置
 */
public class BaseApplication extends Application {
    private static DaoSession daoSession;

    @Override
    public void onCreate() {
        super.onCreate();

        //配置数据库
        setupDatabase();
    }

    /**
     * 配置数据库
     */
    private void setupDatabase() {
        //创建数据库 ,"datalist.db"为表名
        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "datalist.db", null);
        //获取可写数据库
        SQLiteDatabase db = helper.getWritableDatabase();
        //获取数据库对象
        DaoMaster daoMaster = new DaoMaster(db);
        //获取Dao对象管理者
        daoSession = daoMaster.newSession();
    }

    public static DaoSession getDaoInstant() {
        return daoSession;
    }

}

记住BaseApplication必须要在清单配置文件中声明哦!

   
        
            
                

                
            
        
    

GreenDao的创建非常的简洁,编译后会自动将Bean对象创建成表,不再需要手写SQL语句,这里的数据库创建只需要在Application中执行一次即可,这里对几个类进行解释:
DevOpenHelper:创建SQLite数据库的SQLiteOpenHelper的具体实现
DaoMaster:GreenDao的顶级对象,作为数据库对象、用于创建表和删除表
DaoSession:管理所有的Dao对象,Dao对象中存在着增删改查等API

我们已经创建好了DaoSession和DataList的Bean对象,编译后会自动生成我们的DataListDao对象,可通过DaoSession获得
DataListDao data = daoSession.getDataListDao();
这里的Dao(Data Access Object)指数据访问接口,即提供了数据库操作一些API接口,可通过dao进行增删改查操作

<3>数据库的增删改查基本操作

public class DataListDao {

    /**
     * 添加数据,如果有重复则覆盖
     * @param datalist
     */
    public static void insertData(DataList datalist) {
        BaseApplication.getDaoInstant().getDataListDao().insertOrReplace(datalist);
    }

    /**
     * 删除数据 根据id删除
     * @param id
     */
    public static void deleteData(long id) {
        BaseApplication.getDaoInstant().getDataListDao().deleteByKey(id);
    }

/**
     * 删除所有数据
     * @param id
     */
    public static void deleteTokenAll() {
        MyAppliaction.getDaoInstant().getDataListDao().deleteAll();
    }

    /**
     * 更新数据
     * @param datalist
     */
    public static void updateData(DataList datalist) {
        BaseApplication.getDaoInstant().getDataListDao().update(datalist);
    }

    /**
     * 查询全部数据
     */
    public static List queryAll() {
        return BaseApplication.getDaoInstant().getDataListDao().loadAll();
    }

 /**
     * 查询表中是否含某条数据(比如我们现在要看看有没存在一个条件为title的数据)
     */
    public static boolean queryTokenid(String title) {
        List list =BaseApplication.getDaoInstant().getDataListDao().queryBuilder()
                        .where(DataListDao.Properties.Title.eq(title)).list();
        if (list != null && list.size() != 0) {
            return true;
        }
        return false;
    }

}

这里先做个记录,有空补上demo,见谅

你可能感兴趣的:(Android GreenDao框架基本使用(ORM数据库))