我想开发一个执行CRUD功能的简单orm.Shold我使用反射? 像hibernate这样的libs是否使用反射? 使用反射会导致速度在很大程度上下降吗?
答案 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层。该框架足够模块化,以适应关系数据库。希望这是我第三次尝试这样的工作。所以,这里需要的是什么以及为什么。
这是一项有趣但很无用的研究工作。有趣的是,因为它将学习大量有关反射,代理和所有人忽略并倾向于考虑保留给所谓的动态语言的概念。
但没用,因为你总是会遇到需要你破解你的代码的角落案件。
正如Emmanuel Bernard在“Les castcodeurs”(一个法国Java播客)中所说的那样,我认为,每年都会有人来一个“reimplementation”的Hibernate。每年,这个实现都显示自己缺少一些重要的片段,如事务,本地或分布式,缓存处理,......
因此,尝试对其进行编码,并且永远不要忘记,由于与已安装框架的重叠太多,它很快就会被删除。
答案 4 :(得分:1)
试试JLibs-JDBC。
这是一个简单的ORM,它不使用反射或xml配置
答案 5 :(得分:0)
回答问题的最后部分,是的;反思是一个严重的性能打击。您通常拥有编译器的所有工作都必须在运行时进行,因此请谨慎使用反射(例如缓存类,因此您只需创建一次,最好在启动时)。
我没有查看Hibernate的代码,但我希望它也使用反射,但尽可能优化。
我的建议是你先编写一个简单易用的解决方案,然后随着时间的推移开始优化。