greenDao3的使用说明

    xiaoxiao2021-03-25  122

    greenDao3的使用说明

    主要步骤:

    添加依赖编写Bean初始化化内核增删改查 操作API

    添加依赖

    1.build.gradle(Project:)中添加以下代码:

    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 } }

    2.build.gradle(Module:)中添加以下代码:

    apply plugin: 'com.android.application' apply plugin: 'org.greenrobot.greendao' <-- apply plugin dependencies { compile 'org.greenrobot:greendao:3.2.0' <-- add library }

    创建数据模型

    以下是创建bean的简单示例:

    @Entity public class User { @Id(autoincrement = true) private Long id; @Property(nameInDb = "USERNAME") private String name; @NotNull private int repos; @Transient private int tempUsageCount; ... }

    greenDao3采用的是编译时注解,当你创建好数据模型后,编译然后greenDao3会帮你生成一些类: 注解解释

    @Entity –> 你bean类必须标识有@Entity才会被greenDao识别。在@Entity内还可添加其他内容如下: @Entity( // If you have more than one schema, you can tell greenDAO // to which schema an entity belongs (pick any string as a name). schema = "myschema", // Flag to make an entity "active": Active entities have update, // delete, and refresh methods. active = true, // 指定表名,默认表名为类名 nameInDb = "AWESOME_USERS", // 定义跨多列的索引. indexes = { @Index(value = "name DESC", unique = true) }, // 是否要生成表,默认时true createInDb = false, // 是否生成包含所有的属性构造函数 //要求有一个无参的构造函数 generateConstructors = true, // 属性的get/setf方法是否应该被生成,在缺失的情况下 generateGettersSetters = true )

    字段注解

    @Id 主键表示 类型应为long 主键自增 且不重用旧的值 @Id(autoincrement = true)

    @Property 定义数据库中列名称的,不写的话 按原字段名生成大写的名称如userName 对应生成USER_NAME @Property(nameInDb = "USERNAME")

    @NotNull 值不可以为空 用于long, int, short, byte 这几个基本数据类型。

    @Transient 临时状态标记。

    初始化化内核

    以下代码最好在你以实现的Application中进行,

    DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "db_name", null); SQLiteDatabase db = helper.getWritableDatabase(); DaoMaster daoMaster = new DaoMaster(db); DaoSession daoSession = daoMaster.newSession();

    以上代码主要是用于创建数据库,并且得到DaoSession 对象,我们在进行操作时可以用DaoSession 对象拿到对应数据的Dao对象,

    TestBeanDao testBeanDao = daoSession.getTestBeanDao(); TestBean2Dao testBean2Dao = daoSession.getTestBean2Dao();

    注意:DaoMaster,DaoSession ,TestBeanDao ,TestBean2Dao 这些类都是编译后自动生成的。

    增删改查 操作

    创建和删除表操作 // 创建表示是否要判断,该表是否存在。 boolean ifNotExists = true; // 表所在的数据库 Database database = testBeanDao.getDatabase(); // 创建表 testBeanDao.createTable(database, ifNotExists); // 删除表 testBeanDao.dropTable(database, ifNotExists); // 获取数据库中数据的数量 long count = testBeanDao.count();
    增 插入数据 返回值类型函数说明longinsert(T entity)将给定的实体插入数据库voidinsertInTx(java.lang.Iterable entities)使用事务操作,将给定的实体集合插入数据库voidinsertInTx(java.lang.Iterable entities, boolean setPrimaryKey)使用事务操作,将给定的实体集合插入数据库,并设置是否设定主键voidinsertInTx(T… entities) 将给定的实体插入数据库longinsertOrReplace(T entity)将给定的实体插入数据库,若此实体类存在,则覆盖voidinsertOrReplaceInTx(java.lang.Iterable entities)使用事务操作,将给定的实体插入数据库,若此实体类存在,则覆盖voidinsertOrReplaceInTx(java.lang.Iterable entities, boolean setPrimaryKey)使用事务操作,将给定的实体插入数据库,若此实体类存在,则覆盖,并设置是否设定主键voidinsertOrReplaceInTx(T… entities):使用事务操作,将给定的实体插入数据库,若此实体类存在,则覆盖longinsertWithoutSettingPk(T entity):将给定的实体插入数据库,但不设定主键voidsave(T entity)将给定的实体插入数据库,若此实体类存在,则更新voidsaveInTx(java.lang.Iterable entities):将给定的实体插入数据库,若此实体类存在,则更新voidsaveInTx(T… entities)使用事务操作,将给定的实体插入数据库,若此实体类存在,则更新
    删 删除数据 返回值类型函数说明voiddelete(T entity)从数据库中删除给定的实体voiddeleteAll()删除数据库中全部数据voiddeleteByKey(K key)从数据库中删除给定Key所对应的实体voiddeleteByKeyInTx(java.lang.Iterable keys)使用事务操作删除数据库中给定的所有key所对应的实体voiddeleteByKeyInTx(K… keys)使用事务操作删除数据库中给定的所有key所对应的实体voiddeleteInTx(java.lang.Iterable entities)使用事务操作删除数据库中给定实体集合中的实体voiddeleteInTx(T… entities)使用事务操作删除数据库中给定的实体
    改 更新数据 返回值类型函数说明voidupdate(T entity)更新给定的实体voidupdateInTx(java.lang.Iterable entities)使用事务操作,更新给定的实体voidupdateInTx(T… entities)使用事务操作,更新给定的实体
    加载 返回值类型函数说明Tload(K key)加载给定主键的实体java.util.ListloadAll()加载数据库中所有的实体TloadByRowId(long rowId)加载某一行并返回该行的实体
    查询操作

    1.queryRaw ;

    String where = "where name = ?"; String selectionArg = "lining"; List<TestBean> testBeen = testBeanDao.queryRaw(where, selectionArg);

    2.QueryBuilder;

    // 获取build对象 QueryBuilder<TestBean> queryBuilder = testBeanDao.queryBuilder(); queryBuilder.where(WhereCondition ); // 查询条件 WhereCondition joe = TestBeanDao.Properties.Name.eq("Joe");

    Properties.Field.

    方法名意义eq等于nutEq不等于gt大于lt小于ge大于等于le小于等于in在给定的集合中nutIn不在给定的集合中isNull值为空isNotNull值不为空between在两个值得范围内like
    转载请注明原文地址: https://ju.6miu.com/read-3152.html

    最新回复(0)