zoukankan      html  css  js  c++  java
  • Android数据库GreenDao的使用总结

    一、GreenDao的介绍

    GreenDAO是一个开源的Android ORM(“对象/关系映射”),通过ORM(称为“对象/关系映射”),节省了我们在数据库开发过程的时间!

    通过GreenDao,我们可以更快速的操作数据库,我们可以使用简单的面相对象的API来存储,更新,删除和查询Java对象。

    GreenDao的优缺点?

    1.  高性能

    2. 易于使用的强大API,涵盖关系和连接

    3. 最小的内存消耗

    4. 库大小(<100KB)以保持较低的构建时间并避免65k方法限制

    5. 数据库加密:greenDAO支持SQLCipher,以确保用户的数据安全;

    GreenDao的核心类

    GreenDao的核心类有三个:分别是DaoMaster, DaoSession, XXXDao,这三个类都会自动创建,无需自己编写创建!

    • DaoMaster::DaoMaster保存数据库对象并管理特定模式的DAO类。它有静态方法来创建表或删除它们。它的内部类OpenHelper和DevOpenHelper是SQLiteOpenHelper实现,它们在SQLite数据库中创建模式。
    • DaoSession:管理特定模式的所有可用DAO对象,您可以使用其中一个getter方法获取该对象。DaoSession还提供了一些通用的持久性方法,如实体的插入,加载,更新,刷新和删除。
    • XXXDao:数据访问对象(DAO)持久存在并查询实体。对于每个实体,greenDAO生成DAO。它具有比DaoSession更多的持久性方法。
    • Entities :可持久化对象。通常, 实体对象代表一个数据库行使用标准 Java 属性(如一个POJO 或 JavaBean )。

    二、GreenDao使用方法

    1. 导入Gradle插件和Dao代码生成

    要在Android项目中使用GreenDao,您需要添加GreenDao Gradle插件并添加GreenDao库:

    a). 导入插件

    // 在 Project的build.gradle 文件中添加:
    buildscript {
        repositories {
            jcenter()
            mavenCentral() // add repository
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:3.1.2'
            classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
        }
    }

    b). 配置相关依赖

    // 在 Moudle:app的  build.gradle 文件中添加:
    apply plugin: 'com.android.application'
    apply plugin: 'org.greenrobot.greendao' // apply plugin
     
    dependencies {
        implementation 'org.greenrobot:greendao:3.2.2' // add library
    }

    c). 配置数据库相关信息

    greendao {
        schemaVersion 1 //数据库版本号
        daoPackage 'com.renhui.testapp.functions.database.greenDao.db'
    // 设置DaoMaster、DaoSession、Dao 包名
        targetGenDir 'src.main.java'//设置DaoMaster、DaoSession、Dao目录,请注意,这里路径用.不要用/
        generateTests false //设置为true以自动生成单元测试。
        targetGenDirTests 'src/main/java' //应存储生成的单元测试的基本目录。默认为 src / androidTest / java。
    }

    配置完成,在Android Studio中使用Build> Make Project,重写build项目,GreenDao集成完成!

    2. 创建存储对象实体类

    使用GreenDao存储数据只需要在存储数据类前面声明@Entity注解就让GreenDao为其生成必要的代码:

    @Entity
    public class Student {
        @Id(autoincrement = true)
        Long id;
        @Unique
        int studentNo;//学号
        int age; //年龄
        String telPhone;//手机号
        String sex; //性别
        String name;//姓名
        String address;//家庭住址
        String schoolName;//学校名字
        String grade;//几年级
        ……getter and setter and constructor method……
        }

    3. GreenDao初始化

    我们可以在Application中维持一个全局的会话。我们在Applicaiton进行数据库的初始化操作:=

      /**
         * 初始化GreenDao,直接在Application中进行初始化操作
         */
        private void initGreenDao() {
            DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "aserbao.db");
            SQLiteDatabase db = helper.getWritableDatabase();
            DaoMaster daoMaster = new DaoMaster(db);
            daoSession = daoMaster.newSession();
        }
        
        private DaoSession daoSession;
        public DaoSession getDaoSession() {
            return daoSession;
        }

    初始化完成之后重新rebuild一下项目会发现在设置的targetGenDir的目录生成三个类文件,这个是GreenDao自动生成的!说明数据库已经连接好了,咱们接下来只需要进行数据库的增删改查操作就行了。

    4. 使用GreenDao实现增删改查

    1. 增

    insert() 插入数据

    @Override
    public void insertData(Thing s) {
        DaoSession daoSession = ((AserbaoApplication) getApplication()).getDaoSession();
        for (int i = 0; i < 1000; i++) {
            Student student = new Student();
            student.setStudentNo(i);
            int age = mRandom.nextInt(10) + 10;
            student.setAge(age);
            student.setTelPhone(RandomValue.getTel());
            String chineseName = RandomValue.getChineseName();
            student.setName(chineseName);
            if (i % 2 == 0) {
                student.setSex("男");
            } else {
                student.setSex("女");
            }
            student.setAddress(RandomValue.getRoad());
            student.setGrade(String.valueOf(age % 10) + "年纪");
            student.setSchoolName(RandomValue.getSchoolName());
            daoSession.insert(student);
        }
    } 

    insertOrReplace()数据存在则替换,数据不存在则插入

    @Override
    public void insertData(Thing s) {
        DaoSession daoSession = ((AserbaoApplication) getApplication()).getDaoSession();
        for (int i = 0; i < 1000; i++) {
            Student student = new Student();
            student.setStudentNo(i);
            int age = mRandom.nextInt(10) + 10;
            student.setAge(age);
            student.setTelPhone(RandomValue.getTel());
            String chineseName = RandomValue.getChineseName();
            student.setName(chineseName);
            if (i % 2 == 0) {
                student.setSex("男");
            } else {
                student.setSex("女");
            }
            student.setAddress(RandomValue.getRoad());
            student.setGrade(String.valueOf(age % 10) + "年纪");
            student.setSchoolName(RandomValue.getSchoolName());
            daoSession.insertOrReplace(student);//插入或替换
        }
    } 

    2. 删

    删除有两种方式:delete()和deleteAll();分别表示删除单个和删除所有。

     @Override
     public void deleteData(Student s) {
         DaoSession daoSession = ((AserbaoApplication) getApplication()).getDaoSession();
         daoSession.delete(s);
     }
    
     @Override
     public void deleteAll() {
         DaoSession daoSession = ((AserbaoApplication) getApplication()).getDaoSession();
         daoSession.deleteAll(Student.class);
     }

    3. 改

    通过update来进行修改:

    @Override
    public void updataData(Student s) {
        DaoSession daoSession = ((AserbaoApplication) getApplication()).getDaoSession();
        daoSession.update(s);
    }

    4. 查

    查询的方法有:

    • loadAll():查询所有数据。
    • queryRaw():根据条件查询。
    • queryBuilder() : 方便查询的创建,后面详细讲解。
    public List queryAll() {
        List<Student> students = daoSession.loadAll(Student.class);
        return students;
    }
    
    @Override
    public void queryData(String s) {
        List<Student> students = daoSession.queryRaw(Student.class, " where id = ?", s);
        mDataBaseAdapter.addNewStudentData(students);
    }

    参考资料:https://www.jianshu.com/p/53083f782ea2


  • 相关阅读:
    第6章 LVM详解
    第5章 Linux上管理文件系统
    第4章 ext文件系统机制原理剖析
    第3章 Linux上文件的权限管理
    第2章 系统用户/组管理(2) su和sudo
    第2章 细说Linux系统用户/组管理(1)
    cpio用法详细说明
    Linux find运行机制详解
    第1章 Linux文件类基础命令
    PXE+kickstart无人值守安装CentOS 6
  • 原文地址:https://www.cnblogs.com/renhui/p/11370600.html
Copyright © 2011-2022 走看看