在 jsp 中显示休眠查询结果的最佳方法

Posted

技术标签:

【中文标题】在 jsp 中显示休眠查询结果的最佳方法【英文标题】:Best way to show hibernate query results in jsp 【发布时间】:2015-08-02 08:40:15 【问题描述】:

由于“在视图中打开会话”模式有一些缺点(请参阅Why is Hibernate Open Session in View considered a bad practice?),我想知道将休眠查询的结果显示到 jsp 页面的最佳方法是什么?

我想到的一种方法是在请求中放一个java.util.list对象,并将内容输出到jsp页面。还有其他/更好的方法吗?

【问题讨论】:

我理解为什么 OSIV 是一个不好的做法的方式是你将你的数据库对象传递到你的前端软件 - 一个简单的通用示例是从你的实体对象中取出 DTO,由你的后端创建并传递到您的前端。 【参考方案1】:

最好的方法是为您的 UI 视图使用 DTO 投影。这样你就可以避免LazyInitializationExceptions 并确保你只在某个视图中获取你需要的东西。从性能的角度来看,没有什么比 SQL 投影更好的了。

DTO 投影如下所示:

select new my.package.UserInfo(u.name, u.age, u.gender)
from Users u

【讨论】:

不确定我是否理解,因为我是休眠新手。当您说 DTO 预测时,您的意思是使用 Criteria Queries? 您可以同时使用 Criteria 和 HQL。目标是将所有内容都选择为 DTO,而不是根实体。 你能提供一个在 DTO 中选择它的例子吗?你的意思是这样的吗? session.createQuery(hql).list() 完成。但是,如果您不介意,您能否提供一个在 DTO 中全部选择的示例?我现在正在研究如何做到这一点,但如果您提供一个示例供参考,那就太好了。谢谢。 我们会把查询的结果放到一个列表中对吧?那么将列表绑定到请求对象是一个很好的解决方案吗?

以上是关于在 jsp 中显示休眠查询结果的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

java的jsp如何分页显示查询结果呢?

使用子查询保存查询结果的最佳方法是啥?

jsp 中如何将sql查询结果以数组形式显示出来

使用以下查询获得结果的最佳方法是啥

如何用把Arraylist中的结果在jsp页面中用分页显示?java+jsp语言

jsp 如何将查询结果实现分页,最好简单易懂