大数据最全鸿蒙开发实例|对象关系映射数据库_@ohos(2)

private String firstName;
private String lastName;
private int age;
private double balance;
private int ignoreColumn1;
private int ignoreColumn2;

//设置字段的getter和setter方法,此处仅给出示例,读者可以根据所设置的属性自行补全方法
public void setBalance(double balance) {
    this.balance = balance;
}

public Integer getUserId() {
    return userId;
}


}


 在新建的User类中进行属性配置,tableName = "user"即在对应数据库内的表名为user,indices为属性列表,@Index注解的内容对应数据表索引的属性,本例中indices为firstName和lastName两个字段建立了复合索引,索引名为name\_index,并且索引值是唯一的。ignoreColumns 表示该字段不需要添加到user 表的属性中,即类中定义的ignoreColumn1和ignoreColumn2不属于user表的属性。被@PrimaryKey注解的变量对应数据表的主键,一个表里只能有一个主键,在本例的user表中,将userId设为自增的主键。


数据库内还包含了Book表,Book表的构建和对其操作的实现过程同User表相同,具此处不再赘述其体实现。


## 03、**创建数据库**


在MainAbilitySlice的onStart()方法中完成数据库的创建,使用对象数据操作接口OrmContext创建数据库,实现代码如下:



public void onStart(Intent intent) {
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);

//使用对象数据操作接口OrmContext创建数据库
DatabaseHelper helper = new DatabaseHelper(this);
OrmContext context = helper.getOrmContext(“BookStore”, “BookStore.db”, BookStore.class);

//对数据库进行操作
//增加数据

//查询数据

//修改数据

//删除数据

}


与构建关系型数据库不同的是,此处new DatabaseHelper(context)方法中context的入参类型为ohos.app.Context,必须直接传入slice而不能使用slice.getContext()获取context,否则会出现找不到类的报错。到这里,就成功创建了一个别名为BookStore且数据库文件名为BookStore.db的数据库。如果数据库已经存在,则执行上述代码并不会重复建库。通过context.getDatabaseDir()可以获取创建的数据库文件所在的目录。


## 04、**数据操作**


对象数据操作接口OrmContext提供了对数据库进行增、删、改、查的一系列方法,接下来进行详细介绍。


### (1)增加数据 。


例如,在名为user 的表中,新建一个User 对象并设置其属性。OrmContext提供insert()方法将对象插入数据库。执行完insert()方法后,数据被保存在内存中,只有在flush()被调用后才会将数据持久化到数据库中。以HiLog形式显示插入数据后的user表,如图4所示。此处涉及对数据库的查询操作,将在稍后进行详细讲解。具体代码如下:



//增加数据

//新建User对象
User user = new User();
//设置对象属性
user.setUserId(0);
user.setFirstName(“aa”);
user.setLastName(“AA”);
user.setAge(22);
user.setBalance(120.51);

//再新建两个User对象,设置属性后将其持久化到数据库中,此处读者可以自行添加代码

//将新建对象插入并持久化到数据库中
boolean isSuccessed = context.insert(user);
isSuccessed = context.flush();

//以HiLog形式显示新增数据后的user表,以userID升序显示
HiLogLabel logLabel = new HiLogLabel(HiLog.LOG_APP,0,“OrmDB”);
String s = new String(“userID”);
s = s.concat(" firstName");
s = s.concat(" lastName");
s = s.concat(" age");
s = s.concat(" balance");
HiLog.fatal(logLabel,“显示插入数据后的user表:”);
HiLog.fatal(logLabel,s);

//查询数据
OrmPredicates query = context.where(User.class).orderByAsc(“userID”);
List users = context.query(query);
int i = 0;
while (i != users.size()) {
int id = users.get(i).getUserId();
String s1 = “\t” + id + “\t\t”;
s1 = s1.concat(users.get(i).getFirstName() + “\t”);
s1 = s1.concat(“\t\t” + users.get(i).getLastName());
s1 = s1.concat(“\t " + users.get(i).getAge() + “\t”);
s1 = s1.concat(” " + users.get(i).getBalance());
HiLog.fatal(logLabel, s1);
i = i + 1;
}


![](https://img-blog.csdnimg.cn/c0d13022a69d40668ffc0ad2049718b4.jpeg)


### (2) 查询数据。


OrmContext提供query()方法查询满足指定条件的对象实例。例如,在user表中查询age=22的对象,在查询之前,依旧需要先设置谓词query1,利用query()方法查找user表中满足query1 的数据,得到一个User的列表user1,遍历user1,获取user1中各个对象的属性值,实现代码如下:



//查询age=22的数据并显示

//设置谓词
OrmPredicates query1 = context.where(User.class).equalTo(“age”, “22”);
//查询
List users1 = context.query(query1);

//将查询结果以HiLog形式显示
HiLogLabel logLabel1 = new HiLogLabel(HiLog.LOG_APP,0,“OrmDB”);
HiLog.fatal(logLabel1,“显示user表中age值为22的数据:”);
HiLog.fatal(logLabel1,s);
i = 0;
while (i != users1.size()){
int id = users1.get(i).getUserId();
String s1 = “\t” + id +“\t\t”;
s1 = s1.concat(users1.get(i).getFirstName()+“\t”);
s1 = s1.concat(“\t\t”+users1.get(i).getLastName());
s1 = s1.concat(“\t “+users1.get(i).getAge()+”\t”);
s1 = s1.concat(" "+users1.get(i).getBalance());
HiLog.fatal(logLabel1,s1);
i = i + 1;
}


 查询结果如图5所示。


![](https://img-blog.csdnimg.cn/e37759f03902498f8396d4788df2be2b.jpeg)


图5 查询user表中age=22的数据


### (3) 修改数据。


修改数据包括两种方式,一种是通过直接传入OrmObject对象的接口来更新数据,需要先从表中查到需要更新的结果对象列表,然后修改选定对象的值,再调用更新接口将数据持久化到数据库中。例如,将user表中age=39的数据的firstName更新为sd,需要先查找user表中对应的数据,得到一个结果列表,然后选择列表中需要更新的User对象,设置更新值,并调用update接口传入被更新的User对象。最后调用flush接口将数据持久化到数据库中。具体代码如下:



//更新数据
OrmPredicates predicates = context.where(User.class);
predicates.equalTo(“age”, 39);
//获取满足条件的数据集
List users2 = context.query(predicates);
//选定要更新的数据
User userUD = users2.get(0);
//设置更新
userUD.setFirstName(“sd”);
context.update(userUD);
context.flush();

HiLog.fatal(logLabel, “显示更新数据后的user表:”);
HiLog.fatal(logLabel, s);
query = context.where(User.class).orderByAsc(“userID”);
users = context.query(query);
i = 0;
while (i != users.size()) {
int id = users.get(i).getUserId();
String s1 = “\t” + id + “\t\t”;
s1 = s1.concat(users.get(i).getFirstName() + “\t”);
s1 = s1.concat(“\t\t” + users.get(i).getLastName());
s1 = s1.concat(“\t " + users.get(i).getAge() + “\t”);
s1 = s1.concat(” " + users.get(i).getBalance());
HiLog.fatal(logLabel, s1);
i = i + 1;
}


 另一种方式,可以通过传入谓词的接口来更新和删除数据,方法与OrmObject对象的接口类似,只是无须flush就可以将数据持久化到数据库中。通过这种方式将user表中age=39的数据的firstName更新为sd,具体代码如下:



//使用valuesBucket来改变数据
ValuesBucket valuesBucket = new ValuesBucket();
valuesBucket.putString(“firstName”, “sd”);
OrmPredicates update = context.where(User.class).equalTo(“age”, 39);
context.update(update, valuesBucket);


分别利用两种方式进行数据更新,更新后的结果如图6所示。


![](https://img-blog.csdnimg.cn/5560eaa6172f4a34a2ce73457cc356bf.jpeg)


### (4) 删除数据。


同修改数据一样,也包括两种方式。区别只是删除数据不需要更新对象的值。这里通过直接传入OrmObject对象的接口删除数据的方式删除满足firstName="aa"的第一个User对象,并用flush接口将数据持久化到数据库中,代码如下



//删除满足firstName = "aa"的第一个对象
OrmPredicates del = context.where(User.class).equalTo(“firstName”, “aa”);
List usersdel = context.query(del);
User userd = usersdel.get(0);
context.delete(userd);
context.flush();
HiLog.fatal(logLabel, “显示删除数据后的user表:”);
HiLog.fatal(logLabel, s);
query = context.where(User.class).orderByAsc(“userID”);
users = context.query(query);
i = 0;
while (i != users.size()) {

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

81076)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以给您介绍一下如何使用HarmonyOS对象关系映射数据库API来封装一个增、删、改、查的帮助类。 首先,您需要创建一个Java类来表示您要操作的实体对象。例如,如果您要操作一个名为“Person”的实体对象,您可以创建一个名为“PersonEntity”的Java类。这个类应该包含实体对象的所有属性,以及它们的getter和setter方法。 接下来,您需要使用HarmonyOS对象关系映射数据库API来创建一个与实体对象相对应的数据库表。您可以使用“OrmContext”的“createObjectStore”方法来创建一个表。例如,如果您要创建一个名为“person”的表,您可以使用以下代码: ``` OrmContext ormContext = ormContextFactory.getOrmContext("test", "test", "TestDB"); OrmObjectStore<PersonEntity> personStore = ormContext.createObjectStore(PersonEntity.class); ``` 在这个例子中,“test”是数据库的名称,“TestDB”是数据库文件的名称。您还需要创建一个名为“ormContextFactory”的“OrmContextFactory”对象来管理您的数据库连接。 接下来,您可以创建一个帮助类来简化对实体对象的增、删、改、查操作。以下是一个示例类,它包含了一些常用的操作方法: ``` public class PersonHelper { private OrmObjectStore<PersonEntity> personStore; public PersonHelper(OrmContext ormContext) { personStore = ormContext.getObjectStore(PersonEntity.class); } public void addPerson(PersonEntity person) { personStore.put(person); } public void updatePerson(PersonEntity person) { personStore.update(person); } public void deletePerson(PersonEntity person) { personStore.delete(person); } public List<PersonEntity> getAllPersons() { return personStore.query().findAll(); } public PersonEntity getPersonById(int id) { return personStore.getById(id); } } ``` 在这个示例中,我们使用“OrmContext”的“getObjectStore”方法来获取与“PersonEntity”对象相对应的表。然后,我们可以使用表的“put”方法来添加一个新的实体对象,“update”方法来更新一个实体对象,“delete”方法来删除一个实体对象,“query”方法来查询所有实体对象,“getById”方法来查询指定ID的实体对象。 最后,您可以在您的应用程序中使用这个帮助类来操作实体对象。例如,以下是如何添加一个名为“John”的新人物: ``` PersonHelper personHelper = new PersonHelper(ormContext); PersonEntity john = new PersonEntity(); john.setName("John"); john.setAge(30); personHelper.addPerson(john); ``` 这个例子中,“ormContext”是我们创建的“OrmContext”对象。 希望这个介绍可以帮到您。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值