zoukankan      html  css  js  c++  java
  • 043 Android 数据库框架GreenDao使用

     1.GreenDao3介绍

    (1)基本概念

    (2)GreenDao3工作原理

    (3)GreenDao优点

    (4)GreenDao3版本的改进

    2.GreenDao3的相关配置概念介绍

    (1)配置项目(Project)的build.gradle

    (2)配置模组(Module)的build.gradle

    3.GreenDao3配置实战

    (1)打开现有的Android studio工程

    (2)配置项目(Project)的build.gradle

    buildscript{
        //repositories相当于一个存储jar包的仓库
        repositories {
            mavenCentral()  //到网上的Maven仓库的服务器里下载库文件
        }
        //dependencies包含所有真正依赖的库文件
        dependencies{
            //将GreenDao的插件库文件引入项目
            classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'
        }
    }

    (3)配置模组(Module)的build.gradle

    在文件的最后添加

    //应用GreenDao插件
    apply plugin: 'org.greenrobot.greendao'
    greendao{       //设置greendao的相关参数
        schemaVersion 3  //设置数据库版本
        daoPackage 'com.example.lucky.mygreendaotest.gen'  //生成DAO、DAOMaster、DAOSession的包名(这句代码应根据实际project文件位置进行相应修改)
        targetGenDir 'src/main/java' //生成DAOs、DAOMaster、DAOSession的目录
    }
    dependencies{
        implementation fileTree(dir: 'libs', include: ['*.jar']) //用于项目编译的库文件及所在目录
        implementation 'com.android.support:appcompat-v7:28.0.0'
        //导入greendao的相关库文件
        implementation 'org.greenrobot:greendao:3.2.0'
        implementation 'org.greenrobot:greendao-generator:3.2.0'
    
    }

    注意:以上代码中有一处要根据实际情况进行修改

    daoPackage 'com.example.lucky.mygreendaotest.gen'  //生成DAO、DAOMaster、DAOSession的包名(这句代码应根据实际project文件位置进行相应修改)

    其中com.example.lucky.mygreendaotest为工程的包名,可用实际工程的manifest.xml文件的包名(package对应内容)替换

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.administrator.test62360safeguard">

    (4) 进行项目同步

    点击Sync Now 

    可见如下图

    (5)实体类及其注解

    <1>介绍

    <2>实体类注解及其作用

    <3>创建实体类并完成注解

    <4>新建实体类后,通过build--->make project 编译工程,会自动生成代码(实体类BlackListCallEntity中有一部分、还有DaoMaster.java、DaoSession.java、BlackListCallEntityDao.java)

    注意:主键id的数据类型是Long而不是long

    以下是未编译的实体类BlackListCallEntity的代码:

    package com.example.administrator.test62360safeguard.Entity;
    
    import org.greenrobot.greendao.annotation.Entity;
    import org.greenrobot.greendao.annotation.Id;
    import org.greenrobot.greendao.annotation.Generated;
    
    @Entity(
            //设置数据库的表名
            nameInDb ="black_list_call"
    )
    public class BlackListCallEntity {
        @Id(autoincrement = true)
        private Long id;  //注意:id的数据类型是Long而不是long
        private String phoneNumber;
        private String functionType;
    }

    经过编译后的实体类:

    package com.example.administrator.test62360safeguard.Entity;
    
    import org.greenrobot.greendao.annotation.Entity;
    import org.greenrobot.greendao.annotation.Id;
    import org.greenrobot.greendao.annotation.Generated;
    
    @Entity(
            //设置数据库的表名
            nameInDb ="black_list_call"
    )
    public class BlackListCallEntity {
        @Id(autoincrement = true)
        private Long id;    //注意:id的类型是Long而不是long
        private String phoneNumber;
        private String functionType;
    @Generated(hash = 533022796)
    public BlackListCallEntity(Long id, String phoneNumber, String functionType) {
        this.id = id;
        this.phoneNumber = phoneNumber;
        this.functionType = functionType;
    }
    @Generated(hash = 1836403501)
    public BlackListCallEntity() {
    }
    public Long getId() {
        return this.id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public String getPhoneNumber() {
        return this.phoneNumber;
    }
    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }
    public String getFunctionType() {
        return this.functionType;
    }
    public void setFunctionType(String functionType) {
        this.functionType = functionType;
    }
    
    }

    (6)新建2个java类(HMROpenHelper、MyGreenDaoApplication)

    <1>HMROpenHelper类的源码

    package com.example.lucky.mygreendaotest;
    
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    
    import com.example.lucky.mygreendaotest.gen.DaoMaster;
    
    //数据库创建工具类
    public class HMROpenHelper extends DaoMaster.OpenHelper {
        //构造函数,参数2 name为数据库名称
        public HMROpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) {
            super(context, name, factory);
        }
    }

    <2>MyApplication类的源码

    通常我们是不需要指定一个Application的,系统会自动帮我们创建,如果需要创建自己的Application,那也很简单!创建一个类继承Application并在AndroidManifest.xml文件中的application标签中进行注册(只需要给application标签增加name属性,并添加自己的 Application的名字即可)

    当Android程序启动时系统会创建一个Application对象,用来存储系统的一些信息。

    Android系统自动会为每个程序运行时创建一个Application类的对象且只创建一个,所以Application可以说是单例(singleton)模式的一个类。

    package com.example.administrator.test62360safeguard;
    
    import android.app.Application;
    import android.database.sqlite.SQLiteDatabase;
    
    import com.example.administrator.test62360safeguard.GreenDao.DaoMaster;
    import com.example.administrator.test62360safeguard.GreenDao.DaoSession;
    import com.example.administrator.test62360safeguard.GreenDaoUtils.HMROpenHelper;
    
    /**
     * 注意:MyApplication类继承Application,需要在AndroidManifest.xml文件中进行相关设置
     * android:name=".MyApplication"
     * MyApplication类的作用是封装数据库对象
     */
    public class MyApplication extends Application {
        private SQLiteDatabase db;   //SQLiteDatabase数据库对象
        private DaoMaster daoMaster; //daoMaster对象
        private DaoSession daoSession; //daoSession对象
        public  static MyApplication instances; //声明本类的实例对象
    
        @Override
        public void onCreate() {
            super.onCreate();
            instances=this; //给实例对象赋值
            setDatabase();
        }
    
        private void setDatabase() {
            //创建数据库,参数2是所创建的数据库的名称
            HMROpenHelper hmrOpenHelper=new HMROpenHelper(this,"mydb1",null);
            db=hmrOpenHelper.getWritableDatabase(); //获取数据库对象
            daoMaster=new DaoMaster(db);  //获取DaoMaster对象
            daoSession=daoMaster.newSession();
    
        }
    
        //获取instances 对象
        public  static MyApplication getInstances(){
            return instances;
        }
    
        //获取daoSession对象
        public DaoSession getDaoSession(){
            return daoSession;
        }
    
        public SQLiteDatabase getDb(){
            return db;
        }
    }

    (7)编译工程,安装到模拟器后,打开应用时,就会自动创建数据库

    模拟器中app内的数据库文件导出方法:

    6.GreenDao3添加记录(SQLite 增)

    (1)基本原理

    7.GreenDao3删除记录(SQLite 删)

    8.GreenDao3修改记录(SQLite 改)

    参考文献:https://www.jianshu.com/p/793f77feeb89

    https://www.cnblogs.com/tonycheng93/p/6295724.html(推荐)

  • 相关阅读:
    383. Ransom Note
    598. Range Addition II
    453. Minimum Moves to Equal Array Elements
    492. Construct the Rectangle
    171. Excel Sheet Column Number
    697. Degree of an Array
    665. Nondecreasing Array
    视频网站使用H265编码能提高视频清晰度吗?
    现阶段的语音视频通话SDK需要解决哪些问题?
    企业远程高清会议平台视频会议系统在手机端使用的必备要求有哪些?
  • 原文地址:https://www.cnblogs.com/luckyplj/p/10572231.html
Copyright © 2011-2022 走看看