Titan Framework MongoDB深入理解2

在上一篇文章中,我们提到了Titan框架集成的MongoDB功能内部一些比较重要的顶级接口,但我们平时接触到比较多的还是Curd和Finder这两个类,他们是Titan中对MongoDB直接操作的类,下面来对这两个类的方法进行一些讲解。

首先我们需要知道,我们用于存储的实体类必须对每一个属性进行注解映射,使用org.titan.framework.facade.annotations.MapperKey这一个类型的注解进行映射,@MapperKey(),参数为映射该属性对应的数据库字段属性名,比如说我有一个[private String name;],我给他添加一个@MapperKey("Name"),那么它在Mongo中存储的Key就为Name。

第二点需要知道的是对于用于CRUD进行操作的Repository需要添加Spring的Repository提供注入,并且实现StorageDataProcessor.Mongo类。

之后该Respository就能获取到由该顶级接口提供的Curd对象和Finder对象,进行业务逻辑操作。

第三点是因为实体类继承了DataEntity这个框架提供的BaseEntity,在存储时会拥有额外的默认属性,分别是Id,version,CreateTime,logicalDel,它们分别是:框架内唯一主键,在某些方法内会使用;版本号标记;创建时间;数据删除标记。

1.Curd

Curd中有很多的重载方法,没有重载的方法只有withConverter和load,前者是默认的提供给用户使用自定义转换器的方法,而后者是根据表名和唯一Id以及该类类型去读取这个mongo节点的数据。

add()方法是该类内的插入数据方法,基础的使用方式参数为表名以及一个泛型类型,框架会将表名作为mongo中存储的表名字,而泛型类型会通过转换器转换为一个mongo节点类型进行存储。add()拥有一个重载方法,参数为表名和一个list类型,规定需要指明list中的泛型类型,框架会将该list中所有的对象根据该类型转化为mongo节点进行存储。

delete()方法是该类内的删除数据方法,基础使用方式参数为表名和一个泛型类型,框架会查找表名所对应的表数据,并将泛型类型对象通过转换器转换为mongo节点对象,删除表数据中和该mongo节点对象相同的数据。delete()有一个重载方法,参数为表名和唯一主键ID,这个唯一主键就是我们上边提到的框架持久化类自动生成的ID,在调用该方法后,框架会查找表名中ID相同的数据进行删除。

update()方法是该类内的修改方法,参数为表名,泛型类型(source),泛型类型(target),框架会根据表名查找对应的表数据,转换source对象为mongo节点类型,并匹配表中拥有该节点类型特征的所有数据,更新为target,做一个说明,如果有数据在mongo中为{"name":"小张","age":"12"},{"name":"小李","age":"12"},此时传入source为{"name":"小张"},则会将小张对应的数据修改为传入的target,如果传入的source为{"age":"12"},则会将小张,小李两个数据都修改为传入的target。

totalCount()方法是该类内提供的一个查找存在数量的方法,很多业务逻辑有时候不需要查询完整的数据,而只需要查询是否存在(验证)或查询存在的数量(分页),此时前者可以使用参数为表名,泛型类型(condition),该方法会将泛型类型转换为mongo节点类型,并查找表中是否存在该数据,返回查找到的条数;而后者可以使用该方法的重载方法,参数为一个MongoDBQueryCondition类型,该类型是框架内的一个条件类型,我们将在下一篇文章中介绍该类的具体使用方式,传入该类型后,会返回查找到的所有符合条件的条数。

queryByCondition()方法是该类内的条件查询方法,传入的参数是MonDBQueryCondition类型,会返回所有符合条件的数据集合,这里不做过多介绍,将在下一章展示具体的使用方法。

queryAll()方法是该类内的查询全表数据的方法,参数为表名,类类型,这里类类型指定了该数据对应的映射对象,框架会将返回的数据通过转换器转换为该java对象,若映射失败则会抛出异常,所以一般会使用存储的类型去接收这些数据。

2.Finder

Finder类主要是用于查询数据,若一个Repository只需要完成查询任务,那么请使用readOnly()方法初始化一个Finder对象。

withConverter()方法和Curd类中一样,不再重复赘述。

find()方法是该类内提供的查询方法,基础使用参数为表名,唯一主键ID(String),一个类类型,框架会查找与表名相匹配的表,并匹配ID相同的数据,之后通过转换器转换为传入类类型对应的java对象,若未映射则会抛出相关异常,重载方法参数为MonDBQueryCondition类型,会返回查找到匹配条件的数据集合,这里暂时略过。

totalCount()方法和Curd中的方法一样,不过在该类中只存在参数为MonDBQueryCondition类型的方法,没有其他重载方法。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

可能是最全面的 Python 字符串拼接总结

在 Python 中字符串连接有多种方式,这里简单做个总结,应该是比较全面的了,方便以后查阅。

11300
来自专栏debugeeker的专栏

《coredump问题原理探究》Linux x86版5.3节C风格数据结构内存布局之数组

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xuzhina/article/detai...

8110
来自专栏北京马哥教育

35个Python黑魔法级别

从我开始学习python的时候,我就开始自己总结一个python小技巧的集合。后来当我什么时候在Stack Overflow或者在某个开源软件里看到一段很酷代码...

36770
来自专栏数据小魔方

NoSQL学习笔记之——Redis基础

之前练习过一篇NoSQL之Mongodb基础的笔记,这一篇开始练习NoSQL系列的又一重要利器——Redis。 Redis是一个开源的,基于内存并可持久化的日志...

29960
来自专栏Java帮帮-微信公众号-技术文章全总结

24(02)多线程锁,线程通讯,线程组,线程池,多线程三种方式,匿名内部类,定时器,设计模式,单例模式,Runtime

(6)多线程实现的第三种方案 package cn.itcast_09;(1) import java.util.concurrent.Callable; //...

49740
来自专栏逆向技术

逆向知识第七讲,三目运算符在汇编中的表现形式,以及编译器优化方式

                  逆向知识第七讲,三目运算符在汇编中的表现形式 一丶编译器优化方式 首先说一下编译器优化方式. 1.常量折叠 2.常量传播 3...

29380
来自专栏mukekeheart的iOS之旅

Java程序员面试宝典——重要习题整理

1、下面程序的输出结果是() public class Test { public static void main(String[] arg...

24190
来自专栏python学习指南

Java面试题问与答——编译时与运行时

在开发和设计的时候,我们需要考虑编译时,运行时以及构建时这三个概念。理解这几个概念可以更好地帮助你去了解一些基本的原理。下面是初学者晋级中级水平需要知道的一些问...

21890
来自专栏java相关

【PL/SQL编程基础】

13640
来自专栏曾大稳的博客

c基础

11010

扫码关注云+社区

领取腾讯云代金券