Android数据缓存框架 - 内置ORM功能

我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第1篇文章,[点击查看活动详情](https://s.juejin.cn/ds/jooSN7t "https://s.juejin.cn/ds/jooSN7t")

前面我介绍了数据缓存的设计,由于缓存也依赖数据存储,所以我直接把开源代码网址发给大家,供大家学习 https://github.com/dora4/dcache-androd 。使用教程如下:

1. **配置初始化**

   ```kotlin
   Orm.init(this, OrmConfig.Builder()
                   .database("dcache_sample")
                   .tables(Account::class.java)
                   .version(1)
                   .build())
   ```

   在自定义的Application类的入口加入一行配置,database为数据库名,version从1开始每次递增1,tables用来配置需要初始化的表,dcache中所有的表需要实现OrmTable接口。

2. **注解详解**

   - 表和列相关

     - @Table

       此注解配置在OrmTable的实现类的类名之上,用来指定一个类映射到表的名称

     - @Column

       此注解配置在OrmTable的实现类的成员属性之上,用来指定一个属性映射到字段的名称

     - @Ignore

       此注解的优先级高于@Column,配置在OrmTable的实现类的成员属性之上,配置了此注解的成员属性,不会作为表的字段进行映射

   - 约束相关

     - @NotNull

       此注解配置在OrmTable的实现类的成员属性之上,用来指定这个字段为非空字段

     - @PrimaryKey

       此注解配置在OrmTable的实现类的成员属性之上,用来指定这个字段为表的主键

     - @Id

       此注解配置在OrmTable的实现类的成员属性之上,作用类似于@PrimaryKey,并

       在它的基础上指定了该字段名为”_id“,相当于@PrimaryKey+@Column("\_id")

     - @Unique

       此注解配置在OrmTable的实现类的成员属性之上,表示这个字段的值在这张表中从不重复

     - @Default

       此注解配置在OrmTable的实现类的成员属性之上,通过它可以给字段指定默认值

3. **CRUD操作**

   - 插入数据

     ```kotlin
     DaoFactory.getDao(Account::class.java).insert(Account(generateAccKey(),
                         "D"+generateAccKey(), "P"+generateAccKey()))
     ```

     insert不仅可以被用来插入单条数据,也可以插入一个List数据

   - 删除数据

     ```kotlin
     val selectOne = DaoFactory.getDao(Account::class.java)
                         .selectOne(QueryBuilder.create().orderBy(OrmTable.INDEX_ID))
                 if (selectOne != null) {
                     DaoFactory.getDao(Account::class.java).delete(selectOne)
                 }
     ```

   - 更新数据

     ```kotlin
     DaoFactory.getDao(Account::class.java).update(Account("这个是key",
                         "D"+generateAccKey(), "P"+generateAccKey()))
     ```

   - 查询数据

     - Condition

       selection:where子句,不带where,可以带”?“占位符

       selectionArgs:”?“占位符的所有值

     - WhereBuilder

       where子句的构建类,通过WhereBuilder.create ()创建实例

       ```java
       public WhereBuilder addWhereEqualTo(String column, Object value) {
               return append(null, column + EQUAL_HOLDER, value);
           }
       ```

       可以通过调用addWhereEqualTo添加key=value条件。

     - QueryBuilder

       支持where、orderBy、limit、groupBy等

   - 查询记录数

     ```kotlin
     val count = DaoFactory.getDao(Account::class.java).selectCount()
     ```

     通过selectCount查询符合查询条件的记录条数。

4. **其他注意事项**

   - 复杂数据类型字段映射

     ```java
     @Convert(converter = StringListConverter.class, columnType = String.class)
     @Column("acc_child_values")
     private List<String> accChildValues;
     ```

     使用@Convert注解可以保存复杂的数据类型,例如ArrayList,一般将复杂数据类型转成格式化后的字符串类型保存到数据库,读取数据的时候进行自动解码操作。converter类型转换器可以自行定义,columnType为你保存到数据库的实际数据类型。

   - 表结构升级

     ```java
       @Override
       public boolean isUpgradeRecreated() {
           return false;
       }
     ```

     只需要在配置中将数据库版本提升1,即可自动进行表结构的升级。在OrmTable的实现类重写isUpgradeRecreated()来确定表升级后是否要清空之前保存的数据,如果return true,则在表升级后将数据清空。

   - 事务操作

     ```kotlin
     Transaction.execute(Account::class.java) {
                     val selectOne =             it.selectOne(QueryBuilder.create().orderBy(OrmTable.INDEX_ID))
                     if (selectOne != null) {
                         it.delete(selectOne)
                     }
                 }
     ```

     使用Transaction.execute()可以在代码块中执行事务操作,it指代的是OrmDao&lt;Account&gt;。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dora丶Android

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值