LiteOrm-OHOS
Go to file
田梓萱 2331736738 add ...
Signed-off-by: Y7000p <xcl@xuegao-tzx.top>
2022-05-16 19:56:37 +08:00
library add ... 2022-05-16 19:56:37 +08:00
.gitignore add ... 2022-05-16 19:56:37 +08:00
LICENSE add ... 2022-05-16 19:56:37 +08:00
README.md add ... 2022-05-16 19:56:37 +08:00

README.md

LiteOrm_Mod

本项目是基于开源项目LiteOrm进行优化的移植和开发的可以通过项目标签以及gitee地址https://gitee.com/hihopeorg/ohos-lite-orm) 追踪到原项目版本

项目介绍

  • 项目名称: 高性能数据库框架
  • 所属系列ohos的第三方组件适配移植
  • 功能: LiteOrm是一个小巧、强大、比系统自带数据库操作性能快1倍的 ORM 框架类库,开发者一行代码实现数据库的增删改查操作,以及实体关系的持久化和自动映射。
  • 项目移植状态:完成
  • 调用差异:无
  • 项目作者和维护人: hihope田梓萱
  • 联系方式hihope@hoperun.comxcl@xuegao-tzx.top
  • 原项目Doc地址https://gitee.com/hihopeorg/ohos-lite-orm
  • 原项目基线版本v1.0.0
  • 编程语言Java
  • 外部库依赖: 无
功能特点
  • 支持多库每个数据库文件对应一个LiteOrm管理类实例。
  • 自动建表:开发者无需关心数据库以及表细节。
  • 库文件操作:新建、打开、删除、释放一个数据库文件。
  • 独立操作:使用 LiteOrm 的 single 实例,可与 cascade 方式平滑切换,性能高,仅处理该对象数据,其关系、和关联对象忽略;
  • 级联操作:使用 LiteOrm 的 cascade 实例,可与 single 方式平滑切换,全递归,该对象数据,及其关系、和关联对象都被处理;
  • 关系存储和恢复:真正实现实体关系映射持久化以及恢复,只需在实体的关联属性上标出关系类型即可。
  • 智能列探测App升级或者Model改变新加了属性字段该字段将被探测到并加入数据库中因此无需担心新字段不被存储。
  • 丰富API支持save(replace), insert, update, delete, query, mapping, etc。
  • 自动识别类型分别转化为以sqlite支持的TEXT, REAL, INTEGER, BLOB几种数据类型存储。
  • 自动构建对象通过反射和探测构造函数参数等hack手法新建对象大多情况下亦不需要无参构造函数。
  • 更新指定列,可灵活、强制、批量赋值,强制赋值将无视被操作对象的真实值。
  • 存储序列化字段Date、ArrayList、Vector等各种容器智能保存及读取。
  • 约束性语法支持NOT NULL, UNIQUE, DEFAULT, COLLATE, CHECK, PRIMARY KEY支持冲突算法。
  • 灵活的查询和删除columns, where, roder, limit, having group, etc。

优化点

  1. 解决了原版无法控制日志的问题
  2. 导入har包即可使用适配API6和DevEco3.0
  3. 无需读写权限亦可以正常使用

安装教程

方案一:

直接引入 library.har 依赖即可

allprojects {
  repositories {
      mavenCentral()        
  }
}
...
dependencies {
  ...
  implementation 'top.xuegao-tzx:library:1.2.0'
  ...
}
方案二:
  1. 下载依赖库har包 library.har。
  2. 启动 DevEco Studio将下载的har包导入工程目录“entry->libs”下。
  3. 在moudle级别下的build.gradle文件中添加依赖在dependences标签中增加对libs目录下har包的引用。
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar', '*.har'])
	……
}
  1. 在导入的har包上点击右键选择“Add as Library”对包进行引用选择需要引用的模块并点击“OK”即引用成功。

使用说明

配置网络权限

由于LiteOrm涉及到文件和网络的操作因此需要你在config.json文件中添加以下权限

{
 "reqPermissions": [
      {
        "name": " com.xcl.demo.DataAbilityShellProvider.PROVIDER",
        ...
      }
    ]
}
快速起步:初始化应保持单例

一个数据库对应一个LiteOrm的实例如果一个App只有一个数据库那么LiteOrm应该是全局单例的。 如果多次新建LiteOrm实例系统会提示你应该关闭之前的数据库也可能会引起其他未知错误。

保持单例:

static LiteOrm liteOrm;

if (liteOrm == null) {
    liteOrm = LiteOrm.newSingleInstance(this, "liteorm.db");
}
liteOrm.setDebugged(true); // open the log
基本注解

新建一个Test Model将其作为操作对象

@Table("test_model")
public class TestModel {

    // 指定自增,每个对象需要有一个主键
    @PrimaryKey(AssignType.AUTO_INCREMENT)
    private int id;

    // 非空字段
    @NotNull
    private String name;

    //忽略字段,将不存储到数据库
    @Ignore
    private String password;

    // 默认为true指定列名
    @Default("true")
    @Column("login")
    private Boolean isLogin;
}

LiteOrm将为开发者建一个名为“test_model”的数据库表其字段为id name login。 建表语句CREATE TABLE IF NOT EXISTS test_model (id INTEGER PRIMARY KEY AUTOINCREMENT ,name TEXT, login TEXT DEFAULT true) 。

常用操作

直接操作对象即可LiteOrm会为你完成探测、建表等工作。

  • 保存插入or更新
School school = new School("hello");
liteOrm.save(school);

  • 插入 ```java Book book = new Book("good"); liteOrm.insert(book, ConflictAlgorithm.Abort);

- 更新
```java
book.setIndex(1988);
book.setAuthor("hehe");
liteOrm.update(book);
  • 更新指定列
// 把所有书的author强制批量改为liter
HashMap<String, Object> bookIdMap = new HashMap<String, Object>();
bookIdMap.put(Book.COL_AUTHOR, "liter");
liteOrm.update(bookList, new ColumnsValue(bookIdMap), ConflictAlgorithm.Fail);
// 仅 author 这一列更新为该对象的最新值。
//liteOrm.update(bookList, new ColumnsValue(new String[]{Book.COL_AUTHOR}, null), ConflictAlgorithm.Fail);
  • 查询
List list = liteOrm.query(Book.class);
OrmLog.i(TAG, list);
  • 查找 使用WhereBuilder
List<Student> list = liteOrm.query(new QueryBuilder<Student>(Student.class)
        .where(Person.COL_NAME + " LIKE ?", new String[]{"%0"})
        .whereAppendAnd()
        .whereAppend(Person.COL_NAME + " LIKE ?", new String[]{"%s%"}));
OrmLog.i(TAG, list);
  • 查询 根据ID
Student student = liteOrm.queryById(student1.getId(), Student.class);
OrmLog.i(TAG, student);
  • 查询 任意
List<Book> books = liteOrm.query(new QueryBuilder<Book>(Book.class)
        .columns(new String[]{"id", "author", Book.COL_INDEX})
        .distinct(true)
        .whereGreaterThan("id", 0)
        .whereAppendAnd()
        .whereLessThan("id", 10000)
        .limit(6, 9)
        .appendOrderAscBy(Book.COL_INDEX));
OrmLog.i(TAG, books);
  • 删除 实体
// 删除 student-0
liteOrm.delete(student0);
  • 删除 指定数量
// 按id升序删除[2, size-1],结果:仅保留第一个和最后一个
// 最后一个参数可为null默认按 id 升序排列
liteOrm.delete(Book.class, 2, bookList.size() - 1, "id");
  • 删除 使用WhereBuilder
// 删除 student-1
liteOrm.delete(new WhereBuilder(Student.class)
        .where(Person.COL_NAME + " LIKE ?", new String[]{"%1%"})
        .and()
        .greaterThan("id", 0)
        .and()
        .lessThan("id", 10000));
  • 删除全部
// 连同其关联的classesclasses关联的其他对象一带删除
liteOrm.deleteAll(School.class);
liteOrm.deleteAll(Book.class);


// 顺带测试:连库文件一起删掉
liteOrm.deleteDatabase();
// 顺带测试:然后重建一个新库
liteOrm.openOrCreateDatabase();
// 满血复活

版本迭代

  • v1.1.0

    修改了源项目,使其可以正常使用。


开源许可证

Copyright [2022] [田梓萱]

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.