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(推荐)

  • 相关阅读:
    Ubuntu使用命令行打印文件
    Spring ConditionalOnProperty
    Spring EnableWebMvc vs WebMvcConfigurationSupport
    commons-httpclient中的超时设置
    jdb调试命令
    caching redirect views leads to memory leak (Spring 3.1)
    Clojure web初探
    在现有原生开发Android项目中集成hbuilder开发
    MessageBoard
    CSS布局(五) 圣杯布局
  • 原文地址:https://www.cnblogs.com/luckyplj/p/10572231.html
Copyright © 2011-2022 走看看