Android高性能数据库框架:LiteOrm

QuibblerQuibbler 2020-02-12 约 8 分钟 2101 次阅读

LiteOrm

1、简介

LiteOrm是一个小巧、强大、比系统自带数据库操作性能快1倍的 android ORM 框架类库,开发者一行代码实现数据库的增删改查操作,以及实体关系的持久化和自动映射。

GitHub:https://github.com/litesuits/android-lite-orm

2、Application初始化

在自己的Application中进行LiteOrm数据库的初始化操作

public class MyApplication extends Application {

    public static LiteOrm sLiteOrm;
    
    @Override
    public void onCreate() {
        super.onCreate();
        
        DataBaseConfig config = new DataBaseConfig(this, "liteorm.db");
        config.dbVersion = 1;
        config.onUpdateListener = null;
        
        //独立操作,适用于没有级联关系的单表操作,
        sLiteOrm = LiteOrm.newSingleInstance(config);
        
        //级联操作,适用于多表级联操
//      sLiteOrm = LiteOrm.newCascadeInstance(config);

        //打开数据库Log
        sLiteOrm.setDebugged(true);
    }
    
}

LiteOrm有两种操作方式:

  • 独立操作:使用 LiteOrm 的 single 实例,可与 cascade 方式平滑切换,性能高,仅处理该对象数据,其关系、和关联对象忽略;            
  • 级联操作:使用 LiteOrm 的 cascade 实例,可与 single 方式平滑切换,全递归,该对象数据,及其关系、和关联对象都被处理;            

3、数据表注解

看如下一个类TestTable,加上了@Table("表名")注解。还有很多其它类型的注解

@Table("test_table")
public class TestTable {

    @PrimaryKey(AssignType.AUTO_INCREMENT)
    private int id;
    
    @NotNull
    private String name;
    
    //忽略该字段,不会存到数据库
    @Ignore
    private String password;
    
    @Default("true")
    @Column("login")
    private boolean isLogin;
    
    //什么注解也不加,也会存到数据库,列名token
    private String token;
}

3.1、基础注解

  • @Table("test_model") 表名
  • @PrimaryKey(AssignType.AUTO_INCREMENT) 主键自增长
  • @PrimaryKey(AssignType.BY_MYSELF) 自己设置主键
  • @Ignore 忽略该字段,不存入数据库
  • @Column("login") 指定列名
  • @Collate("NOCASE") 大小写无关

3.2、关系映射

  • @Mapping(Relation.ManyToMany) 多对多
  • @Mapping(Relation.OneToMany) 一对多
  • @Mapping(Relation.OneToOne) 一对一
  • @Mapping(Relation.ManyToOne) 多对一
  • @MapCollection(ConcurrentLinkedQueue.class) 指定约束对象的集合类型

3.3、约束相关

  • @NotNull 非空约束
  • @Default("true") 默认约束
  • @Check("index > 0 ") check约束
  • @Unique 唯一约束
  • @UniqueCombine() 联合唯一约束


3.4、约束冲突

ON CONFLICT 子句不是一个单独的 SQL 命令。 它可以出现在很多其它的 SQL 命令中,是一个非标准的子句。ON CONFLICT 子句指定一个用于解决约束冲突的算法。 有五种选择

- @Conflict(Strategy.ROLLBACK) 
- @Conflict(Strategy.ABORT) 
- @Conflict(Strategy.FAIL) 
- @Conflict(Strategy.IGNORE) 
- @Conflict(Strategy.REPLACE)

4、简单使用

前面已经创建了一个数据表类,直接创建对象。

TestTable testTable = new TestTable("Quibbler");

保存

//保存
    sLiteOrm.save(testTable);

插入

//插入
    TestTable otherRecord = new TestTable("Jack");
    sLiteOrm.insert(otherRecord, ConflictAlgorithm.Abort);

更新

//更新
    testTable.setName("Zhao");
    sLiteOrm.update(testTable);

查询

//查询
     List queryList = sLiteOrm.query(TestTable.class);
     OrmLog.i(TAG, queryList);

删除

//删除记录
    sLiteOrm.delete(testTable);

删除表,删除后仍可执行对应的操作,不会奔溃当然也不会成功。

sLiteOrm.delete(TestTable.class);

删除数据库,如果数据库删除了再去执行操作会奔溃

sLiteOrm.deleteDatabase();

重建数据库,不会影响已存在的数据

sLiteOrm.openOrCreateDatabase();

相关推荐

Airbnb开源项目
精选开源

Airbnb开源项目

Airbnb Engineering & Data ScienceAirflow Use Apache Airflow (incubating) to author workflows as directed acyclic graphs (DAGs) of tasks12,263Airpal Web UI for PrestoDB2,502Aerosolve A machine learning

2.3k
WilliamChart:轻量美观的 Android 图表库实战
精选开源

WilliamChart:轻量美观的 Android 图表库实战

WilliamChart:轻量美观的 Android 图表库实战数据可视化是运动、健康、金融、统计类 App 的刚需。MPAndroidChart 功能最全但偏重复杂,WilliamChart 走的则是"轻量 + 美观 + Kotlin 原生"路线——v3 用 Kotlin 完全重写,API 极简,一行 chart.animate(dataSet) 就能把数据画成带动画的折线/柱状/环形图,开箱即

175
sherpa解析:开源语音技术全家桶
精选开源

sherpa解析:开源语音技术全家桶

想在手机、树莓派甚至 RISC-V 开发板上离线跑语音识别,五年前还是个需要啃 Kaldi 源码的硬核课题。k2-fsa 组织的 sherpa 把这件事变成了"下载预训练模型、装个包、跑示例"的三步操作。这个以 Apache-2.0 协议开源的项目自我定位是"新一代 Kaldi 的语音转文本框架",它专注端到端模型的推理部署:transducer 与 CTC 两类架构,C++ 与 Python 双…

44