介绍
dataORM4cj 是一个基于ORM的仓颉版终端sqlite数据库框架
特性
- 支持注解开发
- 支持标准数据库套件
- 支持Long,object包装类型
- 支持查询,删除,修改,新增功能
- 支持事务功能
- 支持索引注解 @Index, @Unique
- 支持基础属性注解 @Entity, @Id,@NotNull,@Transient
- 支持DaoMaster,DaoSessio,xxxDao实现类生成
软件架构
源码目录
├─AppScope
├─doc
├─entry // UI模块
│ └─src
│ └─main
│ ├─cangjie // UI测试代码
│ │ └─src
│ └─resources // UI测试资源
├─greendao_core // 核心代码模块
│ └─src
│ └─main
│ ├─cangjie // 核心代码
│ │ └─src
│ └─resources
├─greendao_annotation // 注解生成器模块
│ └─src
│ └─main
│ ├─cangjie // 注解代码
│ │ └─src
│ └─generator // 生成器代码
│ └─src
└─hvigor // 构建工具目录
接口说明
主要类和函数接口说明详见 API
使用说明
编译运行
1、使用 DevEco Studio NEXT Developer Beta2(Build Version: 5.0.3.500) 构建工程项目, 生成 hap 包,端测请使用镜像 CangjieUIB100 版本的mate60手机
功能示例
用例代码在entry目录下 功能示例
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2024-2024. All rights resvered.
*/
package ohos_app_cangjie_entry
import ohos.base.*
import ohos.ability.*
import ohos.window.*
import ohos.component.*
import ohos.state_manage.*
import ohos.state_macro_manage.*
import ohos.router.*
import ohos.prompt_action.PromptAction
import ohos.relational_store.*
import ohos.state_macro_manage.Entry
import ohos.state_macro_manage.Component
import ohos.state_macro_manage.State
import ohos.state_macro_manage.r
var userDao: UserDao = unsafe { zeroValue<UserDao>() }
var studentDao: StudentDao = unsafe { zeroValue<StudentDao>() }
var teacherDao: TeacherDao = unsafe { zeroValue<TeacherDao>() }
var personDao: PersonDao = unsafe { zeroValue<PersonDao>() }
@Entry
@Component
class MyView {
protected override func onAppear() {
let db = getRdbStore(getStageContext(getGlobalAbilityContext()), StoreConfig("RdbTest.db", SecurityLevel.S1))
var daoMaster: DaoMaster = DaoMaster(db)
DaoMaster.dropAllTables(daoMaster,true)
DaoMaster.createAllTables(daoMaster, true)
var daoSession: DaoSession = daoMaster.newSession()
userDao = daoSession.getUserDao()
studentDao = daoSession.getStudentDao()
teacherDao = daoSession.getTeacherDao()
personDao = daoSession.getPersonDao()
let arr = [
User(Option<Int64>.None, 1, "lisi", "111"),
User(Option<Int64>.None, 2, "zhangsan", "222"),
User(Option<Int64>.None, 3, "wangwu", "333"),
User(Option<Int64>.None, 4, "zhaoliu", "444"),
User(Option<Int64>.None, 5, "tianqi", "555")
]
for (item in arr) {
userDao.insertOrReplace(item)
}
let arr1 = [
Student("1", "lisi", "111"),
Student("2", "zhangsan", "222"),
Student("3", "wangwu", "333"),
Student("4", "zhaoliu", "444"),
Student("5", "tianqi", "555")
]
for (item in arr1) {
studentDao.insertOrReplace(item)
}
let arr2 = [
Teacher(Option<Int64>.None,"zhang san", "西安市雁塔区科技二路", 28,165,110,96.326),
Teacher(Option<Int64>.None,"li四si", "西安市雁塔区科技二路", 28,163,110,98.309),
Teacher(Option<Int64>.None,"王腾", "西安市雁塔区科技五路", 29,185,170,94.46)
]
for (item in arr2) {
teacherDao.insertOrReplace(item)
}
}
let scroller = Scroller()
func build() {
// Row {
Scroll(this.scroller){
Column {
Text("--Greendao 简单用例--").height(80)
Divider().color(0x000000).strokeWidth(1).margin(top: 10, bottom: 10)
Row() {
Button("查询").onClick {
evt => Router.push(url: "PageQuery")
}.fontSize(20).height(40)
Button("新增").onClick {
evt => Router.push(url: "PageAdd")
}.fontSize(20).height(40)
Button("事务修改").onClick {
evt => Router.push(url: "PageUpdateInTx")
}.fontSize(20).height(40)
Button("新增").onClick {
evt => Router.push(url: "PageObjectAdd")
}.fontSize(20).height(40)
}
Text("--Greendao HLT用例--").height(80)
Divider().color(0x000000).strokeWidth(1).margin(top: 10, bottom: 10)
Button("HLT用例 - L0")
.height(40)
.margin(top: 5, bottom: 5)
.fontSize(16)
.shape(ShapeType.Capsule)
.onClick {Router.push(url: "IndexL0")}
Button("HLT用例 - L1")
.height(40)
.margin(top: 5, bottom: 5)
.fontSize(16)
.shape(ShapeType.Capsule)
.onClick {Router.push(url: "IndexL1")}
Button("HLT用例 - L2")
.height(40)
.margin(top: 5, bottom: 5)
.fontSize(16)
.shape(ShapeType.Capsule)
.onClick {Router.push(url: "IndexL2")}
//HLT
// Button("DeleteTest01").onClick {Router.push(url: "DeleteTest01")}
// Button("AddTest01").onClick {Router.push(url: "AddTest01")}
// Button("AddTest02").onClick {Router.push(url: "AddTest02")}
// Button("QueryTest01").onClick {Router.push(url: "QueryTest01")}
// Button("QueryTest02").onClick {Router.push(url: "QueryTest02")}
// Button("QueryTest03").onClick {Router.push(url: "QueryTest03")}
// Button("UpdateTest01").onClick {Router.push(url: "UpdateTest01")}
}.width(100.percent).margin(top: 5)
}
// }
}
}
写在最后
如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
- 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
- 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。
- 想要获取更多完整鸿蒙最新学习资源,请移步前往小编:
gitee.com/MNxiaona/733GH