文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

HarmonyOS 数据库系列之对象关系映射数据库

2024-12-14 01:06

关注

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

前言

鸿蒙提供了非常强大的数据库操作功能, 前面讲到了 关系型数据库, 是基于关系模型来管理数据的数据库。

其实鸿蒙还有一种 体验更好,操作更方便的数据库 ,对象关系映射数据库, 这种数据库的好处是 直接基于sqlite数据库架构的, 操作sql语句的操作更简单,可以直接配置进行。

其实这种配置更像做web后台系统的开发,一个类就是一个表,如果需要添加信息直接更新实体类就行。

简介

先了解一下概念,概念是一切功能的使用总结。

HarmonyOS对象关系映射(Object Relational Mapping,ORM)数据库是一款基于SQLite的数据库框架,屏蔽了底层SQLite数据库的SQL操作,针对实体和关系提供了增删改查等一系列的面向对象接口。应用开发者不必再去编写复杂的SQL语句, 以操作对象的形式来操作数据库,提升效率的同时也能聚焦于业务开发。

在我看来 对象关系映射数据库非常重要的 三个 组件:

肯定还有更多的其它方面,以后继续补充吧。

运作机制

运作机制 我查看了一下官网的说明, 说了一大堆。其实主要的还是对 关系型数据库的扩展:

对象关系映射数据库操作是基于关系型数据库操作接口完成的,实际是在关系型数据库操作的基础上又实现了对象关系映射等特性。

全部介绍如下:

对象关系映射数据库运作机制:

 

从上图运行机制可以看出,对象关系型数据库 是在关系型数据库基础上做了 一部分扩展, 就是将数据库的 库和表的创建 给简化了,不需要我们自己去做添加了,配置就行。

这也是数据库的一种很好的扩展,让开发更简单方便。

创建数据库及其表

数据库的创建可以根据自己需求,如果 在项目启动就需要创建数据库,建议在 application中执行启动操作。

这里我们 在 每一个 ability中 的 onStart 函数中执行如下创建操作:

  1. DatabaseHelper helper = new DatabaseHelper(this); 
  2. OrmContext connect = helper.getOrmContext("UserDatabase""UserDatabase.db", UserDatabase.class); 

 getOrmContext 参数说明 :

别名

数据库名

对象-对应关系型数据库。

还有一点 需要注意,最后的参数就是表的创建,如果要创建多张表,可以添加多个 实体类。

来看看如下的 对象关系:

  1. package com.hadiidbouk.databasemanager.database.object; 
  2. import ohos.data.orm.OrmDatabase; 
  3. import ohos.data.orm.annotation.Database
  4.  
  5. @Database
  6.         entities = {User.class}, 
  7.         version = 1) 
  8. public abstract class UserDatabase extends OrmDatabase { } 

@Database注解,继承了OrmDatabase的类,对应关系型数据库。

数据对象:

每一个数据对象就是一个表,字段信息可以根据需求更新变化。

  1.  
  2. @Entity(tableName = "user"
  3. public class User extends OrmObject { 
  4.     @PrimaryKey() 
  5.     private Long formId; 
  6.     private String formName; 
  7.     private Integer dimension; 
  8.  
  9.     public User(Long formId, String formName, Integer dimension) { 
  10.         this.formId = formId; 
  11.         this.formName = formName; 
  12.         this.dimension = dimension; 
  13.     } 
  14.  
  15.     public User() { } 
  16.  
  17.     public Integer getDimension() { 
  18.         return dimension; 
  19.     } 
  20.  
  21.     public void setDimension(Integer dimension) { 
  22.         this.dimension = dimension; 
  23.     } 
  24.  
  25.     public Long getFormId() { 
  26.         return formId; 
  27.     } 
  28.  
  29.     public void setFormId(Long formId) { 
  30.         this.formId = formId; 
  31.     } 
  32.  
  33.     public String getFormName() { 
  34.         return formName; 
  35.     } 
  36.  
  37.     public void setFormName(String formName) { 
  38.         this.formName = formName; 
  39.     } 

用@Entity注解,且继承了OrmObject的类,对应关系型数据库中的表。

数据库使用

在使用数据库之前最好是整理一个 工具类,所有的操作都放在工具类中,这样调用和扩展都方便了。

我就对数据库的有关操作 做了一个封装,目前也是比较简单的,只是做了增,删,改,查等操作。

关系对象型数据库的操作工具类:

  1.  
  2. public class DatabaseUtils { 
  3.      
  4.     public static void insertForm(User form, OrmContext connect) { 
  5.         connect.insert(form); 
  6.         connect.flush(); 
  7.     } 
  8.  
  9.      
  10.     public static List<User> queryForm(OrmContext connect){ 
  11.         // 从数据库中获取信息 
  12.         OrmPredicates ormPredicates = new OrmPredicates(User.class);// 搜索实例 
  13.         List<User> formList = connect.query(ormPredicates); 
  14.         if (formList.size() <= 0) { 
  15.             return formList; 
  16.         } 
  17.         for (User form : formList) { 
  18.             // 遍历 
  19.             System.out.println("FormId = "+form.getFormId()+" = FormName"+form.getFormName()+" = Dimension"+form.getDimension()); 
  20.         } 
  21.         return formList; 
  22.     } 
  23.  
  24.      
  25.     public static void updateForms(OrmContext connect,User user) { 
  26.         // 从数据库中获取信息 
  27.         ValuesBucket valuesBucket = new ValuesBucket(); 
  28.         valuesBucket.putString("formName"user.getFormName()); 
  29.         valuesBucket.putInteger("dimension"user.getDimension()); 
  30.         OrmPredicates update = connect.where(User.class).equalTo("formId"user.getFormId()); 
  31.         connect.update(update, valuesBucket); 
  32.     } 
  33.  
  34.      
  35.     public static void deleteFormData(long formId, OrmContext connect) { 
  36.         OrmPredicates where = connect.where(User.class); 
  37.         where.equalTo("formId", formId); // 在数据库的“user”表中查询formId为“”的User对象列表 
  38.         List<User> query = connect.query(where); 
  39.         if (!query.isEmpty()) { 
  40.             connect.delete(query.get(0)); 
  41.             connect.flush(); 
  42.         } 
  43.     } 

数据库操作的入口OrmContext类 ,进行数据库操作

谓词接口(OrmPredicate),进行实例的制定(例如:条件查询,条件删除)

ValuesBucket 实例

操作使用:

创建一个 ability,该类是需求操作界面类。

  1. public class DatabaseObjectAbility extends Ability implements Component.ClickedListener { 
  2.     private DatabaseHelper helper = new DatabaseHelper(this); 
  3.     private OrmContext connect
  4.  
  5.     @Override 
  6.     public void onStart(Intent intent) { 
  7.         super.onStart(intent); 
  8.         super.setUIContent(ResourceTable.Layout_ability_database_object); 
  9.         connect = helper.getOrmContext("UserDatabase""UserDatabase.db", UserDatabase.class); 
  10.         findComponentById(ResourceTable.Id_xinzeng_db).setClickedListener(this); 
  11.         findComponentById(ResourceTable.Id_chaxun_db).setClickedListener(this); 
  12.         findComponentById(ResourceTable.Id_xiugai_db).setClickedListener(this); 
  13.         findComponentById(ResourceTable.Id_shagnchu_db).setClickedListener(this); 
  14.     } 
  15.  
  16.     @Override 
  17.     public void onClick(Component component) { 
  18.         switch (component.getId()){ 
  19.             case ResourceTable.Id_xinzeng_db: 
  20.                 insertDB(); 
  21.                 break; 
  22.             case ResourceTable.Id_chaxun_db: 
  23.                 DatabaseUtils.queryForm(connect); 
  24.                 break; 
  25.             case ResourceTable.Id_xiugai_db: 
  26.                 User form = new User(100l, "陈建朋", 101); 
  27.                 DatabaseUtils.updateForms(connect,form); 
  28.                 break; 
  29.             case ResourceTable.Id_shagnchu_db: 
  30.                 DatabaseUtils.deleteFormData(100l,connect); 
  31.                 break; 
  32.             default
  33.         } 
  34.     } 
  35.     private void insertDB(){ 
  36.         // 存储卡片信息 
  37.         User form = new User(100l, "陈建朋", 101); 
  38.         try { 
  39.             DatabaseUtils.insertForm(form, connect); 
  40.         } catch (Exception e) { 
  41.             DatabaseUtils.deleteFormData(form.getFormId(), connect); 
  42.         } 
  43.     } 

注意:如果使用注解处理器的模块为“com.huawei.ohos.hap”模块,则需要在模块的“build.gradle”文件的“ohos”节点中添加以下配置:

  1. ohos { 
  2.    compileSdkVersion 5 
  3.    defaultConfig { 
  4.        compatibleSdkVersion 5 
  5.    } 
  6.    buildTypes { 
  7.        release { 
  8.            proguardOpt { 
  9.                proguardEnabled false 
  10.                rulesFiles 'proguard-rules.pro' 
  11.            } 
  12.        } 
  13.    } 
  14.    compileOptions { annotationEnabled true } // 数据库使用必备 

可以在该类中直接创建数据库和表,也可以在启动应用的时候创建,全局使用connect,

在该类中可以进行 数据库的调用操作,直接调用已经封装好的 数据库操作工具类。

到此,有关对象关系映射数据库 就结束了,是不是很简单。

感悟

通过学习鸿蒙的关系型数据库和对象关系映射数据库发现鸿蒙的强大之处,其实在对象关系映射数据库中都可以做到不需要写sql语句就能完成项目的开发和使用。

鸿蒙系统这么强大肯定还有很多强大之处我还没有了解到,还有很多好东西还等待我去探索,探索还在进行中,但是这些对鸿蒙来说只是九牛一毛罢了。

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

 

来源:鸿蒙社区内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯