我第一次在我的一个项目中使用hibernate。其中一个实体是Education(StudentObject,CollegeObject,MajorObject,degreeString)。要将Education对象插入数据库,我将从数据库中加载学生,大学和主要对象,然后实例化并持久化。这怎么比普通的sql(插入...)查询更好? sql查询不会更快,因为没有从数据库加载3个diff对象的开销吗?
答案 0 :(得分:3)
sql查询不会更快,因为没有从数据库加载3个不同对象的开销吗?
如果我错了,请纠正我,但如果不是来自数据库,那么StudentObject,CollegeObject和MajorObject的ID在哪里?如果它们是某种参考数据,它们是二级缓存的完美候选者(这意味着根本没有数据库命中)。
无论你的答案是什么,我都认为在典型的CRUD应用程序中使用HMB的ORM是这样的:
总而言之,重点是提高发展的生产力,从这个角度来看,我的经验是积极的。在 general 中,它表现得非常好,实际上甚至比自定义代码更好(感谢延迟加载和二级缓存)。 对于某些用例,性能不会像自定义SQL那样“好”。但调整是可能的。
回到你的问题,我认为在某些用例中,这些好处是值得的(尽管我仍然不相信你的例子很好)。但你真的有性能问题吗?
答案 1 :(得分:0)
是。 SQL查询更快。
所有ORM框架都有这种开销。
问题在于,ORM框架应该提高开发人员的工作效率,并且如果确实使得事情运行缓慢,则应该管理SQL查询的开销。根据我的经验,这是非常罕见的。需要时,您通常可以依赖SQL。大多数应用程序都可以使用ORM框架。
如果我编写一个小应用程序,我甚至不会使用ORM框架。但这是你学习的机会。