资讯详情

【Android -- 数据存储】GreenDao 的基本使用

一、前言

GreenDao 经过2次操作数据库的神器.0版本升级后,被开发者广泛使用。

GitHub 地址:greenDAO

优点

  • 最佳性能 (可能是 Android 中最快的 ORM) ,基准测试也是开源的;
  • 功能强大,易于使用 api,涵盖关系和连接;
  • 内存消耗最小;
  • 小型库大小(< 100KB) ,保持较低的施工时间,避免65k 方法限制;
  • 数据库加密:greenDAO 支持 SQLCipher 确保用户数据的安全;
  • 强大而活跃的社区交流支持。

二、基本配置

    buildscript { 
             repositories { 
                 google()         mavenCentral()     }     dependencies { 
                 classpath "com.android.tools.build:gradle:4.2.1"         classpath 'org.greenrobot:greendao-gradle-plugin:3.3.0'     } } 

plugins { 
             id 'com.android.application'     id 'org.greenrobot.greendao' } --------------------------------------     // greendao     implementation 'org.greenrobot:greendao:3.3.0'      // RecyclerAdapter     implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30'  ---------------------------------------------- greendao { 
             schemaVersion 1 ///当前数据库版本 } 

三、GreenDao 的使用

3.1 效果图

3.2 创建 Bean 对象(表名和字段名)

GreenDao 需要创建 Bean 对象之后,该 Bean 对象就是表名,而它的属性值就是字段名,其实现是通过注释的方式来实现的,下面是购物车的 Bean 对象(每个 Bean 对象对应一张表)

/** * Created on 2022/6/7 14:58 * * @author Gong Youqiang */
@Entity
public class Shop { 
        
    public static final int TYPE_CART = 0x01;
    public static final int TYPE_LOVE = 0x02;

    //不能用int
    @Id(autoincrement = true)
    private Long id;
    @Unique
    private String name;
    @Property(nameInDb = "price")
    private String price;
    private int sell_num;
    private String image_url;
    private String address;
    private int type;
    @Generated(hash = 1304458862)
    public Shop(Long id, String name, String price, int sell_num, String image_url,
                String address, int type) { 
        
        this.id = id;
        this.name = name;
        this.price = price;
        this.sell_num = sell_num;
        this.image_url = image_url;
        this.address = address;
        this.type = type;
    }
    @Generated(hash = 633476670)
    public Shop() { 
        
    }
    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 String getPrice() { 
        
        return this.price;
    }
    public void setPrice(String price) { 
        
        this.price = price;
    }
    public int getSell_num() { 
        
        return this.sell_num;
    }
    public void setSell_num(int sell_num) { 
        
        this.sell_num = sell_num;
    }
    public String getImage_url() { 
        
        return this.image_url;
    }
    public void setImage_url(String image_url) { 
        
        this.image_url = image_url;
    }
    public String getAddress() { 
        
        return this.address;
    }
    public void setAddress(String address) { 
        
        this.address = address;
    }
    public int getType() { 
        
        return this.type;
    }
    public void setType(int type) { 
        
        this.type = type;
    }
}

这里需要注意的是,创建完成之后,(点击锤子图标)需要 build gradle 来完成我们的代码自动生成:

  • Bean 实体的构造方法和 get、set 方法
  • DaoMaster、DaoSession、DAOS类

3.2 GreenDao 数据库创建

/** * Created on 2022/6/7 15:01 * * @author Gong Youqiang */
public class MyApp extends Application { 
        
    private static DaoSession daoSession;

    @Override
    public void onCreate() { 
        
        super.onCreate();
        //配置数据库
        setupDatabase();
    }

    /** * 配置数据库 */
    private void setupDatabase() { 
        
        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "shop.db", null);
        SQLiteDatabase db = helper.getWritableDatabase();
        DaoMaster daoMaster = new DaoMaster(db);
        daoSession = daoMaster.newSession();
    }

    public static DaoSession getDaoInstant() { 
        
        return daoSession;
    }
}

3.3 GreenDao 增删改查

/** * Created on 2022/6/7 15:00 * * @author Gong Youqiang */
public class LoveDao { 
        
    /** * 添加数据 * * @param shop */
    public static void insertLove(Shop shop) { 
        
        MyApp.getDaoInstant().getShopDao().insert(shop);
    }

    /** * 删除数据 * * @param id */
    public static void deleteLove(long id) { 
        
        MyApp.getDaoInstant().getShopDao().deleteByKey(id);
    }

    /** * 更新数据 * * @param shop */
    public static void updateLove(Shop shop) { 
        
        MyApp.getDaoInstant().getShopDao().update(shop);
    }

    /** * 查询条件为Type=TYPE_LOVE的数据 * * @return */
    public static List<Shop> queryLove() { 
        
        return MyApp.getDaoInstant().getShopDao().queryBuilder().where(ShopDao.Properties.Type.eq(Shop.TYPE_LOVE)).list();
    }
}

四、小结

关于 GreenDao 的的基本概念与基本操作就讲到这里,更多对于 GreenDao 的数据库操作还需要多多从实战中去探索,这里只是一个快速入门的引导 .GreenDao 高级操作还包括有:多表查询、多表关联、session 缓存等用法,可以到 GreenDao 的官网进行学习。

标签: sell非晶电感

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台