zoukankan      html  css  js  c++  java
  • ORM框架--GreenDao 3.0基本使用指南

    0. ORM框架--GreenDao 3.0基本使用指南

    1. Gradle 的配置

    这里可以参照官方的文档进行最新的配置(本示例的版本等你看到可能就不是最新的了),但是值得注意的一点是,GreenDao 3.0与之前的变化比较大,所以用法也区别比较大,建议在搜索时加上版本号3.0进行更精细的搜索

    在项目(非Module)的build.gradle 文件中:

    buildscript {
        repositories {
            jcenter()
            mavenCentral() // 添加仓库地址
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:2.3.1'
            classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // 添加greendao插件
        }
    }
    

    在Module级别的 build.gradle 文件中:

    apply plugin: 'com.android.application'
    apply plugin: 'org.greenrobot.greendao' // 添加插件
     
    dependencies {
        compile 'org.greenrobot:greendao:3.2.2' // 添加库
    }
    

    参照官方Github连接: https://github.com/greenrobot/greenDAO 更改为最新配置(示例为3.2.2

    2. 配置数据库信息

    android {
        ....
        greendao {
            schemaVersion 1
            daoPackage 'com.yourpackagename.greendao.gen'
            targetGenDir 'src/main/java'
            //targetGenDirTest:设置生成单元测试目录
            //generateTests:设置自动生成单元测试用例
        }
        ...
    }
    

    daoPackage 'com.yourpackagename.greendao.gen'
    指定greendao自动生成文件的存放路径,我个人喜欢起名为greendao.gen
    greendao 表示使用的是greendao这个第三方库
    gen 表示自动生成,不要手动更改
    前面加上自己的包名,这个实际就是一个路径。怎么放按你的习惯和团队规范。

    3. 编写实体bean

    配置完上面的信息后,点击Sync Now同步一下工程,然后进行实体的编写,这个过程长短依托网络等因素。
    注意:
    如果同步后没有生成代码,最好的方法就是把项目运行一遍!

    /**
     * Created by didikee on 2017/9/7.
     */
    @Entity
    public class User {
    
        @Id(autoincrement = true)
        private Long id = null;
    
        private Long time;
        private String name;
        private Boolean sex;
        @Generated(hash = 1524850927)
        public User(Long id, Long time, String name, Boolean sex) {
            this.id = id;
            this.time = time;
            this.name = name;
            this.sex = sex;
        }
        @Generated(hash = 586692638)
        public User() {
        }
        public Long getId() {
            return this.id;
        }
        public void setId(Long id) {
            this.id = id;
        }
        public Long getTime() {
            return this.time;
        }
        public void setTime(Long time) {
            this.time = time;
        }
        public String getName() {
            return this.name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Boolean getSex() {
            return this.sex;
        }
        public void setSex(Boolean sex) {
            this.sex = sex;
        }
    
    
    }
    

    注意点:

    1. 类需要加@Entity注解
    2. id 类型必须为:Long而不是Long(这个两个的区别大家肯定知道,容易手误而已,倒是插入数据崩溃)
    3. 如果要实现id自增,在创建实体时id为null即可。

    4. 开始操作数据

    我习惯写个统一的类管理各类实体Dao

    /**
     * Created by didikee on 2017/7/19.
     */
    
    public class GreenDaoManager {
        private final static String dbName = "d_db";
        private static GreenDaoManager mInstance;
        private DaoMaster.DevOpenHelper openHelper;
        private Context context;
    
        private GreenDaoManager(Context context) {
            this.context = context;
            openHelper = new DaoMaster.DevOpenHelper(context, dbName, null);
        }
    
        /**
         * 获取单例引用
         * @param context
         * @return
         */
        public static GreenDaoManager getInstance(Context context) {
            if (mInstance == null) {
                synchronized (GreenDaoManager.class) {
                    if (mInstance == null) {
                        mInstance = new GreenDaoManager(context);
                    }
                }
            }
            return mInstance;
        }
    
        public InstaMediaDao getInstaMediaDao() {
            SQLiteDatabase writableDatabase = openHelper.getWritableDatabase();
            DaoMaster daoMaster = new DaoMaster(writableDatabase);
            DaoSession daoSession = daoMaster.newSession();
            return daoSession.getInstaMediaDao();
        }
        public UserDao getUserDao() {
            SQLiteDatabase writableDatabase = openHelper.getWritableDatabase();
            DaoMaster daoMaster = new DaoMaster(writableDatabase);
            DaoSession daoSession = daoMaster.newSession();
            return daoSession.getUserDao();
        }
    
    }
    

    使用就比较简单了,调用对用实体Bean对应的Dao的方法即可。
    例如,查询:

    GreenDaoManager.getInstance(this).getUserDao().queryRaw(String where, String... selectionArg);
    

    其他的增删改查就是api的熟悉问题了,基本上也和sqlite差不多,习惯就ok了。
    网上其他的教程很多,也可参考。

  • 相关阅读:
    Vue插件配置和 后台交互
    Vue项目环境搭建
    数据结构之链表
    数据结构之线性表顺序结构
    leetcode-- Longest Common Prefix
    数据结构之拓扑排序
    数据结构之shell排序
    数据结构之插入排序
    leetcode
    leetcode
  • 原文地址:https://www.cnblogs.com/didikee/p/7491072.html
Copyright © 2011-2022 走看看