对象关系映射(ORM)-Oceanus编码调用

2019-03-10 16:04|来源: 网路

Oceanus定位于分布式存储数据的中间件解决方案,分布式环境中对数据存储的结构和读写方式都有较高的要求,举例说明:ebay早期使用了Oracle,后来重构成MySQL集群,把业务逻辑尽量从底层数据库剥离,数据库仅仅作为存放数据和简单查询的容器,以方便横向扩展。所以Oceanus中的ORM只做从 ResultSet到对象的一对一映射。


6.1 持久化对象(PO)注解

1. @NotColumn 注解在成员变量上,表示该变量不做映射。PS:默认情况下所有的变量都要做映射

2. @Column 注解在成员变量上,该注解有三个参数可选:

   name : 声明 table 的列名,默认与成员变量名相同

   setFuncName : 定义特殊 set 方法名,默认是 ”set”+成员变量首字母大写

   getFuncName : 定义特殊 get 方法名,默认是 ”get”+成员变量首字母大写


6.2 数据访问层继承 com.bj58.oceanus.client.orm.BaseDao

其中有三个方法供子类调用:

   1. boolean com.bj58.oceanus.client.orm.BaseDao.excute(String sql, Object...

objects) throws Exception

   2. int com.bj58.oceanus.client.orm.BaseDao.excuteUpdate(String sql, Object...

objects) throws Exception

   3. <T> List<T> com.bj58.oceanus.client.orm.BaseDao.excuteQuery(Class<T> clazz, String sql, Object... objects) throws Exception


第三个方法会将查询结果中的 ResultSet 结果映射成传入的 Class<T>对象,封

装成集合返回


本文来源:58同城Oceanus使用文档


相关问答

更多
  • JSData 一个以角度数据开始的项目现在是“建立在易于使用和安心的基础上的框架无关的数据存储”。 它具有优秀的文档,并且支持关系,多个后端(http,localStorage,firebase),验证和当然的角度集成。 http://www.js-data.io/ BreezeJS AngularJS YouTube频道使用BreezeJS 播放 此视频 哪个是高级ORM,甚至支持客户端过滤和其他酷的东西。 它最适合支持OData的后端,但可以用于其他类型的后端。 ngResource 另一个选择是使用n ...
  • 对于任何想要做同样事情的人来说,设法这样做: AutoMapper.Mapper.Map(srcQ, objq); for anyone else who wants to do the same thing, managed to do it this way: AutoMapper.Mapper.Map(srcQ, objq);
  • 人们将RDBMS与OR Mapper而不是对象数据库一起使用的主要原因是RDBMS根深蒂固,易于理解并得到每个人的良好支持。 如果使用对象数据库,则会遇到问题 找人支持它 使用现有工具进行报告,备份等 让其他应用程序访问数据 可能还有很多疑问(无论是否合理,我不能说)对象数据库是否真的可以在真实的单词场景中提供相同或更好的性能和安全性。 The main reason why people use an RDBMS with an OR Mapper rather than an object databa ...
  • 我认为我正确地阅读了你的问题,如果是的话: 我将关系表示为子文档或ID列表。 决策点有多少其他实体需要与所讨论的子文档的关系。 在你的例子中,如果用户是唯一具有这些项目和项目的用户唯一的实体,我会将项目保存在用户的子文档中。 但是,很可能有几个用户可能在同一个项目中,也可能有一个团队实体将所有项目分配给该团队。 在这种情况下,您需要大量的子文档,有大量重复的数据,并且您会介绍一个要求,即如果说项目名称发生了更改,则会更新每个子文档。 如果您将项目作为单独的集合保存并引用这些ID,则只有一个地方可以进行此更改 ...
  • 我不同意链接的文章。 虽然我同意域模型和持久性模型之间的关注点不同,但ORM的整个目的是在域模型和持久性模型之间进行映射。 由于ORM应该提供该映射,因此创建额外的类层次结构以便于映射是过度的,并且可能导致类似您所描述的问题。 领域模型类似于数据模型的事实确实远远不仅仅是巧合。 相反,它们都代表同一领域的方面,因此应具有高度的对应性。 ORM旨在解决对象模型和对应关系模型之间的不匹配问题。 在某些情况下,映射变得很难,但在NHibernate中,可以通过实现组件映射的自定义用户类型来解决这些问题。 I di ...
  • 听起来你正试图让你的ORM适合你的UI模型,这不是你的方式。 您应该创建一个新类,表示要从表单中捕获的数据,然后根据需要将其处理到各个表中。 因此,在创建新页面时使用的模型将是这样的: public class FinalPage{ public string Title { get; set; } public string Slug { get; set; } public string Body { get; set; } public int TemplateId { ...
  • 我知道Drupal和Wordpress都不使用ORM。 Drupal 6有自己的数据库抽象层,它用D7切换到PDO,但它仍然不是ORM。 WP和Drupal都是按程序构建的,可能应用程序应建立在面向对象的范例上以利用ORM。 I know that neither Drupal nor Wordpress use ORM. Drupal 6 has it's own database abstraction layer, which is switching to PDO with D7, but it's ...
  • spring没有自己的orm实现。 spring的orm是一个抽象层,它为你使用的实际orm实现添加了增强功能,如hibernate / JDO或JPA。 spring does not have its own orm implementation. spring's orm is a layer of abstraction that adds enhancements to the actual orm implementation that you use like hibernate/JDO or ...
  • 这是一个很难的问题,但通常自动生成的代码(ORM代码)可能会更慢,因为ORM librares“不像开发人员那么聪明”。 但无论如何,正确使用ORM和良好的缓存是“足够快”,你不应该关心性能。 您应该关注哪些指令使用哪些指令。 您应该始终检查ORM引擎生成的SQL以及项目的“调整”阶段,您可以重写这些性能不可接受的代码部分。 性能消除操作的示例是急切加载某些对象的集合(具有一对多关系)。 It is a hard question, but generally automatically generated ...
  • 在Dapper中,映射是根据您运行的任何查询的结果完成的。 您的查询可以连接许多数据库表 - 只要生成的列名称与您映射的对象属性匹配,您就可以了。 In Dapper, the mapping is done based on the results of whatever query you run. Your query can join many database tables - as long as the resulting column names match up to the object ...