greenDao3.0 的基本使用

greenDao3.0 的基本使用

前言:

greenDao是一个将对象映射到SQLite数据库中的轻量且快速的ORM解决方案。greenDao3.0 相对于2.0版本使用起来更简单易懂,大大降低学习成本。
如果要详细了解的小伙伴可以访问greenDao的官方地址:greenDao

优势:

  • 访问速度快.
  • 易于使用的api.
  • 内存消耗较少.
  • 支持数据库加密.
  • 库精简,从而避免65535的大小限制.

集成步骤:

gradle配置

添加库
buildscript {
    repositories {
        jcenter()
        mavenCentral()  //<-- add repository
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.0'
        classpath 'org.greenrobot:greendao-gradle-plugin:3.2.1' //<-- add plugin
    }
}
添加插件
apply plugin: 'com.android.application'
apply plugin: 'org.greenrobot.greendao'
配置版本/Dao文件生成路径
greendao {
    schemaVersion 1000                                  //版本配置,如果版本升级中有修改表结构,需要修改此版本号
    daoPackage 'org.greenrobot.greendao.example.Dao'    //生成的DaoMaster,DaoSession,NoteDao的包名,不设置默认为项目包名
    targetGenDir 'src/main/java'                        //生成的DaoMaster,DaoSession,NoteDao的位置,不设置默认为build\generated\source\greendao
}
Compile配置
dependencies {
    compile 'org.greenrobot:greendao:3.2.0' //<-- add library
}

greenDao初始化

greenDao在使用之间需要对其进行初始化,建议在application中进行实例化并拿到daoSession。
public class App extends Application {
    /**
     * A flag to show how easily you can switch from standard SQLite to the encrypted SQLCipher.
     */
    public static final boolean ENCRYPTED = true;
    private DaoSession daoSession;

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

        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, ENCRYPTED ? "notes-db-encrypted" : "notes-db");
        Database db = ENCRYPTED ? helper.getEncryptedWritableDb("super-secret") : helper.getWritableDb();
        daoSession = new DaoMaster(db).newSession();
    }

    public DaoSession getDaoSession() {
        return daoSession;
    }
}
通过application拿到daoSession,然后在Activity和Fragment中获取noteDao

注:这里的noteDao是自定义的实体类note编译后生成的数据库操作类。后面会有用urse类生成userDao与这个一样。

// do this in your activities/fragments to get hold of a DAO
noteDao = daoSession.getNoteDao();

使用:

新建实体类

这里新建一个实体类,使用注解,最后编译后会在数据库notes-db中生成一张名为User的表。id,name是表的列名。注解@transient 表示该字段不作为列名。


@Entity
public class User {
    @Id
    private Long id;
    private String name;
    @Transient
    private int tempUsageCount; // not persisted
    @Generated(hash = 873297011)
    public User(Long id, String name) {
        this.id = id;
        this.name = name;
    }
}

编译

先进行编译,greenDao 3.0会在User中生成对应的set,get方法。同时会在gradle指定的路径和包中生成userDao,DaoMaster,DaoSession。

这里写图片描述

编译


这里写图片描述

生成的文件

初始化

在前面已经有介绍,这里不做详细解释了。

使用

这里需要注意的是,greenDao并不支持json不转为实体类直接存入数据库。以后也许会支持,但至少目前不允许。
拿到userDao对象,数据库的基本操作通过它来实现。

 DaoSession daoSession = ((App) getApplication()).getDaoSession();
 userDao = daoSession.getUserDao();
 User user = new User((long)1,"user1"); 
 userDao.insert(user);
 userDao.deleteByKey(userId);
User user = new User((long)2,"anye0803");
userDao.update(user);

1.全部查询:

如果要排序的话:

Query<User> usersQuery;
usersQuery = userDao.queryBuilder().orderAsc(UserDao.Properties.Id).build(); //查询user,根据ID排序
List<User> users = usersQuery.list();

如果不排序的话:

List<User> users = userDao.loadAll();
String userName = "";
for (int i = 0; i < users.size(); i++) {
    userName += users.get(i).getName()+",";
}

2.查询单条数据(根据条件查询)

usersQuery = userDao.queryBuilder().orderAsc(UserDao.Properties.Id).build();
QueryBuilder qb = userDao.queryBuilder();
qb.where(UserDao.Properties.Name.eq("Joe"),  //名字等于Joe
    qb.or(UserDao.Properties.Id.gt(2), //gt表示>
    qb.and(UserDao.Properties.Id.eq(3),
    UserDao.Properties.Date.ge(1489161600)))); //ge表示>=  2017/03/10 24:00:00
List youngJoes = qb.list();

greendao中的注解(没有一一尝试,可以都试试)

(一) 定义实体(类名上的注解)

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

(二) 属性和方法上的注解

@Id
@NotNull 不为null
@Unique 唯一约束
@ToMany 一对多
@OrderBy 排序
@ToOne 一对一
@Transient 不存储在数据库中
@generated 由greendao产生的构造函数或方法

总结:

greenDao 3.0 暂时写到这,还有一些操作自己慢慢探索中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值