成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

HarmonyOS 數據庫系列之對象關系映射數據庫

數據庫 其他數據庫 OpenHarmony
HarmonyOS對象關系映射(Object Relational Mapping,ORM)數據庫是一款基于SQLite的數據庫框架,屏蔽了底層SQLite數據庫的SQL操作,針對實體和關系提供了增刪改查等一系列的面向對象接口。

[[421543]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

前言

鴻蒙提供了非常強大的數據庫操作功能, 前面講到了 關系型數據庫, 是基于關系模型來管理數據的數據庫。

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

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

簡介

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

HarmonyOS對象關系映射(Object Relational Mapping,ORM)數據庫是一款基于SQLite的數據庫框架,屏蔽了底層SQLite數據庫的SQL操作,針對實體和關系提供了增刪改查等一系列的面向對象接口。應用開發者不必再去編寫復雜的SQL語句, 以操作對象的形式來操作數據庫,提升效率的同時也能聚焦于業務開發。

在我看來 對象關系映射數據庫非常重要的 三個 組件:

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

肯定還有更多的其它方面,以后繼續補充吧。

運作機制

運作機制 我查看了一下官網的說明, 說了一大堆。其實主要的還是對 關系型數據庫的擴展:

對象關系映射數據庫操作是基于關系型數據庫操作接口完成的,實際是在關系型數據庫操作的基礎上又實現了對象關系映射等特性。

全部介紹如下:

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

對象關系映射數據庫運作機制:

HarmonyOS 數據庫系列之對象關系映射數據庫-鴻蒙HarmonyOS技術社區 

從上圖運行機制可以看出,對象關系型數據庫 是在關系型數據庫基礎上做了 一部分擴展, 就是將數據庫的 庫和表的創建 給簡化了,不需要我們自己去做添加了,配置就行。

這也是數據庫的一種很好的擴展,讓開發更簡單方便。

創建數據庫及其表

數據庫的創建可以根據自己需求,如果 在項目啟動就需要創建數據庫,建議在 application中執行啟動操作。

這里我們 在 每一個 ability中 的 onStart 函數中執行如下創建操作:

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

 getOrmContext 參數說明 :

1、別名

2、數據庫名

3、對象-對應關系型數據庫。

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

來看看如下的 對象關系:

  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的類,對應關系型數據庫。

數據對象:

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

  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的類,對應關系型數據庫中的表。

數據庫使用

在使用數據庫之前最好是整理一個 工具類,所有的操作都放在工具類中,這樣調用和擴展都方便了。

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

關系對象型數據庫的操作工具類:

  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.         // 從數據庫中獲取信息 
  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 數據庫實體 
  42.      * @param user user 
  43.      */ 
  44.     public static void updateForms(OrmContext connect,User user) { 
  45.         // 從數據庫中獲取信息 
  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); // 在數據庫的“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、數據庫操作的入口OrmContext類 ,進行數據庫操作

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

3、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

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2021-09-06 10:24:12

鴻蒙HarmonyOS應用

2021-11-11 17:36:07

鴻蒙HarmonyOS應用

2021-09-03 15:27:17

鴻蒙HarmonyOS應用

2009-09-14 15:37:06

LINQ映射數據庫

2011-04-18 13:46:24

數據庫設計

2011-10-11 17:07:12

數據庫Internet文件數據庫

2010-09-30 09:11:01

2010-09-30 08:27:48

2009-08-25 09:09:33

關系數據庫數據庫革命RDBMS

2011-05-19 10:29:40

對象數據庫關系數據庫

2020-12-29 11:26:22

鴻蒙HarmonyOS數據庫

2011-05-13 13:38:49

數據庫對象

2020-03-14 16:37:09

數據庫IT技術

2011-07-27 08:56:32

Oracle數據庫綁定變量軟解析

2024-06-06 16:50:15

2021-05-24 09:08:50

數據庫工具技術

2011-09-23 09:09:38

數據庫遷移

2021-07-28 14:40:57

鴻蒙HarmonyOS應用

2010-07-27 09:45:35

DB2數據庫設計

2011-03-15 14:54:08

NoSQL
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99热精品在线 | 国产日韩欧美综合 | 澳门永久av免费网站 | 久草在线青青草 | 国产99热在线 | 成人欧美一区二区三区黑人孕妇 | 国产精品久久久久久久岛一牛影视 | 日韩一区精品 | 国产精品一区二区三区99 | 国产福利视频网站 | 91国内外精品自在线播放 | 日韩欧美国产精品一区二区三区 | 天堂网中文字幕在线观看 | 亚洲精品久久久久久首妖 | 精品国产一区二区三区性色 | 国产成人精品999在线观看 | 亚洲一区二区在线视频 | av一级久久 | 久久午夜精品 | 91精品久久久久久久 | 二区av| 色视频成人在线观看免 | 午夜久久久久久久久久一区二区 | 91xxx在线观看 | 天天操天天插 | 免费成人高清在线视频 | 欧美精品久久久 | 成人在线观看中文字幕 | 国产福利在线小视频 | 欧美综合在线观看 | 亚洲高清三级 | 成人免费淫片aa视频免费 | 免费观看a级毛片在线播放 黄网站免费入口 | 一区二区福利视频 | 欧美成视频 | 久久久久久久久蜜桃 | 久久久夜色精品亚洲 | 国产91丝袜在线熟 | 亚洲性视频网站 | 成人免费在线播放视频 | 久久久一区二区三区 |