美文网首页
GreenDao 3.2教程

GreenDao 3.2教程

作者: Jeongho | 来源:发表于2017-05-24 11:01 被阅读367次

    GreenDao作为一个ORM框架,大家都应该听说过。过多废话不说,直接上干货。实际是没话说,不会介绍,也不想去翻译官网的那些什么轻量级,高效的,快速开发一些什么优点。想了解的朋友,直接去官网看吧。

    GreenDao的引入

    无非就是配置Gradle

    // In your root build.gradle file:
    buildscript {
        repositories {
            jcenter()
            mavenCentral() // add repository
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:2.3.1'
            classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
        }
    }
     
    // In your app projects build.gradle file:
    apply plugin: 'com.android.application'
    apply plugin: 'org.greenrobot.greendao' // apply plugin
     
    dependencies {
        compile 'org.greenrobot:greendao:3.2.2' // add library
    }
    

    module的gradle文件

    喜欢的朋友,可以更改greenDao的生成路径。

    android {
        compileSdkVersion 24
        buildToolsVersion '25.0.0'
        defaultConfig {
            applicationId "com.jeongho.bt3000"
            minSdkVersion 21
            targetSdkVersion 24
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        buildTypes {
            sourceSets{
                main{
                    java.srcDirs=['src/main/java','src/main/java-gen']
                }
            }
    
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    
        greendao{
            schemaVersion 1
            //设置Gen路径
            targetGenDir=['app/src/main/java-gen']
        }
    }
    

    Entity实体

    就是javabean + 注释

    @Entity
    public class DotaHero {
        @Id
        private long id;
    
        private String name;
    
        private int hp;
    
        private int mp;
    
        private int exp;
    
        @Generated(hash = 623523123)
        public DotaHero(long id, String name, int hp, int mp, int exp) {
            this.id = id;
            this.name = name;
            this.hp = hp;
            this.mp = mp;
            this.exp = exp;
        }
    
        @Generated(hash = 500107644)
        public DotaHero() {
        }
    
        public long getId() {
            return this.id;
        }
    
        public void setId(long id) {
            this.id = id;
        }
    
        public String getName() {
            return this.name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getHp() {
            return this.hp;
        }
    
        public void setHp(int hp) {
            this.hp = hp;
        }
    
        public int getMp() {
            return this.mp;
        }
    
        public void setMp(int mp) {
            this.mp = mp;
        }
    
        public int getExp() {
            return this.exp;
        }
    
        public void setExp(int exp) {
            this.exp = exp;
        }
    }
    

    通过daoSession.getXXXXDao()获取XXXXDao来进行Entity的insert、query等操作

    那么问题来了,daoSession怎么生成?

           DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "DOTA-db", null);
           SQLiteDatabase db = helper.getWritableDatabase();
           DaoMaster master = new DaoMaster(db);
           daoSession = master.newSession();
    

    有的小伙伴发现,DaoMaster导包怎么导不进来,代码一片红,整个人一脸懵逼。。。

    写完实体类的时候,重新Make Project(Ctrl+F9/Cmd+F9),就会发现DaoMaster导进来了。还能通过daoSession获取到实体类的Dao,真特么神奇。。

    增删改查

      DotaHeroDao dotaHeroDao = daoSession.getDotaHeroDao();
      DotaHero hero = new DotaHero()
      hero.setId(1);
      hero.setName("Jugg");
      hero.setHp(50);
      hero.setMp(50);
      hero.setExp(200);
      dotaHeroDao.insert(hero);
    

    • 根据ID来删除
    dotaHeroDao.deleteByKey((long) 1);
    
    • 删除所有
    dotaHeroDao.deleteAll();
    

    查绝逼是数据库操作中最麻烦的了。想想脑袋都大。

    GreenDao中是使用QueryBuilder来进行数据查询,省去了编写大量的SQL语句。
    举个最简单的例子:

    • 查询HP等于60的所有英雄
    List<DotaHero> heros = dotaHeroDao.queryBuilder()
                    .where(DotaHeroDao.Properties.Hp.eq(60))
                    .list();
    
    • 根据HP顺序排列、倒序排列
    List<DotaHero> heros = dotaHeroDao.queryBuilder()
                    .orderAsc(DotaHeroDao.Properties.Hp)
                    .list();
    List<DotaHero> heros = dotaHeroDao.queryBuilder()
                    .orderDesc(DotaHeroDao.Properties.Hp)
                    .list();
    
    • 输出查询结果的子集

      limit:限制输出数量

    //取HP最大的10个英雄
    List<DotaHero> heros = dotaHeroDao.queryBuilder()
                    .orderDesc(DotaHeroDao.Properties.Hp).limit(10)
                    .list();
    

    offset:设置输出的偏移量

    offset 必须配合limit使用,输出集合跳过前N个对象

    //跳过HP最大的5个 输出第6~第15的十个英雄
    List<DotaHero> heros = dotaHeroDao.queryBuilder()
                  .orderDesc(DotaHeroDao.Properties.Hp).limit(10).offset(5)
                  .list();
    

    待续更新,先上GitHub项目地址

    相关文章

      网友评论

          本文标题:GreenDao 3.2教程

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