基于GreenDao3.2的整合,让数据库操作变得更简单

GreenDAO是一个对象关系映射(ORM)的框架,它能够提供一个接口通过操作对象的方式去操作关系型数据库,能够使操作数据库时更简单、更方便。

GreenDao相比与其他的ORM型数据库,具有的优点有:

1.依赖体积小(100KB左右)

2.最小的内存开销

3.易于使用的API

4.支持数据库加密

结合自己的了解,将这个框架整合了一下:支持增删改查,数据库存储路径设置,数据库升级以及遇到的坑等,基本可以满足95%以上的项目需求。项目的地址如下:

 

GitHub:点击下载

优快云:点击下载

 

GreenDao原理

GreenDao中,DaoMaster.DevOpenHelper源码如下:

/** WARNING: Drops all table on Upgrade! Use only during development. */
public static class DevOpenHelper extends OpenHelper {
    public DevOpenHelper(Context context, String name) {
        super(context, name);
    }

    public DevOpenHelper(Context context, String name, CursorFactory factory) {
        super(context, name, factory);
    }

    @Override
    public void onUpgrade(Database db, int oldVersion, int newVersion) {
        Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables");
        dropAllTables(db, true);
        onCreate(db);
    }
}

点击super,如下:

可以发现:其实GreenDao也是基于原生SQLiteOpenHelper进行了封装,最后还是调用了原生的API。继承SqliteOpenHelper的原生数据库,我们会编写大量的Dao文件、SQL语句以及需要关注cursor的关闭时机以及事物管理等等,但是这些事情GreenDao帮我们很好的处理了,我们只需要关注逻辑的实现即可,从而加快了我们的开发效率。

GreenDao的使用:

1.1 配置

项目的build.gradle:

 classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1'

app的build.gradle:

apply plugin: 'org.greenrobot.greendao'
greendao {
    // 指定数据库schema版本号,迁移等操作会用到
    schemaVersion 1
    // 通过gradle插件生成的数据库相关文件的包名,默认为你的entity所在的包名
    daoPackage 'com.john.johngreendao.greendao.dao'
    // 生成的数据库文件默认目录为:build/generated/source/greendao
    // 自定义生成数据库文件的目录,可以将生成的文件放到java目录中,而不是build中,这样就不用额外的设置资源目录了
    targetGenDir 'src/main/java'
}

dependencies:

implementation 'org.greenrobot:greendao:3.2.0'

1.2 新建Entity实体类:

@Entity
public class Customer {
    @Id(autoincrement = true)
    private Long id;
    private String name;
    private int age;
    //新加字段
    private String sex;
    //新加字段
    private String like;

    public String getLike() {
        return like;
    }
    public void setLike(String like) {
        this.like = like;
    }
    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 getAge() {
        return this.age;
    }
    public void setAge(int age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
}

关于greenDao的一些注解以及意义如下,可以参考一下:

@Entity:它会把当前类映射成默认以类名为表名的数据库表,每一个Entity对象对应着数据库表中的一行记录。当然像表名这些关于数据库表的设置也可以在 @Entity中进行设置。

@nameInDb 在数据库中的名字,如不写则为实体中类名
 @indexes 索引
 @createInDb 是否创建表,默认为true,false时不创建
 @schema 指定架构名称为实体
 @active 无论是更新生成都刷新

@Id 每条数据对应的位置,必写项

@Property:通过这个注解可以设置列名,默认是将属性名的写法转换成数据库中全大写的写法,如果不设置property属性列名就是NAME,如果有多个单词的话,每个单词中间会有下划线分隔开,前提是属性名是标准的驼峰命名法,这样才能识别每个单词。
@NotNull:限制这个列的插入不能为空

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值