偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

[[421543]]

想了解更多內(nèi)容,請(qǐng)?jiān)L問:

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

https://harmonyos.51cto.com

前言

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

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

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

簡(jiǎn)介

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

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

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

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

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

運(yùn)作機(jī)制

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

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

全部介紹如下:

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

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

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

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

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

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

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

這里我們 在 每一個(gè) 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、對(duì)象-對(duì)應(yīng)關(guān)系型數(shù)據(jù)庫。

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

來看看如下的 對(duì)象關(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的類,對(duì)應(yīng)關(guān)系型數(shù)據(jù)庫。

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

每一個(gè)數(shù)據(jù)對(duì)象就是一個(gè)表,字段信息可以根據(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的類,對(duì)應(yīng)關(guān)系型數(shù)據(jù)庫中的表。

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

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

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

關(guān)系對(duì)象型數(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);// 搜索實(shí)例 
  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ù)庫實(shí)體 
  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對(duì)象列表 
  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)行實(shí)例的制定(例如:條件查詢,條件刪除)

3、ValuesBucket 實(shí)例

操作使用:

創(chuàng)建一個(gè) 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.         // 存儲(chǔ)卡片信息 
  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é)點(diǎn)中添加以下配置:

  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ù)庫和表,也可以在啟動(dòng)應(yīng)用的時(shí)候創(chuàng)建,全局使用connect,

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

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

感悟

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

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

想了解更多內(nèi)容,請(qǐng)?jiān)L問:

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-04-18 13:46:24

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

2010-09-30 08:27:48

2010-09-30 09:11:01

2011-05-19 10:29:40

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

2011-05-13 13:38:49

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

2011-10-11 17:07:12

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

2020-12-29 11:26:22

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

2009-08-25 09:09:33

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

2020-03-14 16:37:09

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

2024-06-06 16:50:15

2021-07-28 14:40:57

鴻蒙HarmonyOS應(yīng)用

2011-07-26 14:56:03

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

2021-07-06 11:42:05

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

2011-07-27 08:56:32

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

2021-05-24 09:08:50

數(shù)據(jù)庫工具技術(shù)

2011-09-23 09:09:38

數(shù)據(jù)庫遷移
點(diǎn)贊
收藏

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