gpt4 book ai didi

java - 如何在我的 View 中调用我的命名查询

转载 作者:行者123 更新时间:2023-12-01 15:37:05 24 4
gpt4 key购买 nike

我正在努力弄清楚如何调用我的命名查询...

@NamedQueries({
@NamedQuery(name = "Content.findAll", query = "SELECT c FROM Content c"),
@NamedQuery(name = "Content.findById", query = "SELECT c FROM Content c WHERE c.id = :id"),
@NamedQuery(name = "Content.findByUserId", query = "SELECT c FROM Content c WHERE c.userId = :userId")})
public class Content implements Serializable {
...

在我看来,我已经尝试了一些变体,但似乎无法确定正确的用法。

<ol> <%
List<Content> contentList = model.Content.findAll();
if (contentList != null) {
for (Content content : contentList) { %>
<li> <%= content %> </li> <%
}
} %>
</ol>

在 Google 上,我不断找到人们使用过的结果,例如:

List results = em.createNamedQuery("findAll").getResultList();

我应该在我的 View 中引用em,还是在模型中引用它?我似乎找不到一个可靠的例子来帮助我了解全貌。

最佳答案

您给出的示例看起来属于 Three-Tier Architecture服务层

也就是说,您将拥有 ContentService它公开了类似 findAll() 的方法。那么你的ContentController将在适当的时间调用此方法,并放置结果 List<Content>进入模型,然后 View 可以(最终!)使用它。

这是我如何写你的 ContentService实现(假设 ContentService 接口(interface)已经定义):

public class ContentServiceImpl implements ContentService {

@Autowired
private EntityManager em; // Gets wired in by Spring

public List<Content> findAllContent() {
return em.createNamedQuery("Content.findAll").getResultList();
}

...
}

我知道与您尝试的操作相比(从 View 中直接访问对象“上”的命名查询),这似乎需要做很多工作,但这是对 separation of concerns 的严重违反。 ,这是 MVC 背后的主要思想如今每个人都使用的模式。

想想如果你被告知 findAll 会发生什么实际上应该只能找到 Content具有新 visible 的对象标志设置true 。使用您当前的方法(如果它有效的话),您必须更改您的 View - 当更改应该隔离到更低的层时。

现在想想上面的实现必须做什么。写一个新的@NamedQuery在您的Content上对象,然后在 findAllContent() 中调用 that方法。其他没有改变。

关于java - 如何在我的 View 中调用我的命名查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8706696/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com