HarmonyOS 数据库系列之对象关系映射数据库
前言
鸿蒙提供了非常强大的数据库操作功能, 前面讲到了 关系型数据库, 是基于关系模型来管理数据的数据库。
其实鸿蒙还有一种 体验更好,操作更方便的数据库 ,对象关系映射数据库, 这种数据库的好处是 直接基于sqlite数据库架构的, 操作sql语句的操作更简单,可以直接配置进行。
其实这种配置更像做web后台系统的开发,一个类就是一个表,如果需要添加信息直接更新实体类就行。
简介
先了解一下概念,概念是一切功能的使用总结。
HarmonyOS对象关系映射(Object Relational Mapping,ORM)数据库是一款基于SQLite的数据库框架,屏蔽了底层SQLite数据库的SQL操作,针对实体和关系提供了增删改查等一系列的面向对象接口。应用开发者不必再去编写复杂的SQL语句, 以操作对象的形式来操作数据库,提升效率的同时也能聚焦于业务开发。
在我看来 对象关系映射数据库非常重要的 三个 组件:
数据库:被开发者用@Database注解,且继承了OrmDatabase的类,对应关系型数据库。 实体对象:被开发者用@Entity注解,且继承了OrmObject的类,对应关系型数据库中的表。 对象数据操作接口:包括数据库操作的入口OrmContext类和谓词接口(OrmPredicate)。
运作机制

创建数据库及其表
DatabaseHelper helper = new DatabaseHelper(this);OrmContext connect = helper.getOrmContext("UserDatabase", "UserDatabase.db", UserDatabase.class);
1、别名 2、数据库名 3、对象-对应关系型数据库。
package com.hadiidbouk.databasemanager.database.object;import ohos.data.orm.OrmDatabase;import ohos.data.orm.annotation.Database;/*** Database*/@Database(entities = {User.class},version = 1)public abstract class UserDatabase extends OrmDatabase { }
数据对象:
/*** user Table*/@Entity(tableName = "user")public class User extends OrmObject {@PrimaryKey()private Long formId;private String formName;private Integer dimension;public User(Long formId, String formName, Integer dimension) {this.formId = formId;this.formName = formName;this.dimension = dimension;}public User() { }public Integer getDimension() {return dimension;}public void setDimension(Integer dimension) {this.dimension = dimension;}public Long getFormId() {return formId;}public void setFormId(Long formId) {this.formId = formId;}public String getFormName() {return formName;}public void setFormName(String formName) {this.formName = formName;}}
数据库使用
/*** Database Operations** @since 2021-06-23*/public class DatabaseUtils {/*** add card info** @param form card object* @param connect data connection*/public static void insertForm(User form, OrmContext connect) {connect.insert(form);connect.flush();}/*** query database** @param connect data connection* @return database*/public static ListqueryForm(OrmContext connect){ // 从数据库中获取信息OrmPredicates ormPredicates = new OrmPredicates(User.class);// 搜索实例ListformList = connect.query(ormPredicates); if (formList.size() <= 0) {return formList;}for (User form : formList) {// 遍历System.out.println("FormId = "+form.getFormId()+" = FormName"+form.getFormName()+" = Dimension"+form.getDimension());}return formList;}/*** update database** @param connect 数据库实体* @param user user*/public static void updateForms(OrmContext connect,User user) {// 从数据库中获取信息ValuesBucket valuesBucket = new ValuesBucket();valuesBucket.putString("formName", user.getFormName());valuesBucket.putInteger("dimension", user.getDimension());OrmPredicates update = connect.where(User.class).equalTo("formId", user.getFormId());connect.update(update, valuesBucket);}/*** delete data** @param formId form id* @param connect data connection*/public static void deleteFormData(long formId, OrmContext connect) {OrmPredicates where = connect.where(User.class);where.equalTo("formId", formId); // 在数据库的“user”表中查询formId为“”的User对象列表Listquery = connect.query(where); if (!query.isEmpty()) {connect.delete(query.get(0));connect.flush();}}}
1、数据库操作的入口OrmContext类 ,进行数据库操作 2、谓词接口(OrmPredicate),进行实例的制定(例如:条件查询,条件删除) 3、ValuesBucket 实例
操作使用:
public class DatabaseObjectAbility extends Ability implements Component.ClickedListener {private DatabaseHelper helper = new DatabaseHelper(this);private OrmContext connect;@Overridepublic void onStart(Intent intent) {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);}@Overridepublic void onClick(Component component) {switch (component.getId()){case ResourceTable.Id_xinzeng_db:insertDB();break;case ResourceTable.Id_chaxun_db:DatabaseUtils.queryForm(connect);break;case ResourceTable.Id_xiugai_db:User form = new User(100l, "陈建朋", 101);DatabaseUtils.updateForms(connect,form);break;case ResourceTable.Id_shagnchu_db:DatabaseUtils.deleteFormData(100l,connect);break;default:}}private void insertDB(){// 存储卡片信息User form = new User(100l, "陈建朋", 101);try {DatabaseUtils.insertForm(form, connect);} catch (Exception e) {DatabaseUtils.deleteFormData(form.getFormId(), connect);}}
ohos {compileSdkVersion 5defaultConfig {compatibleSdkVersion 5}buildTypes {release {proguardOpt {proguardEnabled falserulesFiles 'proguard-rules.pro'}}}compileOptions { annotationEnabled true } // 数据库使用必备}
感悟
逆锋起笔是一个专注于程序员圈子的技术平台,你可以收获最新技术动态、最新内测资格、BAT等大厂的经验、精品学习资料、职业路线、副业思维,微信搜索逆锋起笔关注!
评论
