Android GreenDao简单使用

现在市面上主流的框架有 OrmLite、SugarORM、Active Android、Realm 与 GreenDAO。

官网上的介绍,greenDAO 是一个将对象映射到 SQLite 数据库中的轻量且快速的 ORM 解决方案。

这里写图片描述

GreenDao特点

性能最大化,可能是Android平台上最快的ORM框架 
易于使用的API 
最小的内存开销 
依赖体积小 
支持数据库加密 
强大的社区支持

GreenDao配置

// In your root build.gradle file:
buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.0'
        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
}

实体类:

实体类,不需要自己写get和set方法,在生成表的时候会自动生成。不要忘了在类名上标记@Entity注解

/**
 *  * Created by zhanke on 2019/3/1 0009.
 * <p>
 */
@Entity //@Entity 将我们的java普通类变为一个能够被greenDAO识别的数据库类型的实体类
public class User {

    //@Id:主键,通过这个注解标记的字段必须是Long类型的,这个字段在数据库中表示它就是主键,并且它默认就是自增的
    @Id(autoincrement = true)
    private Long id;

    @NotNull// @NotNull 设置数据库表当前列不能为空
    @Unique//唯一
    private String name;

    //@Property:设置一个非默认关系映射所对应的列名,默认是使用字段名,例如:@Property(nameInDb = "name")
    @Property(nameInDb = "userage")
    private int age;

    //@Transient:表明这个字段不会被写入数据库,只是作为一个普通的java类字段,用来临时存储数据的,不会被持久化
    @Transient
    private String like;
}

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

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

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

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

@Unique:该属性值必须在数据库中是唯一值

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


写好实体类之后Make Project 重新编译

初始化GreenDao

public class CustomApplication extends Application {

    public static final String DB_NAME = "app.db";

    private static DaoSession mDaoSession;

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

        initGreenDao();
    }

    private void initGreenDao() {
        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, DB_NAME);
        SQLiteDatabase db = helper.getWritableDatabase();
        DaoMaster daoMaster = new DaoMaster(db);
        mDaoSession = daoMaster.newSession();
    }

    public static DaoSession getmDaoSession() {
        return mDaoSession;
    }
}

添加数据

注意:Long型id,如果传入null,则GreenDao会默认设置自增长的值。

insert(User entity):插入一条记录, 当指定主键在表中存在时会发生异常

添加一条数据

CustomApplication.getmDaoSession().getUserDao().insert(user);

insertOrReplace(User entity) :当指定主键在表中存在时会覆盖数据,有该数据时则更新

save(User entity):

使用数据库插入数据时,使用insert会因为key值(通常是id)重复的异常。我们当然想通过一个简单的方法:有该数据时则更新,没有该数据时则插入的“有更无插”的方法,在GreenDao有两个方insertOrReplace和save,可两者时有区别的:

结论

insertOrReplace : 传入的对象在数据库中,有则更新无则插入。推荐同步数据库时使用该方法。

save 类似于insertOrReplace,区别在于save会判断传入对象的key,有key的对象执行更新,无key的执行插入。当对象有key但并不在数据库时会执行失败.适用于保存本地列表。

//key为null,插入
User user = new User(null, "xyh" , 120, "篮球");

//key不为null,在数据库中有该key执行更新,在数据无无该key,不插入不更新
User user = new User(21l, "xyh333" , 120, "篮球"

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值