GreenDao使用

官网地址:http://greenrobot.org/greendao/

github://https://github.com/greenrobot/greenDAO

为什么使用GreenDao?

greenDAO的功能一目了然

  • 最高性能(可能是Android上最快的ORM); 我们的基准也是开源的
  • 易于使用的强大API,涵盖关系和连接
  • 最小的内存消耗
  • 库大小(<100KB)以保持较低的构建时间并避免65k方法限制
  • 数据库加密:greenDAO支持SQLCipher,以确保用户的数据安全
  • 强大的社区:超过10802个GitHub明星表明有一个强大而活跃的社区

开始使用:

// In your root build.gradle file:
buildscript {
    repositories {
        jcenter()
        mavenCentral() // add repository
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.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 {
    implementation 'org.greenrobot:greendao:3.2.2' // add library
}

android {
...
}
 
greendao {
    schemaVersion 2
    // daoPackage "com.example.model" // set package of generated classes
}
schemaVersion:数据库模式的当前版本。这是使用的 * OpenHelpers类模式版本之间迁移。如果更改实体/数据库架构,则必须增加此值。默认为1。
daoPackage:生成的DAO,DaoMaster和DaoSession的包名。 默认为源实体的包名称。
targetGenDir:应存储生成的源的位置。 默认为构建目录( build / generated / source / greendao)中生成的源文件夹。
generateTests:  设置为true以自动生成单元测试。
targetGenDirTests:  应存储生成的单元测试的基本目录。默认为 src / androidTest / java。

然后创建实体编译项目,在Android Studio中使用Build> Make Project

注意:仅支持Java类。如果您更喜欢像Kotlin这样的其他语言,那么您的实体类仍然必须是Java。

@Entity
public class UserBean {
    @Id(autoincrement =true)
    private long id;
    private String userName;
    @Generated(hash = 2145472538)
    public UserBean(long id, String userName) {
        this.id = id;
        this.userName = userName;
    }
    @Generated(hash = 1203313951)
    public UserBean() {
    }
    public long getId() {
        return this.id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public String getUserName() {
        return this.userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
}
这里对Bean对象的注释进行解释

@Entity:告诉GreenDao该对象为实体,只有被@Entity注释的Bean类才能被dao类操作

@Id:对象的Id,使用Long类型作为EntityId,否则会报错。(autoincrement = true)表示主键会自增,如果false就会使用旧值

@Property:可以自定义字段名,注意外键不能使用该属性

@NotNull:属性不能为空

@Transient:使用该注释的属性不会被存入数据库的字段中

@Unique:该属性值必须在数据库中是唯一值,向索引添加UNIQUE约束,强制所有值都是唯一的。
         向数据库列添加UNIQUE约束。请注意,SQLite还隐式为其创建索引。

@Generated:编译后自动生成的构造函数、方法等的注释,提示构造函数、方法等不能被修改

核心初始化

最后,初始化数据库和核心greenDAO类的第一步:

public class MyApplication extends Application {
    private DaoMaster.DevOpenHelper mHelper;
    private SQLiteDatabase db;
    private DaoMaster mDaoMaster;
    private DaoSession mDaoSession;

    @Override
    public void onCreate() {
        super.onCreate();
        initDatabase();
    }

    private void initDatabase() {
        // 通过 DaoMaster 的内部类 DevOpenHelper,你可以得到一个便利的 SQLiteOpenHelper 对象。
        // 可能你已经注意到了,你并不需要去编写「CREATE TABLE」这样的 SQL 语句,因为 greenDAO 已经帮你做了。
        // 注意:默认的 DaoMaster.DevOpenHelper 会在数据库升级时,删除所有的表,意味着这将导致数据的丢失。
        // 所以,在正式的项目中,你还应该做一层封装,来实现数据库的安全升级。
        mHelper = new DaoMaster.DevOpenHelper(this, "notes-db", null);
        db = mHelper.getWritableDatabase();
        // 注意:该数据库连接属于 DaoMaster,所以多个 Session 指的是相同的数据库连接。
        mDaoMaster = new DaoMaster(db);
        mDaoSession = mDaoMaster.newSession();
    }

    public DaoSession getDaoSession() {
        return mDaoSession;
    }

    public SQLiteDatabase getDb() {
        return db;
    }
}

核心课程

一旦定义了至少一个实体并构建了项目,就可以开始在Android项目中使用greenDAO。

以下核心类是greenDAO的基本接口:

DaoMaster使用greenDAO的切入点。DaoMaster保存数据库对象(SQLiteDatabase)并管理特定模式的DAO类(而不是对象)。它有静态方法来创建表或删除它们。它的内部类OpenHelper和DevOpenHelper是SQLiteOpenHelper实现,它们在SQLite数据库中创建模式。

DaoSession管理特定模式的所有可用DAO对象,您可以使用其中一个getter方法获取该对象。DaoSession还提供了一些通用的持久性方法,如实体的插入,加载,更新,刷新和删除。最后,DaoSession对象还跟踪身份范围。有关更多详细信息,请查看会话文档

DAO数据访问对象(DAO)持久存在并查询实体。对于每个实体,greenDAO生成DAO。它具有比DaoSession更多的持久性方法,例如:count,loadAll和insertInTx。

实体:可持久的对象。通常,实体是使用标准Java属性(如POJO或JavaBean)表示数据库行的对象。

基本操作

1、获取操作的Dao(用于增删改查)

mUserBeanDao = application.getDaoSession().getUserBeanDao();

 2、增

mUserBeanDao.insert(new UserBean((long) 2, "王美丽"));

3、删

mUserBeanDao.deleteByKey(id);

4、更新

mUserBeanDao.update(infoItemDBBean);

5、查询

// 1、查询单个数据
UserBean userBean = mUserBeanDao.queryBuilder()
                .where(UserBeanDao.Properties.UserName.eq("王大锤"))
                .unique();

// 2、查询一组数据
List<UserBean> beanList = mUserBeanDao.queryBuilder()
                .where(UserBeanDao.Properties.UserName.eq("王"))
                .orderAsc(UserBeanDao.Properties.UserName)
                .list();

数据库升级

1、什么时候需要版本升级更新?

当数据库需要新增一个字段或者改变某些字段的属性时,就会需要更新。

2、数据更新的实现思路

首先创建临时表(数据格式和原表一模一样)。
把当前表的数据插入到临时表中去。
删除掉原表,创建新表。
把临时表数据插入到新表中去,然后删除临时表。

更多进阶操作:官方文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值