美文网首页
Android GreenDao框架基本使用(数据库)

Android GreenDao框架基本使用(数据库)

作者: android_haihong | 来源:发表于2019-04-02 14:15 被阅读0次

    GreenDao 介绍:
    GreenDao是ORM框架(Object Relation Mapping对象关系映射),能够提供一个接口通过操作对象的方式去操作关系型数据库,它能够让你操作数据库时更简单、更方便,表现形式就是通过GreenDao将数据库和Bean对象关联起来
    比较主流的几个ORM框架分别是GreenDao,OrmLite,ActiveAndroid,又兴趣可以了解下,因为据我了解GreenDao对数据库操作的速度是最快的,所以其他两个我只是知道,并没有去了解
    GreenDao优点:存取速度快.支持数据库加密.轻量级.激活实体.支持缓存.代码自动生成

    想看看源码什么的,可以参考:
    官网地址:http://greenrobot.org/greendao/
    github:https://github.com/greenrobot/greenDAO

    GreenDao3.2的配置:
    <1>需要在工程根目录的build.gradle中添加依赖

    buildscript {
        repositories {
            google()
            jcenter()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:3.2.1'
            classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'
        }
    }
    

    <2>在项目app的build.gradle中添加依赖

    apply plugin: 'com.android.application'
    //使用greendao
    apply plugin: 'org.greenrobot.greendao'
    
    android {
        compileSdkVersion 27
        defaultConfig {
            applicationId "com.project.gubipproject"
            minSdkVersion 22
            targetSdkVersion 27
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    
        greendao {
            //版本号,升级时可配置
            schemaVersion 1
            //这里可以指定编译成功后(DaoMaster、DaoSession、DAOS类)的文件目录,可以不指定
            //daoPackage '你的包名.你的文件目录'
            //targetGenDir 'src/main/java'
        }
    
    }
    
    dependencies {
        api fileTree(include: ['*.jar'], dir: 'libs')
        testImplementation 'junit:junit:4.12'
        annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
        api 'com.android.support:appcompat-v7:27.1.1'
        api 'com.android.support.constraint:constraint-layout:1.1.0'
        api 'com.android.support:support-v4:27.1.1'ign:27.1.1'
         //greendao依赖
        api 'org.greenrobot:greendao:3.2.2'
    }
    

    然后就是GreenDao的使用了:
    我感觉比较常用的可能保存历史记录之类的,这里就弄个数据列表吧
    <1>创建Bean对象(表名和字段名)
    GreenDao需要创建Bean对象之后,该Bean对象就是表名,而它的属性值就是字段名,其实现是通过注释的方式来实现的,下面是购物车的Bean对象(每个Bean对象对应一张表)
    这里对Bean对象的注释进行解释
    @Entity:告诉GreenDao该对象为实体,只有被@Entity注释的Bean类才能被dao类操作
    @Id:对象的Id,使用Long类型作为EntityId,否则会报错。(autoincrement = true)表示主键会自增,如果false就会使用旧值
    @Property:可以自定义字段名,注意外键不能使用该属性
    @NotNull:属性不能为空
    @Transient:使用该注释的属性不会被存入数据库的字段中
    @Unique:该属性值必须在数据库中是唯一值
    @Generated:编译后自动生成的构造函数、方法等的注释,提示构造函数、方法等不能被修改

    @Entity
    public class DataList{
        //不能用int(@Id :主键 Long型,可以通过@Id(autoincrement = true)设置自增长)
        @Id(autoincrement = true)
        private Long id;
    
        @Property
        private String title;               //标题
        private String content;         //内容
        private String image_url;     //缩略图
    
    }
    

    创建完成之后,我们只需要Rebulid Project 来完成我们的代码自动生成,自动生成的代码有:
    Bean实体的构造方法和get、set方法
    DaoMaster、DaoSession、DAOS类

    <2>GreenDao数据库创建以及初始化:

    /**
     * 在Application中进行创建和配置
     */
    public class BaseApplication extends Application {
        private static DaoSession daoSession;
    
        @Override
        public void onCreate() {
            super.onCreate();
    
            //配置数据库
            setupDatabase();
        }
    
        /**
         * 配置数据库
         */
        private void setupDatabase() {
            //创建数据库 ,"datalist.db"为表名
            DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "datalist.db", null);
            //获取可写数据库
            SQLiteDatabase db = helper.getWritableDatabase();
            //获取数据库对象
            DaoMaster daoMaster = new DaoMaster(db);
            //获取Dao对象管理者
            daoSession = daoMaster.newSession();
        }
    
        public static DaoSession getDaoInstant() {
            return daoSession;
        }
    
    }
    

    记住BaseApplication必须要在清单配置文件中声明哦!

       <application
            android:name=".base.BaseApplication"
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme"
            tools:ignore="GoogleAppIndexingWarning">
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    

    GreenDao的创建非常的简洁,编译后会自动将Bean对象创建成表,不再需要手写SQL语句,这里的数据库创建只需要在Application中执行一次即可,这里对几个类进行解释:
    DevOpenHelper:创建SQLite数据库的SQLiteOpenHelper的具体实现
    DaoMaster:GreenDao的顶级对象,作为数据库对象、用于创建表和删除表
    DaoSession:管理所有的Dao对象,Dao对象中存在着增删改查等API

    我们已经创建好了DaoSession和DataList的Bean对象,编译后会自动生成我们的DataListDao对象,可通过DaoSession获得
    DataListDao data = daoSession.getDataListDao();
    这里的Dao(Data Access Object)指数据访问接口,即提供了数据库操作一些API接口,可通过dao进行增删改查操作

    <3>数据库的增删改查基本操作

    public class DataListDao {
    
        /**
         * 添加数据,如果有重复则覆盖
         * @param datalist
         */
        public static void insertData(DataList datalist) {
            BaseApplication.getDaoInstant().getDataListDao().insertOrReplace(datalist);
        }
    
        /**
         * 删除数据 根据id删除
         * @param id
         */
        public static void deleteData(long id) {
            BaseApplication.getDaoInstant().getDataListDao().deleteByKey(id);
        }
    
    /**
         * 删除所有数据
         * @param id
         */
        public static void deleteTokenAll() {
            MyAppliaction.getDaoInstant().getDataListDao().deleteAll();
        }
    
        /**
         * 更新数据
         * @param datalist
         */
        public static void updateData(DataList datalist) {
            BaseApplication.getDaoInstant().getDataListDao().update(datalist);
        }
    
        /**
         * 查询全部数据
         */
        public static List<DataList> queryAll() {
            return BaseApplication.getDaoInstant().getDataListDao().loadAll();
        }
    
     /**
         * 查询表中是否含某条数据(比如我们现在要看看有没存在一个条件为title的数据)
         */
        public static boolean queryTokenid(String title) {
            List<DataList> list =BaseApplication.getDaoInstant().getDataListDao().queryBuilder()
                            .where(DataListDao.Properties.Title.eq(title)).list();
            if (list != null && list.size() != 0) {
                return true;
            }
            return false;
        }
    
    }
    

    这里先做个记录,有空补上demo,见谅

    相关文章

      网友评论

          本文标题:Android GreenDao框架基本使用(数据库)

          本文链接:https://www.haomeiwen.com/subject/cjmmbqtx.html