Android高性能数据库框架:LiteOrm

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

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

1.8k
OkHttp线程池和连接池
开源

OkHttp线程池和连接池

OkHttp线程池和连接池了解了OkHttp的网络请求流程以及拦截器实现原理,再关注OkHttp中两个重要的:OkHttp的线程池和连接池。1、OkHttp线程池在OkHttp网络请求流程一文中,我们分析了OkHttp异步和同步请求流程。请求最后都在Dispatcher中分发调度处理,最后被ExecutorService执行。1.1、DispatcherDispatcher中执行任务的执行器是ex

5.2k
优美的开源动效库:Lottie
开源

优美的开源动效库:Lottie

优美的开源动效库:Lottie1、强大的动效LottieLottie是一个适用于Android,iOS,Web和Windows的库,它可以使用Bodymovin解析以json格式导出的Adobe After Effects动画,并在移动设备和Web上原生渲染它们!GitHub:https://github.com/airbnb/lottie-androidLottie官网:http://airbn

4.3k