在一些文章中提到我们不应该获取表的所有列。我们应该避免Select * from table1
并写Select name, age, phone from table1
。
Q1 )这是否意味着在编写HQL时,我们不应该写from Table1
?
Q2 )我听说有些公司在他们的java代码中使用存储过程来获取数据,而不是编写select语句。这种技术真的很有效吗?
Q3 )我听说过单个应用程序。有时使用许多数据库而不是单个数据库。为什么会这样?这种技术是好的吗?
答案 0 :(得分:4)
答案1:Hibernate不使用select *
:它将select from table
翻译为select col1, col2, col3 ... from table1
。此外,如果您没有将列定义为休眠,则不会选择它。
答案2:我的建议是避免使用存储过程。它们实际上很少比查询更快,特别是对于简单的数据检索。有很多很好的理由不使用它们,其中包括1)不便携,2)无法调试,3)不能单元测试,列表继续
答案3:我会使用一个数据库,而不是拆分数据。管理起来太难了,而且你为系统添加了更多的组件而没有任何好处(大多数系统也使用一个数据库,所以它不会那么糟糕)。然而,分布式数据库是一个好主意。
答案 1 :(得分:1)
使用ORM的想法是使用Java对象。所以使用from Table
是好的,它可以让你准备好处理对象,但是......
可能会出现大字段Blob或Clobs,然后将它们标记为延迟加载,因此您不必将它们保留在会话缓存中,这会占用内存。
也可能需要选择100 000行,然后使用ORM映射没有意义。您应该回退到SQL本机查询(Hibernate也很好地管理)。
对于小结果集(您可以在where子句中限制它),可以使用HQL,除非您有大型BLOB和CLOB。由于结果集很小,所以如果你选择了所需的字段并不是很重要(显然你可以这样做,但是如果缺少某些数据,其他团队成员可能会意外)。
对于大型数据集,HQL没有意义。