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();