GreenDAO的简单使用

项目地址

1.步骤:

1.注意

这个是编译时技术,就是要过程中要记得编译,不然没有出来想要的代码

2.依赖

1.Build.gradle(Project)

全部:

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {

        maven { url 'https://maven.aliyun.com/repository/google' }

        maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }

        maven { url 'https://maven.aliyun.com/repository/public' }

        maven { url 'https://maven.aliyun.com/repository/jcenter' }
        maven { url 'https://dl.bintray.com/umsdk/release' }
        maven { url 'https://jitpack.io' }
        //添加
        mavenCentral() // add repository
    }
    dependencies {
        classpath "com.android.tools.build:gradle:4.0.0"
        //greenDAO数据库
        classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0' // add plugin
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        maven { url 'https://maven.aliyun.com/repository/google' }

        maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }

        maven { url 'https://maven.aliyun.com/repository/public' }

        maven { url 'https://maven.aliyun.com/repository/jcenter' }
        maven { url 'https://dl.bintray.com/umsdk/release' }
        maven { url 'https://jitpack.io' }
        mavenCentral()
    }
}

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

关键:

        //添加
        mavenCentral() // add repository
//greenDAO数据库
        classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0' // add plugin
2.Build.gradle(APP)

全部:

apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao' // apply plugin
android {
    compileSdkVersion 28
    buildToolsVersion "28.0.1"
    compileOptions {
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }
    defaultConfig {
        applicationId "com.kunminx.examplegreendao"
        minSdkVersion 16
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    //数据库
    greendao{
        schemaVersion 1 //数据库版本
        daoPackage 'com.kunminx.examplegreendao.green_dao'
        targetGenDir 'src/main/java'
    }
}
dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
    implementation 'org.greenrobot:greendao:3.3.0' // add library
}

关键:

apply plugin: 'org.greenrobot.greendao' // apply plugin
//数据库
    greendao{
        schemaVersion 1 //数据库版本
        daoPackage 'com.kunminx.examplegreendao.green_dao'//这里是编译时生成类的路径
        targetGenDir 'src/main/java'
    }
implementation 'org.greenrobot:greendao:3.3.0' // add library

3.写bean类,加入注解@Entity,@Id,@Property(@Property可加可不加)编译生成我们想要的代码

在这里插入图片描述

@Entity
public class BeanTouch {
    @Id
    private Long id;
    @Property
    private String name;
    @Property
    private int size;
    @Property
    private String listTouch;

}

编译一下(这是编译时技术,要编译的,不然啥都没有),它帮你生成这一坨:

@Generated(hash = 53676501)
    public BeanTouch(Long id, String name, int size, String listTouch) {
        this.id = id;
        this.name = name;
        this.size = size;
        this.listTouch = listTouch;
    }
    @Generated(hash = 1046643494)
    public BeanTouch() {
    }
    public Long getId() {
        return this.id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getSize() {
        return this.size;
    }
    public void setSize(int size) {
        this.size = size;
    }
    public String getListTouch() {
        return this.listTouch;
    }
    public void setListTouch(String listTouch) {
        this.listTouch = listTouch;
    }

还有这三个:
在这里插入图片描述

序列化一下(可以不用序列化):
在这里插入图片描述
就这样了:

package com.kunminx.examplegreendao;

import android.os.Parcel;
import android.os.Parcelable;

import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.Property;
import org.greenrobot.greendao.annotation.Generated;

/**
 * @ClassName User
 * @Description TODO
 * @Author ${孙伟豪}
 * @Date 2020/12/17 17:49
 * @Version 1.0
 */
@Entity
public class BeanTouch implements Parcelable {
    @Id
    private Long id;
    @Property
    private String name;
    @Property
    private int size;
    @Property
    private String listTouch;
    @Generated(hash = 53676501)
    public BeanTouch(Long id, String name, int size, String listTouch) {
        this.id = id;
        this.name = name;
        this.size = size;
        this.listTouch = listTouch;
    }
    @Generated(hash = 1046643494)
    public BeanTouch() {
    }
    public Long getId() {
        return this.id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getSize() {
        return this.size;
    }
    public void setSize(int size) {
        this.size = size;
    }
    public String getListTouch() {
        return this.listTouch;
    }
    public void setListTouch(String listTouch) {
        this.listTouch = listTouch;
    }

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeValue(this.id);
        dest.writeString(this.name);
        dest.writeInt(this.size);
        dest.writeString(this.listTouch);
    }

    protected BeanTouch(Parcel in) {
        this.id = (Long) in.readValue(Long.class.getClassLoader());
        this.name = in.readString();
        this.size = in.readInt();
        this.listTouch = in.readString();
    }

    public static final Parcelable.Creator<BeanTouch> CREATOR = new Parcelable.Creator<BeanTouch>() {
        @Override
        public BeanTouch createFromParcel(Parcel source) {
            return new BeanTouch(source);
        }

        @Override
        public BeanTouch[] newArray(int size) {
            return new BeanTouch[size];
        }
    };
}

4.封装使用数据库类

生成对应的数据库表的样子:
在这里插入图片描述
我们的目的是获取BeanTouchDao,它里面就有增删改查了
DaoSession(Dao学级)可以获取BeanTouchDao。
那个可以获取DaoSession呢,就是DaoMaster(主)
在这里插入图片描述

DaoMaster构造方法要传入db属性,是可以写啦,还是怎样,这里一般设置可以写(数据库不能写,那要干啥)
这个属性由DaoMaster的DaoMaster.DevOpenHelper提供,里面可以传递上下文,数据库名,还有工厂(这里不用)
在这里插入图片描述
DaoSession的话,用DaoMaster的newSession()来获取(里面都帮你搞好了)
在这里插入图片描述
BeanTouchDao用DaoSession的getBeanTouchDao获取即可:
在这里插入图片描述

package com.example.contentprovider.green_dao;


import android.content.Context;

/**
 * @ClassName DaoTouchManager
 * @Description TODO
 * @Author ${孙伟豪}
 * @Date 2020/12/18 9:51
 * @Version 1.0
 */
public class DaoTouchManager {
    private Context mContext;

    //创建数据库的名字
    private static final String DB_NAME = "jiabing.db";
    //多线程中要被共享的使用volatile关键字修饰 GreenDao管理类
    private volatile static DaoTouchManager mInstance;
    //它里面实际上保存数据库的对象
    private static DaoMaster mDaoMaster;

    //创建数据库的工具
    private static DaoMaster.DevOpenHelper mHelper;

    //管理gen里生成的所有的Dao对象里边带有基本的增删改查的方法
    private static DaoSession mDaoSession;

    private DaoTouchManager() {
    }

    public static DaoTouchManager getInstance() {
        if (mInstance == null) {
            synchronized (DaoTouchManager.class) {
                if (mInstance == null) {
                    mInstance = new DaoTouchManager();
                }
            }
        }
        return mInstance;
    }

    /**
     * 初始化上下文创建数据库的时候使用
     */
    public void init(Context context) {
        this.mContext = context;
    }

    /**
     * 判断是否有存在数据库,如果没有则创建
     *
     * @return
     */
    public DaoMaster getDaoMaster() {
        if (mDaoMaster == null) {
            mHelper = new DaoMaster.DevOpenHelper(mContext, DB_NAME, null);
            mDaoMaster = new DaoMaster(mHelper.getWritableDatabase());
        }
        return mDaoMaster;
    }
    /**
     * 完成对数据库的添加、删除、修改、查询操作,
     *session and Master
     * @return
     */
    public DaoSession getDaoSession() {
        if (mDaoSession == null) {
            if (mDaoMaster == null) {
                mDaoMaster = getDaoMaster();
            }
            mDaoSession = mDaoMaster.newSession();
        }
        return mDaoSession;
    }

    /**
     * 关闭所有的操作,数据库开启后,使用完毕要关闭
     */
    public void closeConnection() {
        closeHelper();
        closeDaoSession();
    }

    private void closeHelper() {
        if (mHelper != null) {
            mHelper.close();
            mHelper = null;
        }
    }

    private void closeDaoSession() {
        if (mDaoSession != null) {
            mDaoSession.clear();
            mDaoSession = null;
        }
    }
}


5.初始化参数:这里用全局变量

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        DaoTouchManager.getInstance().init(this);
//        DaoTouchManager.getInstance().getDaoMaster();
    }
}

6.增删改查:

先获取BeanTouch类:

mBeanTouchDao = DaoTouchManager.getInstance().getDaoSession().getBeanTouchDao();

记得要给读写权限哦,不然你会很开心的
增:

String name="孙伟豪";
            int size=100;
            String listTouch="sdfsdfsdf";
            BeanTouch mBeanTouch=new BeanTouch(null,name,size,listTouch);
            mBeanTouchDao.insert(mBeanTouch);

删除:
根据_id 来删除
在这里插入图片描述

mBeanTouchDao.deleteByKey((long) 3);//根据Long来查询

改:也是根据_id 来改
在这里插入图片描述

BeanTouch beanTouch=new BeanTouch((long) 7,"孙伟豪改",200,"改变成功");
        mBeanTouchDao.update(beanTouch);

查:
这里是根据第几个来查:

BeanTouch beanTouch = mBeanTouchDao.queryBuilder().build().list().get(0);
        Log.d(TAG, "query: beanTouch:"+beanTouch.getName());

7.查看储存的数据

1.下载数据库插件(这个可以不用了,android studio自带了一个,v26可用):

在这里插入图片描述

2.保存db数据库(这个路径要记住,等下要打开它)

在这里插入图片描述

3.添加

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.查看

在这里插入图片描述
在这里插入图片描述

2.总结反思:

1.编译错误

这个编译时在编写完Bean类的时候,编译的。其实很多都是这样的,比如AIDL的使用,它也是写完AIDL类后,编译才生成我们想要操作的类

2.没有混淆错误,加入混淆

### greenDAO 2
-keepclassmembers class * extends de.greenrobot.dao.AbstractDao {
public static java.lang.String TABLENAME;
}
-keep class **$Properties
-keep class com.edu.flzx.green_dao.*{ *; }
-keep class com.edu.flzx.bean.*{ *; }
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要配置GreenDao,你需要按照以下步骤进行操作: 1. 在module级别的build.gradle文件中,将以下代码添加到文件的顶部: ``` apply plugin: 'org.greenrobot.greendao' ``` 2. 在同一个build.gradle文件中,添加以下配置到android模块下的greendao块中: ``` greendao { schemaVersion 1 // 设置数据库版本号,升级时可修改 daoPackage 'com.example.greendaodemo.db' // 设置生成的DAO、DaoMaster和DaoSession的包路径,默认与表实体所在的包路径相同 targetGenDir 'src/main/java' // 设置生成的源文件的路径,默认在build目录下的build/generated/source/greendao目录中 } ``` 3. 添加GreenDao的依赖库,将以下代码添加到dependencies块中: ``` implementation 'org.greenrobot:greendao:3.2.2' ``` 这样,你就完成了GreenDao的配置。如果需要生成GreenDao的代码,请确保你还添加了以下依赖库: ``` implementation 'org.greenrobot:greendao-generator:3.2.2' ``` 参考链接:<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [GreenDao简单配置](https://blog.csdn.net/qq_42061290/article/details/82586342)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [GreenDao配置](https://download.csdn.net/download/a511341250/9593713)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [GreenDao配置文档](https://blog.csdn.net/chentaishan/article/details/105263937)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值