日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
創(chuàng)新互聯(lián)鴻蒙OS教程:鴻蒙OS對象關系映射數(shù)據(jù)庫開發(fā)指導

場景介紹

成都創(chuàng)新互聯(lián)長期為1000+客戶提供的網站建設服務,團隊從業(yè)經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網生態(tài)環(huán)境。為天心企業(yè)提供專業(yè)的成都做網站、成都網站建設、成都外貿網站建設,天心網站改版等技術服務。擁有10年豐富建站經驗和眾多成功案例,為您定制開發(fā)。

對象關系映射數(shù)據(jù)庫適用于開發(fā)者使用的數(shù)據(jù)可以分解為一個或多個對象,且需要對數(shù)據(jù)進行增刪改查等操作,但是不希望編寫過于復雜的 SQL 語句的場景。

該對象關系映射數(shù)據(jù)庫的實現(xiàn)是基于關系型數(shù)據(jù)庫,除了數(shù)據(jù)庫版本升降級等場景外,操作對象關系映射數(shù)據(jù)庫一般不需要編寫 SQL 語句,但是仍然要求使用者對于關系型數(shù)據(jù)庫的基本概念有一定的了解。

開發(fā)能力介紹

對象關系映射數(shù)據(jù)庫目前可以支持數(shù)據(jù)庫和表的創(chuàng)建,對象數(shù)據(jù)的增刪改查、對象數(shù)據(jù)變化回調、數(shù)據(jù)庫升降級和備份等功能。

數(shù)據(jù)庫和表的創(chuàng)建

  1. 創(chuàng)建數(shù)據(jù)庫。開發(fā)者需要定義一個表示數(shù)據(jù)庫的類,繼承 OrmDatabase,再通過 @Database 注解內的 entities 屬性指定哪些數(shù)據(jù)模型類屬于這個數(shù)據(jù)庫。

屬性:

  • version:數(shù)據(jù)庫版本號。
  • entities:數(shù)據(jù)庫內包含的表。
  1. 創(chuàng)建數(shù)據(jù)表。開發(fā)者可通過創(chuàng)建一個繼承了OrmObject 并用 @Entity 注解的類,獲取數(shù)據(jù)庫實體對象,也就是表的對象。

屬性:

  • tableName:表名。
  • primaryKeys:主鍵名,一個表里只能有一個主鍵,一個主鍵可以由多個字段組成。
  • foreignKeys:外鍵列表。
  • indices:索引列表。
接口名稱 描述
@Database 被 @Database注解且繼承了 OrmDatabase 的類對應數(shù)據(jù)庫類。
@Entity 被 @Entity注解且繼承了 OrmObject 的類對應數(shù)據(jù)表類。
@Column 被 @Column 注解的變量對應數(shù)據(jù)表的字段。
@PrimaryKey 被 @PrimaryKey 注解的變量對應數(shù)據(jù)表的主鍵。
@ForeignKey 被 @ForeignKey 注解的變量對應數(shù)據(jù)表的外鍵。
@Index 被 @Index 注解的內容對應數(shù)據(jù)表索引的屬性。

數(shù)據(jù)庫的加密

對象關系映射數(shù)據(jù)庫提供數(shù)據(jù)庫加密的能力,創(chuàng)建數(shù)據(jù)庫時傳入指定密鑰、創(chuàng)建加密數(shù)據(jù)庫,后續(xù)打開加密數(shù)據(jù)庫時,需要傳入正確密鑰。

類名 接口名 描述
OrmConfig.Builder Builder setEncryptKey(byte[] encryptKey) 為數(shù)據(jù)庫配置類設置數(shù)據(jù)庫加密密鑰,創(chuàng)建或打開數(shù)據(jù)庫時傳入包含數(shù)據(jù)庫加密密鑰的配置類,即可創(chuàng)建或打開加密數(shù)據(jù)庫。

對象數(shù)據(jù)的增刪改查

通過對象數(shù)據(jù)操作接口,開發(fā)者可以對對象數(shù)據(jù)進行增刪改查操作。

類名 接口名稱 描述
OrmContext  boolean insert(T object) 添加方法。
OrmContext  boolean update(T object) 更新方法。
OrmContext  List query(OrmPredicates predicates) 查詢方法。
OrmContext  boolean delete(T object) 刪除方法。
OrmContext  OrmPredicates where(Class clz) 設置謂詞方法。

對象數(shù)據(jù)的變化觀察者**設置**

通過使用對象數(shù)據(jù)操作接口,開發(fā)者可以在某些數(shù)據(jù)上設置觀察者,接收數(shù)據(jù)變化的通知。

類名 接口名稱 描述
OrmContext void registerStoreObserver(String alias, OrmObjectObserver observer) 注冊數(shù)據(jù)庫變化回調。
OrmContext void registerContextObserver(OrmContext watchedContext, OrmObjectObserver observer) 注冊上下文變化回調。
OrmContext void registerEntityObserver(String entityName, OrmObjectObserver observer) 注冊數(shù)據(jù)庫實體變化回調。
OrmContext void registerObjectObserver(OrmObject ormObject, OrmObjectObserver observer) 注冊對象變化回調。

數(shù)據(jù)庫的升降級

通過調用數(shù)據(jù)庫升降級接口,開發(fā)者可以將數(shù)據(jù)庫切換到不同的版本。

類名 接口名稱 描述
OrmMigration public void onMigrate(int beginVersion, int endVersion) 數(shù)據(jù)庫版本升降級接口。

數(shù)據(jù)庫的備份恢復

開發(fā)者可以將當前數(shù)據(jù)庫的數(shù)據(jù)進行備份,在必要的時候進行數(shù)據(jù)恢復。

類名 接口名稱 描述
OrmContext boolean backup(String destPath) 數(shù)據(jù)庫備份接口。
OrmContext boolean restore(String srcPath); 數(shù)據(jù)庫恢復備份接口。

開發(fā)步驟

  1. 配置“build.gradle”文件。
  • 如果使用注解處理器的模塊為“com.huawei.ohos.hap”模塊,則需要在模塊的“build.gradle”文件的“ohos”節(jié)點中添加以下配置:
     compileOptions{            annotationEnabled true    } 

  • 如果使用注解處理器的模塊為“com.huawei.ohos.library”模塊,則需要在模塊的“build.gradle”文件的“dependencies”節(jié)點中配置注解處理器。查看“orm_annotations_java.jar”、“orm_annotations_processor_java.jar” 、“javapoet_java.jar”

這3個 jar 包在 HUAWEI SDK 中的對應目錄,并將目錄的這三個 jar 包導進來。

     dependencies {
         compile files("orm_annotations_java.jar 的路徑","orm_annotations_processor_java.jar 的路徑","javapoet_java.jar 的路徑")
         annotationProcessor files("orm_annotations_java.jar 的路徑","orm_annotations_processor_java.ja 的路徑","javapoet_java.jar 的路徑")
     }

  • 如果使用注解處理器的模塊為“java-library”模塊,則需要在模塊的“build.gradle”文件的“dependencies”節(jié)點中配置注解處理器,并導入“ohos.jar”。
     dependencies {
         compile files("ohos.jar 的路徑","orm_annotations_java.jar 的路徑","orm_annotations_processor_java.jar 的路徑","javapoet_java.jar 的路徑")     
         annotationProcessor files("orm_annotations_java.jar 的路徑","orm_annotations_processor_java.jar 的路徑","javapoet_java.jar 的路徑")
     }

  1. 構造數(shù)據(jù)庫,即創(chuàng)建數(shù)據(jù)庫類并配置對應的屬性。

例如,定義了一個數(shù)據(jù)庫類 BookStore.java,數(shù)據(jù)庫包含了“User”,"Book","AllDataType"三個表,版本號為 “1”。數(shù)據(jù)庫類的 getVersion 方法和 getHelper 方法不需要實現(xiàn),直接將數(shù)據(jù)庫類設為虛類即可。

   @Database(entities = {User.class, Book.class, AllDataType.class}, version = 1) 
   public abstract class BookStore extends OrmDatabase { 
   }

  1. 構造數(shù)據(jù)表,即創(chuàng)建數(shù)據(jù)庫實體類并配置對應的屬性(如對應表的主鍵,外鍵等)。數(shù)據(jù)表必須與其所在的數(shù)據(jù)庫在同一個模塊中。

例如,定義了一個實體類 User.java,對應數(shù)據(jù)庫內的表名為“user”;indices 為“firstName”和“l(fā)astName”兩個字段建立了復合索引“name_index”,并且索引值是唯一的;“ignoreColumns”表示該字段不需要添加到“user”表的屬性中。

   @Entity(tableName = "user", ignoredColumns = {"ignoreColumn1", "ignoreColumn2"},
       indices = {@Index(value = {"firstName", "lastName"}, name = "name_index", unique = true)}) 
   public class User extends OrmObject { 
       // 此處將userId設為了自增的主鍵。注意只有在數(shù)據(jù)類型為包裝類型時,自增主鍵才能生效。
       @PrimaryKey(autoGenerate = true) 
       private Integer userId;   
       private String firstName;   
       private String lastName;   
       private int age;   
       private double balance;   
       private int ignoreColumn1; 
       private int ignoreColumn2; 

    
       // 開發(fā)者自行添加字段的getter和setter 方法。 
   }

說明

示例中的 getter & setter 的方法名為小駝峰格式,除了手寫方法,IDE 中包含自動生成 getter 和setter 方法的 Generate 插件。

  • 當變量名的格式類似“firstName”時,getter 和 setter 方法名應為“getFirstName”和“setFirstName”。
  • 當變量名的格式類似“mAge”,即第一個字母小寫,第二個字母大寫的格式時,getter 和 setter 方法名應為“getmAge”和“setmAge”。
  • 當變量名格式類似“x”,即只有一個字母時, getter 和 setter 方法名應為“getX”和“setX”。

變量為 boolean 類型時,上述規(guī)則仍然成立,即“isFirstName”,“ismAge”,“isX”。

  1. 使用對象數(shù)據(jù)操作接口 OrmContext 創(chuàng)建數(shù)據(jù)庫。

例如,通過對象數(shù)據(jù)操作接口 OrmContext,創(chuàng)建一個別名為“BookStore”,數(shù)據(jù)庫文件名為“BookStore.db”的數(shù)據(jù)庫。如果數(shù)據(jù)庫已經存在,執(zhí)行以下代碼不會重復創(chuàng)建。通過 context.getDatabaseDir()可以獲取創(chuàng)建的數(shù)據(jù)庫文件所在的目錄。

   DatabaseHelper helper = new DatabaseHelper(context); // context入參類型為ohos.app.Context,注意不要使用slice.getContext()來獲取context,請直接傳入slice,否則會出現(xiàn)找不到類的報錯。
   OrmContext context = helper.getOrmContext("BookStore", "BookStore.db", BookStore.class); 

  1. (可選)數(shù)據(jù)庫升降級。如果開發(fā)者有多個版本的數(shù)據(jù)庫,通過設置數(shù)據(jù)庫版本遷移類可以實現(xiàn)數(shù)據(jù)庫版本升降級。

數(shù)據(jù)庫版本升降級的調用示例如下。其中 BookStoreUpgrade 類也是一個繼承了 OrmDatabase 的數(shù)據(jù)庫類,與 BookStore 類的區(qū)別在于配置的版本號不同。

   OrmContext context = helper.getOrmContext("BookStore", "BookStore.db", BookStoreUpgrade.class, new TestOrmMigration32(), new TestOrmMigration23(), new TestOrmMigration12(), new TestOrmMigration21());

TestOrmMigration12 的實現(xiàn)示例如下:

   private static class TestOrmMigration12 extends OrmMigration {
       // 此處用于配置數(shù)據(jù)庫版本遷移的開始版本和結束版本,super(startVersion, endVersion)即數(shù)據(jù)庫版本號從1升到2。
       public TestOrmMigration12() {super(1, 2); }
       @Override    
       public void onMigrate(RdbStore store) {        
           store.executeSql("ALTER TABLE `Book` ADD COLUMN `addColumn12` INTEGER");   
       }
   }

說明

數(shù)據(jù)庫版本遷移類的起始版本和結束版本必須是連續(xù)的。

  • 如果 BookStoreUpgrad e類的版本號配置為“2”,而當前 BookStore.db 的實際版本號為“1”時,TestOrmMigration12 類的 onMigrate 方法會自動被調用。開發(fā)者可在 onMigrate 方法中填寫升級需要執(zhí)行的 sql 語句。
  • 如果 BookStoreUpgrade 的類版本號配置為“3”,而當前 BookStore.db 的實際版本號為“1”時,TestOrmMigration12, TestOrmMigration23 的 onMigrate 方法會自動被調用完成數(shù)據(jù)庫升級。數(shù)據(jù)庫版本降級同理。
  1. 使用對象數(shù)據(jù)操作接口 OrmContext 對數(shù)據(jù)庫進行增刪改查、注冊觀察者、備份數(shù)據(jù)庫等。
  • 增加數(shù)據(jù)。例如,在數(shù)據(jù)庫的名為“user”的表中,新建一個 User 對象并設置對象的屬性。直接傳入 OrmObject 對象的增加接口,只有在 flush() 接口被調用后才會持久化到數(shù)據(jù)庫中。
     User user = new User(); 
     user.setFirstName("Zhang"); 
     user.setLastName("San"); 
     user.setAge(29); 
     user.setBalance(100.51); 
     boolean isSuccessed = context.insert(user); 
     isSuccessed = context.flush(); 

  • 更新或刪除數(shù)據(jù),分為兩種情況:
  • 通過直接傳入 OrmObject 對象的接口來更新數(shù)據(jù),需要先從表中查到需要更新的 User 對象列表,然后修改對象的值,再調用更新接口持久化到數(shù)據(jù)庫中。刪除數(shù)據(jù)與更新數(shù)據(jù)的方法類似,只是不需要更新對象的值。

例如,更新“user”表中age為“29”的行,需要先查找“user”表中對應數(shù)據(jù),得到一個 User 的列表。然后選擇列表中需要更新的 User 對象(如第 0 個對象),設置需要更新的值,并調用 update 接口傳入被更新的 User 對象。最后調用 flush 接口持久化到數(shù)據(jù)庫中。

       // 更新數(shù)據(jù)
       OrmPredicates predicates = context.where(User.class);
       predicates.equalTo("age",29);
       List users = context.query(predicates);
       User user = users.get(0);
       user.setFirstName("Li");
       context.update(user);
       context.flush();

        
       // 刪除數(shù)據(jù)
       OrmPredicates predicates = context.where(User.class);
       predicates.equalTo("age",29);
       List users = context.query(predicates);
       User user = users.get(0);
       context.delete(user);
       context.flush();

  • 通過傳入謂詞的接口來更新和刪除數(shù)據(jù),方法與 OrmObject 對象的接口類似,只是無需 flush 就可以持久化到數(shù)據(jù)庫中。
       ValuesBucket valuesBucket = new ValuesBucket();
       valuesBucket.putInteger("age", 31);
       valuesBucket.putString("firstName", "ZhangU");
       valuesBucket.putString("lastName", "SanU");
       valuesBucket.putDouble("balance", 300.51);
       OrmPredicates update = context.where(User.class).equalTo("userId", 1);
       context.update(update, valuesBucket);

  • 查詢數(shù)據(jù)。在數(shù)據(jù)庫的“user”表中查詢lastName為“San”的 User 對象列表,示例如下:
     OrmPredicates query = context.where(User.class).equalTo("lastName", "San"); 
     List users = context.query(query);

  • 注冊觀察者。
     // 定義一個觀察者類。
     private class MyOrmObjectObserver implements OrmObjectObserver {
         @Override    
         public void onChange(OrmContext changeContext,AllChangeToTarget subAllChange {
             // 用戶可以在此處定義觀察者行為
         }
     }

      
     // 調用registerEntityObserver方法注冊一個觀察者observer。
     MyOrmObjectObserver observer = new MyOrmObjectObserver();
     context.registerEntityObserver("user", observer);

      
     // 當以下方法被調用,并flush成功時,觀察者observer的onChange方法會被觸發(fā)。其中,方法的入參必須為User類的對象。
     public  boolean insert(T object)
     public  boolean update(T object)
     public  boolean delete(T object)

  • 備份數(shù)據(jù)庫。其中原數(shù)據(jù)庫名為“OrmBackUp.db”,備份數(shù)據(jù)庫名為“OrmBackup001.db”。
     OrmContext context = helper.getObjectContext("OrmBackup", "OrmBackup.db", BookStore.class);
     context.backup("OrmBackup001.db");
     context.close();

  1. 刪除數(shù)據(jù)庫,例如刪除 OrmBackup.db。
   helper.deleteRdbStore("OrmBackup.db");

分享標題:創(chuàng)新互聯(lián)鴻蒙OS教程:鴻蒙OS對象關系映射數(shù)據(jù)庫開發(fā)指導
網頁URL:http://www.5511xx.com/article/djgpcsd.html