开发一个简单的orm

时间:2010-03-11 12:06:08

标签: java orm

我想开发一个执行CRUD功能的简单orm.Shold我使用反射? 像hibernate这样的libs是否使用反射? 使用反射会导致速度在很大程度上下降吗?

6 个答案:

答案 0 :(得分:5)

是Hibernate使用反射和注释(或XML配置文件),但它只会索引和读取所有元信息一次(启动时)。我建议你先开始existing ORM solutions看看{{3}},然后再开始自己的推荐。

答案 1 :(得分:3)

简单的ORM是DAO (Data Access Object)。您可以很好地指定CRUD操作。

有关更多ORM模式或方法,请阅读Martin Fowler的书:Patterns of Enterprise Application Architecture

此外,您可以使用现有的JPA (Java Persistence API)并编写自己的JPA。

答案 2 :(得分:2)

反射,动态代理,cglib,asm,javassit - 都在ORM工具中使用。

但是,你真的不想创建一个新的。因为您无法创建简单ORM 。 ORM创建起来并不简单,一旦达到某一点,您就会意识到这一点。所以不要浪费你的时间。使用现有的。有很多,有些更复杂,有些不那么复杂(而且功能不强)。

你可以谷歌“简单的ORM”,你会有很多选择(或多或少)使用。 (但不要实施)

答案 3 :(得分:1)

好吧,就在不久之前,我为GAE写了一个名为gaedo的ORM层。该框架足够模块化,以适应关系数据库。希望这是我第三次尝试这样的工作。所以,这里需要的是什么以及为什么。

  • Reflection是所有ORM映射工具的根,因为它允许您探索查找其属性名称和值的类。这是第一次使用。它还允许您从数据存储区加载值,前提是您的bean具有方便的构造函数(通常,ORM框架依赖于Java Bean,因为这些bean确保存在无参数构造函数)。最后,反射将允许您从bean中的数据存储区加载值,我认为这是最重要的事情。不幸的是,你将很快面临加载整个数据库的查询问题,这将需要你两个新的步骤
  • 考虑到图形加载,您需要快速依赖dynamic proxies来创建延迟加载对象。显然,如果您仅依赖于JDK,您将只能在实现众所周知的接口的对象上使用它(例如,集合和映射是受益于实现其接口的动态代理的对象的非常好的示例)。
  • 最后,注释的用途较小。它们将允许您定义关键元素(用于生成对象的数据库键,作为示例),定义父子关系,甚至定义延迟加载策略,与之前提到的动态代理相关联。

这是一项有趣但很无用的研究工作。有趣的是,因为它将学习大量有关反射,代理和所有人忽略并倾向于考虑保留给所谓的动态语言的概念。

但没用,因为你总是会遇到需要你破解你的代码的角落案件。

正如Emmanuel Bernard在“Les castcodeurs”(一个法国Java播客)中所说的那样,我认为,每年都会有人来一个“reimplementation”的Hibernate。每年,这个实现都显示自己缺少一些重要的片段,如事务,本地或分布式,缓存处理,......

因此,尝试对其进行编码,并且永远不要忘记,由于与已安装框架的重叠太多,它很快就会被删除。

答案 4 :(得分:1)

试试JLibs-JDBC

这是一个简单的ORM,它不使用反射或xml配置

答案 5 :(得分:0)

回答问题的最后部分,是的;反思是一个严重的性能打击。您通常拥有编译器的所有工作都必须在运行时进行,因此请谨慎使用反射(例如缓存类,因此您只需创建一次,最好在启动时)。

我没有查看Hibernate的代码,但我希望它也使用反射,但尽可能优化。

我的建议是你先编写一个简单易用的解决方案,然后随着时间的推移开始优化。