自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

HarmonyOS 數(shù)據(jù)庫系列之對象關(guān)系映射數(shù)據(jù)庫

數(shù)據(jù)庫 其他數(shù)據(jù)庫 OpenHarmony
HarmonyOS對象關(guān)系映射(Object Relational Mapping,ORM)數(shù)據(jù)庫是一款基于SQLite的數(shù)據(jù)庫框架,屏蔽了底層SQLite數(shù)據(jù)庫的SQL操作,針對實體和關(guān)系提供了增刪改查等一系列的面向?qū)ο蠼涌凇?/div>

[[421543]]

想了解更多內(nèi)容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

前言

鴻蒙提供了非常強(qiáng)大的數(shù)據(jù)庫操作功能, 前面講到了 關(guān)系型數(shù)據(jù)庫, 是基于關(guān)系模型來管理數(shù)據(jù)的數(shù)據(jù)庫。

其實鴻蒙還有一種 體驗更好,操作更方便的數(shù)據(jù)庫 ,對象關(guān)系映射數(shù)據(jù)庫, 這種數(shù)據(jù)庫的好處是 直接基于sqlite數(shù)據(jù)庫架構(gòu)的, 操作sql語句的操作更簡單,可以直接配置進(jìn)行。

其實這種配置更像做web后臺系統(tǒng)的開發(fā),一個類就是一個表,如果需要添加信息直接更新實體類就行。

簡介

先了解一下概念,概念是一切功能的使用總結(jié)。

HarmonyOS對象關(guān)系映射(Object Relational Mapping,ORM)數(shù)據(jù)庫是一款基于SQLite的數(shù)據(jù)庫框架,屏蔽了底層SQLite數(shù)據(jù)庫的SQL操作,針對實體和關(guān)系提供了增刪改查等一系列的面向?qū)ο蠼涌凇?yīng)用開發(fā)者不必再去編寫復(fù)雜的SQL語句, 以操作對象的形式來操作數(shù)據(jù)庫,提升效率的同時也能聚焦于業(yè)務(wù)開發(fā)。

在我看來 對象關(guān)系映射數(shù)據(jù)庫非常重要的 三個 組件:

  • 數(shù)據(jù)庫:被開發(fā)者用@Database注解,且繼承了OrmDatabase的類,對應(yīng)關(guān)系型數(shù)據(jù)庫。
  • 實體對象:被開發(fā)者用@Entity注解,且繼承了OrmObject的類,對應(yīng)關(guān)系型數(shù)據(jù)庫中的表。
  • 對象數(shù)據(jù)操作接口:包括數(shù)據(jù)庫操作的入口OrmContext類和謂詞接口(OrmPredicate)。

肯定還有更多的其它方面,以后繼續(xù)補(bǔ)充吧。

運作機(jī)制

運作機(jī)制 我查看了一下官網(wǎng)的說明, 說了一大堆。其實主要的還是對 關(guān)系型數(shù)據(jù)庫的擴(kuò)展:

對象關(guān)系映射數(shù)據(jù)庫操作是基于關(guān)系型數(shù)據(jù)庫操作接口完成的,實際是在關(guān)系型數(shù)據(jù)庫操作的基礎(chǔ)上又實現(xiàn)了對象關(guān)系映射等特性。

全部介紹如下:

  • 對象關(guān)系映射數(shù)據(jù)庫操作是基于關(guān)系型數(shù)據(jù)庫操作接口完成的,實際是在關(guān)系型數(shù)據(jù)庫操作的基礎(chǔ)上又實現(xiàn)了對象關(guān)系映射等特性。因此對象關(guān)系映射數(shù)據(jù)庫跟關(guān)系型數(shù)據(jù)庫一樣,都使用SQLite作為持久化引擎,底層使用的是同一套數(shù)據(jù)庫連接池和數(shù)據(jù)庫連接機(jī)制。
  • 使用對象關(guān)系映射數(shù)據(jù)庫的開發(fā)者需要先配置實體模型與關(guān)系映射文件。應(yīng)用數(shù)據(jù)管理框架提供的類生成工具會解析這些文件,生成數(shù)據(jù)庫幫助類,這樣應(yīng)用數(shù)據(jù)管理框架就能在運行時,根據(jù)開發(fā)者的配置創(chuàng)建好數(shù)據(jù)庫,并在存儲過程中自動完成對象關(guān)系映射。開發(fā)者再通過對象數(shù)據(jù)操作接口,如OrmContext接口和謂詞接口等操作持久化數(shù)據(jù)庫。
  • 對象數(shù)據(jù)操作接口提供一組基于對象映射的數(shù)據(jù)操作接口,實現(xiàn)了基于SQL的關(guān)系模型數(shù)據(jù)到對象的映射,讓用戶不需要再和復(fù)雜的 SQL語句打交道,只需簡單地操作實體對象的屬性和方法。對象數(shù)據(jù)操作接口支持對象的增刪改查操作,同時支持事務(wù)操作等。

對象關(guān)系映射數(shù)據(jù)庫運作機(jī)制:

HarmonyOS 數(shù)據(jù)庫系列之對象關(guān)系映射數(shù)據(jù)庫-鴻蒙HarmonyOS技術(shù)社區(qū) 

從上圖運行機(jī)制可以看出,對象關(guān)系型數(shù)據(jù)庫 是在關(guān)系型數(shù)據(jù)庫基礎(chǔ)上做了 一部分?jǐn)U展, 就是將數(shù)據(jù)庫的 庫和表的創(chuàng)建 給簡化了,不需要我們自己去做添加了,配置就行。

這也是數(shù)據(jù)庫的一種很好的擴(kuò)展,讓開發(fā)更簡單方便。

創(chuàng)建數(shù)據(jù)庫及其表

數(shù)據(jù)庫的創(chuàng)建可以根據(jù)自己需求,如果 在項目啟動就需要創(chuàng)建數(shù)據(jù)庫,建議在 application中執(zhí)行啟動操作。

這里我們 在 每一個 ability中 的 onStart 函數(shù)中執(zhí)行如下創(chuàng)建操作:

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

 getOrmContext 參數(shù)說明 :

1、別名

2、數(shù)據(jù)庫名

3、對象-對應(yīng)關(guān)系型數(shù)據(jù)庫。

還有一點 需要注意,最后的參數(shù)就是表的創(chuàng)建,如果要創(chuàng)建多張表,可以添加多個 實體類。

來看看如下的 對象關(guān)系:

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

@Database注解,繼承了OrmDatabase的類,對應(yīng)關(guān)系型數(shù)據(jù)庫。

數(shù)據(jù)對象:

每一個數(shù)據(jù)對象就是一個表,字段信息可以根據(jù)需求更新變化。

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

用@Entity注解,且繼承了OrmObject的類,對應(yīng)關(guān)系型數(shù)據(jù)庫中的表。

數(shù)據(jù)庫使用

在使用數(shù)據(jù)庫之前最好是整理一個 工具類,所有的操作都放在工具類中,這樣調(diào)用和擴(kuò)展都方便了。

我就對數(shù)據(jù)庫的有關(guān)操作 做了一個封裝,目前也是比較簡單的,只是做了增,刪,改,查等操作。

關(guān)系對象型數(shù)據(jù)庫的操作工具類:

  1. /** 
  2.  * Database Operations 
  3.  * 
  4.  * @since 2021-06-23 
  5.  */ 
  6. public class DatabaseUtils { 
  7.     /** 
  8.      * add card info 
  9.      * 
  10.      * @param form card object 
  11.      * @param connect data connection 
  12.      */ 
  13.     public static void insertForm(User form, OrmContext connect) { 
  14.         connect.insert(form); 
  15.         connect.flush(); 
  16.     } 
  17.  
  18.     /** 
  19.      * query database 
  20.      * 
  21.      * @param connect data connection 
  22.      * @return database 
  23.      */ 
  24.     public static List<User> queryForm(OrmContext connect){ 
  25.         // 從數(shù)據(jù)庫中獲取信息 
  26.         OrmPredicates ormPredicates = new OrmPredicates(User.class);// 搜索實例 
  27.         List<User> formList = connect.query(ormPredicates); 
  28.         if (formList.size() <= 0) { 
  29.             return formList; 
  30.         } 
  31.         for (User form : formList) { 
  32.             // 遍歷 
  33.             System.out.println("FormId = "+form.getFormId()+" = FormName"+form.getFormName()+" = Dimension"+form.getDimension()); 
  34.         } 
  35.         return formList; 
  36.     } 
  37.  
  38.     /** 
  39.      * update database 
  40.      * 
  41.      * @param connect 數(shù)據(jù)庫實體 
  42.      * @param user user 
  43.      */ 
  44.     public static void updateForms(OrmContext connect,User user) { 
  45.         // 從數(shù)據(jù)庫中獲取信息 
  46.         ValuesBucket valuesBucket = new ValuesBucket(); 
  47.         valuesBucket.putString("formName"user.getFormName()); 
  48.         valuesBucket.putInteger("dimension"user.getDimension()); 
  49.         OrmPredicates update = connect.where(User.class).equalTo("formId"user.getFormId()); 
  50.         connect.update(update, valuesBucket); 
  51.     } 
  52.  
  53.     /** 
  54.      * delete data 
  55.      * 
  56.      * @param formId form id 
  57.      * @param connect data connection 
  58.      */ 
  59.     public static void deleteFormData(long formId, OrmContext connect) { 
  60.         OrmPredicates where = connect.where(User.class); 
  61.         where.equalTo("formId", formId); // 在數(shù)據(jù)庫的“user”表中查詢formId為“”的User對象列表 
  62.         List<User> query = connect.query(where); 
  63.         if (!query.isEmpty()) { 
  64.             connect.delete(query.get(0)); 
  65.             connect.flush(); 
  66.         } 
  67.     } 

1、數(shù)據(jù)庫操作的入口OrmContext類 ,進(jìn)行數(shù)據(jù)庫操作

2、謂詞接口(OrmPredicate),進(jìn)行實例的制定(例如:條件查詢,條件刪除)

3、ValuesBucket 實例

操作使用:

創(chuàng)建一個 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”節(jié)點中添加以下配置:

  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 } // 數(shù)據(jù)庫使用必備 

可以在該類中直接創(chuàng)建數(shù)據(jù)庫和表,也可以在啟動應(yīng)用的時候創(chuàng)建,全局使用connect,

在該類中可以進(jìn)行 數(shù)據(jù)庫的調(diào)用操作,直接調(diào)用已經(jīng)封裝好的 數(shù)據(jù)庫操作工具類。

到此,有關(guān)對象關(guān)系映射數(shù)據(jù)庫 就結(jié)束了,是不是很簡單。

感悟

通過學(xué)習(xí)鴻蒙的關(guān)系型數(shù)據(jù)庫和對象關(guān)系映射數(shù)據(jù)庫發(fā)現(xiàn)鴻蒙的強(qiáng)大之處,其實在對象關(guān)系映射數(shù)據(jù)庫中都可以做到不需要寫sql語句就能完成項目的開發(fā)和使用。

鴻蒙系統(tǒng)這么強(qiáng)大肯定還有很多強(qiáng)大之處我還沒有了解到,還有很多好東西還等待我去探索,探索還在進(jìn)行中,但是這些對鴻蒙來說只是九牛一毛罷了。

想了解更多內(nèi)容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2021-09-06 10:24:12

鴻蒙HarmonyOS應(yīng)用

2021-11-11 17:36:07

鴻蒙HarmonyOS應(yīng)用

2021-09-03 15:27:17

鴻蒙HarmonyOS應(yīng)用

2009-09-14 15:37:06

LINQ映射數(shù)據(jù)庫

2011-05-19 10:29:40

對象數(shù)據(jù)庫關(guān)系數(shù)據(jù)庫

2011-04-18 13:46:24

數(shù)據(jù)庫設(shè)計

2010-09-30 09:11:01

2010-09-30 08:27:48

2011-10-11 17:07:12

數(shù)據(jù)庫Internet文件數(shù)據(jù)庫

2011-05-13 13:38:49

數(shù)據(jù)庫對象

2009-08-25 09:09:33

關(guān)系數(shù)據(jù)庫數(shù)據(jù)庫革命RDBMS

2020-12-29 11:26:22

鴻蒙HarmonyOS數(shù)據(jù)庫

2020-03-14 16:37:09

數(shù)據(jù)庫IT技術(shù)

2021-07-28 14:40:57

鴻蒙HarmonyOS應(yīng)用

2024-06-06 16:50:15

2011-07-27 08:56:32

Oracle數(shù)據(jù)庫綁定變量軟解析

2011-07-26 14:56:03

數(shù)據(jù)庫發(fā)展

2021-07-06 11:42:05

數(shù)據(jù)庫SpringSecurCAS

2011-03-15 14:54:08

NoSQL

2013-06-28 11:28:21

Facebook數(shù)據(jù)庫大數(shù)據(jù)
點贊
收藏

51CTO技術(shù)棧公眾號