HarmonyOS 数据库系列之对象关系映射数据库
逆锋起笔
共 3422字,需浏览 7分钟
·
2021-10-26 11:34
前言
鸿蒙提供了非常强大的数据库操作功能, 前面讲到了 关系型数据库, 是基于关系模型来管理数据的数据库。
其实鸿蒙还有一种 体验更好,操作更方便的数据库 ,对象关系映射数据库, 这种数据库的好处是 直接基于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 List
queryForm(OrmContext connect){ // 从数据库中获取信息
OrmPredicates ormPredicates = new OrmPredicates(User.class);// 搜索实例
List
formList = 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对象列表
List
query = 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;
@Override
public 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);
}
@Override
public 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 5
defaultConfig {
compatibleSdkVersion 5
}
buildTypes {
release {
proguardOpt {
proguardEnabled false
rulesFiles 'proguard-rules.pro'
}
}
}
compileOptions { annotationEnabled true } // 数据库使用必备
}
感悟
逆锋起笔
是一个专注于程序员圈子的技术平台,你可以收获最新技术动态
、最新内测资格
、BAT等大厂的经验
、精品学习资料
、职业路线
、副业思维
,微信搜索逆锋起笔
关注!
评论