GreenDao的基本使用

GreenDAO 是一款开源的面向 Android 的轻便、快捷的 ORM 框架,将 Java 对象映射到 SQLite 数据库中,我们操作数据库的时候,不在需要编写复杂的 SQL语句, 在性能方面,GreenDAO 针对 Android 进行了高度优化, 最小的内存开销 、依赖体积小 同时还是支持数据库加密。关于GreenDao的基本的介绍,很多的博客都有写,我这里就不做过多的讲解了。这里简要的介绍一下他的基本的用法,喜欢的朋友可以看看。

1.设置仓库与插件---首先在(Project:build.gradle)添加,红色的文字的部分

buildscript {
    
    repositories {
        google()
        jcenter()
        mavenCentral() // 添加这个仓库
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // 添加插件路径

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

2.配置依赖 ( Module:app build.gradle )---同理添加,红色的文字的部分

apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // 添加插件的调用
android {
    compileSdkVersion 26
    defaultConfig {
        applicationId "com.example.administrator.mygreendao"
        minSdkVersion 15
        targetSdkVersion 26
        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                   //数据库版本号
        targetGenDir "src/main/java"     //生成代码的根路径
        daoPackage "com.example.administrator.mygreendao.db"          //在根路径下生成类的包名
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation 'org.greenrobot:greendao:3.2.2' // 添加库的依赖

3, 我们写一个简单的实体类(User),测试一下

@Entitypublic class User {

@Id

private long id;

private String name;

private int age;

//此处省略了getter,setter 方法

}

4.点击小锤子的图标编译一下

这个时候可以看到左边和我们的代码区域都出现了变化


6.初始化 GreenDao ( 通常初始化代码写在我们的 Application 类中)

package com.example.administrator.mygreendao;

import android.app.Application;
import android.database.sqlite.SQLiteDatabase;

import com.example.administrator.mygreendao.db.DaoMaster;
import com.example.administrator.mygreendao.db.DaoSession;

/**
 * Created by Administrator on 2018/5/22.
 * 初始化GreenDao
 */

public class MyApp extends Application {
    private DaoSession daoSession;

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

    /**
     * 初始化 GreenDao
     */

    private void initGreenDao() {
        //创建数据库
        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "test.db");//表名
        SQLiteDatabase db = helper.getWritableDatabase();
        DaoMaster daoMaster = new DaoMaster(db);
        daoSession = daoMaster.newSession();
    }

    /**
     * 获取DaoSession
     */
    public DaoSession getDaoSession() {
        return daoSession;
    }
}

7.使用

package com.example.administrator.mygreendao;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

import com.example.administrator.mygreendao.db.DaoSession;
import com.example.administrator.mygreendao.db.UserDao;

import org.greenrobot.greendao.query.QueryBuilder;

import java.util.List;

/**
 * GreenDao的基本用法实践
 */
public class MainActivity extends AppCompatActivity {

    private UserDao userDao;
    private User user;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
        initDate();
        initChaRu();
        deleted();
        update();
        query();
        query2();
        query3();
        query4();
    }

    //查询年龄大于10的用户
    private List<User> query4() {
        QueryBuilder<User> builder = userDao.queryBuilder();
        return builder.where(UserDao.Properties.Age.gt(10)).build().list();
    }

    //根据id查询
    private User query2() {
        return userDao.loadByRowId(1);
    }

    private List<User> query3() {
        return userDao.queryRaw("where AGE>?", "10");//查询年龄大于10的用户
    }

    //查询所有记录
    private List<User> query() {
        return userDao.loadAll();
    }

    //更新记录
    private void update() {
        userDao.update(user);
    }


    //获取UserDao
    private void init() {

        MyApp myApp = (MyApp) getApplication();
        DaoSession daoSession = myApp.getDaoSession();
        userDao = daoSession.getUserDao();
    }

    //增加
    private void initDate() {
        user = new User();
        user.setId(1);
        user.setName("小明");
        user.setAge(16);
        userDao.insert(user);
    }


    //插入和替换
    private void initChaRu() {
        userDao.insertOrReplace(user);
    }

    //删除记录
    private void deleted() {
        userDao.delete(user);
    }


}

好啦这样就基本完成啦

六、注解详解

@Entity

表明这个实体类会在数据库中生成一个与之相对应的表

@Id

对应数据表中的 Id 字段

@Index

使用@Index作为一个属性来创建一个索引,默认是使用字段名

@Property

设置一个非默认关系映射所对应的列名,默认是使用字段名,例如:@Property(nameInDb = “userName”)

@NotNull

设置数据库表当前列不能为空

@Transient

添加此标记后不会生成数据库表的列

@Unique

表名该属性在数据库中只能有唯一值

@ToOne

表示一对一关系

关于更加详细的博客可以

参考SpeedyStone博客

地址:https://blog.csdn.net/speedystone/article/details/72769793

猜你喜欢

转载自blog.csdn.net/qq_16479139/article/details/80412611