当前位置: 首页 > 科技观察

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

时间:2023-03-13 03:15:04 科技观察

更多信息请访问:HarmonyOS技术社区https://harmonyos.51cto.com前言Harmonyos提供了非常强大的数据库操作功能。前面提到的关系数据库是一种基于关系模型来管理数据的数据库。其实鸿蒙还有一个体验更好、操作更方便的数据库——对象关系映射数据库。这个数据库的优点是直接基于sqlite数据库架构,sql语句的操作更简单,可以直接配置。其实这个配置更像是开发一个web后台系统。一个类就是一张表。如果需要添加信息,直接更新实体类即可。Introduction首先理解概念,概念是对所有函数使用的总结。HarmonyOS对象关系映射(ObjectRelationalMapping,ORM)数据库是基于SQLite的数据库框架,屏蔽了底层SQLite数据库的SQL操作,为对象提供增删改查等一系列面向对象的接口实体和关系。应用开发者不再需要编写复杂的SQL语句,以操作对象的形式对数据库进行操作,可以在提高效率的同时专注于业务开发。在我看来,对象-关系映射数据库有3个非常重要的组成部分:Database:由开发者用@Database注解,继承OrmDatabase类,对应关系数据库。实体对象:由开发者用@Entity注解,继承OrmObject类,对应关系数据库中的表。对象数据操作接口:包括数据库操作的入口OrmContext类和谓词接口(OrmPredicate)。其他方面肯定更多,后面会继续补充。OperationMechanism运行机制我查看了官网的描述,说了一大堆。其实主要是关系数据库的扩展:基于关系数据库操作接口完成对象-关系映射数据库操作。实际上,对象关系映射等特性都是在关系数据库操作的基础上实现的。整体介绍如下:基于关系数据库操作接口完成对象-关系映射数据库操作,对象-关系映射等特性实际上是在关系数据库操作的基础上实现的。因此,对象-关系映射数据库和关系型数据库一样,使用SQLite作为持久化引擎,底层使用同一套数据库连接池和数据库连接机制。使用对象关系映射数据库的开发人员需要首先配置实体模型和关系映射文件。应用数据管理框架提供的类生成工具会解析这些文件并生成数据库帮助类,以便应用数据管理框架在运行时根据开发者的配置创建数据库,并自动完成数据库中的对象-关系映射。存储过程。开发者再通过对象数据操作接口,如OrmContext接口,谓词接口等操作持久化数据库。对象数据操作接口提供了一套基于对象映射的数据操作接口,实现了基于SQL的关系模型数据到对象的映射,让用户不再需要处理复杂的SQL语句,只需要简单的操作实体对象的属性和属性。方法。对象数据操作接口,支持对象的增删改查操作,支持事务操作等。关系型数据库的基础,简化了数据库库和表的创建,我们不需要自己动手,只需要添加和配置即可。这也是对数据库的一个很好的扩展,让开发更简单方便。创建数据库及其表。可以根据自己的需要创建数据库。如果需要在项目启动时创建数据库,建议在应用程序中进行启动操作。这里我们在每个能力的onStart函数中进行如下创建操作:DatabaseHelperhelper=newDatabaseHelper(this);OrmContextconnect=helper.getOrmContext("UserDatabase","UserDatabase.db",UserDatabase.class);getOrmContext参数说明:1、别名2、数据库名3、对象-对应的关系型数据库。另外需要注意的是,最后一个参数是表的创建。如果要创建多个表,可以添加多个实体类。我们看一下下面的对象关系:packagecom.hadiidbouk.databasemanager.database.object;importohos.data.orm.OrmDatabase;importohos.data.orm.annotation.Database;/***Database*/@Database(entities={User.class},version=1)publicabstractclassUserDatabaseextendsOrmDatabase{}@Database注解继承OrmDatabase类,对应关系型数据库。数据对象:每个数据对象都是一个表,字段信息可以根据需要进行更新和更改。/***userTable*/@Entity(tableName="user")publicclassUserextendsOrmObject{@PrimaryKey()privateLongformId;privateStringformName;privateIntegerdimension;publicUser(LongformId,StringformName,Integerdimension){this.formId=formId;this.formName=formName;这.dimension=dimension;}publicUser(){}publicIntegergetDimension(){returndimension;}publicvoidsetDimension(Integerdimension){this.dimension=dimension;}publicLonggetFormId(){returnformId;}publicvoidsetFormId(LongformId){this.formId=formId;}publicStringgetFormName(){returnformName;}publicvoidsetFormName(StringformName){this.formName=formName;}}用@Entity注解,继承OrmObject类,对应关系数据库中的表。在使用数据库之前,最好组织一个工具类。所有操作都放在工具类中,方便调用和扩展。我对数据库的相关操作做了一个封装,目前比较简单,就是增删改查等操作。关系对象数据库操作工具类:/***DatabaseOperations**@since2021-06-23*/publicclassDatabaseUtils{/***addcardinfo**@paramformcardobject*@paramconnectdataconnection*/publicstaticvoidinsertForm(Userform,OrmContextconnect){connect.insert(form);connect.flush();}/***querydatabase**@paramconnectdataconnection*@returndatabase*/publicstaticListqueryForm(OrmContextconnect){//从数据库获取信息OrmPredicatesormPredicates=newOrmPredicates(User.class);//搜索实例ListformList=connect.query(ormPredicates);if(formList.size()<=0){returnformList;}for(Userform:formList){//遍历System.out.println("FormId="+form.getFormId()+"=FormName"+form.getFormName()+"=Dimension"+form.getDimension());}returnformList;}/***更新数据库**@paramconnectdatabase实体*@paramuseruser*/publicstaticvoidupdateForms(OrmContextconnect,Useruser){//从数据库获取信息ValuesBucketvaluesBucket=newValuesBucket();valuesBucket.putString("formName",user.getFormName());valuesBucket.putInteger("dimension",user.getDimension());OrmPredicatesupdate=connect.where(User.class).equalTo("formId",user.getFormId());connect.update(update,valuesBucket);}/***deletedata**@paramformIdformid*@paramconnectdataconnection*/publicstaticvoiddeleteFormData(longformId,OrmContextconnect){OrmPredicateswhere=connect.where(User.class);where.equalTo("formId",formId);//在"user"表中database查询formId为""的User对象列表Listquery=connect.query(where);if(!query.isEmpty()){connect.delete(query.get(0));connect.flush();}}}1.OrmContext类,数据库操作的入口,用于数据库操作2.Predicate接口(OrmPredicate),用于实例制定(例如:条件查询,条件删除)3.ValuesBucket实例操作用途:创建一个能力,该类为Requirement操作接口类publicclassDatabaseObjectAbilityextendsAbilityimplementsComponent.ClickedListener{privateDatabaseHelperhelper=newDatabaseHelper(this);privateOrmContextconnect;@OverridepublicvoidonStart(Intentintent){super.onStart(intent);super.setUIContent(ResourceTable.Layout_ability_database_object);connect=helper.getOrmContext("UserDatabase","UserDatabase.db",UserDatabase.class);findComponentById(ResourceTable.Id_xinzeng_db).setClickedListener(this);findComponentById(ResourceTable.Id_chaxun_db).setClickedListener(this);findComponentById(ResourceTable.Id_xiugai_db).setClickedListener(this);findComponentById(ResourceTable.Id_shagnchu_db).setClickedListener(this);}@OverridepublicvoidonClick(Componentcomponent){switch(component.getId()){caseResourceTable.Id_xinzeng_db:insertDB();break;caseResourceTable.Id_chaxun_db:DatabaseUtils.queryForm(connect);break;caseResourceTable.Id_xiugai_db:Userform=newUser(100l,"陈建友",101);DatabaseUtils.updateForms(connect,form);break;caseResourceTable.Id_shagnchu_db:DatabaseUtils.deleteFormData(100l,connect);break;default:}}privatevoidinsertDB(){//存卡信息Userform=newUser(100l,"陈建鹏",101);try{DatabaseUtils.insertForm(form,connect);}catch(Exceptione){DatabaseUtils.deleteFormData(form.getFormId(),connect);}}注意:如果使用注解处理器的模块是“com.huawei.ohos.hap”模块,需要在模块的“build.gradle”文件的“ohos”节点添加如下配置:{annotationEnabledtrue}//数据库使用必填}可以直接在这个类中创建数据库和表,也可以在启动应用时创建,全局使用connect。在这个类中就可以调用数据库了,直接调用封装好的数据库至此在操作工具类中,对象关系映射数据库就结束了,是不是很简单。通过研究鸿蒙的关系型数据库和对象-关系映射数据库,我体会到了鸿蒙的强大。事实上,项目的开发和使用无需在对象关系映射数据库中编写SQL语句即可完成。鸿蒙系统这么强大,肯定还有很多强大的功能我还没学会,还有很多好东西等着我去探索,探索还在进行中,但这些只是杯水车薪为鸿蒙。更多信息请访问:Harmonyos.51cto.com,与华为官方合作打造的鸿蒙技术社区