我有以下代码
public List<Item> getDbItems()
{
ArrayList<Item> dbItems = new ArrayList<>();
EntityTransaction entr=em.getTransaction();
entr.begin();
TypedQuery<Item> query = em.createQuery("SELECT i FROM Item i", Item.class);
dbItems = (ArrayList<Item>) query.getResultList();
em.getTransaction().commit();
return dbItems;
}
我需要它来返回数组列表而不是数组。是否有返回数组列表的查询?
更改:
dbItems = (ArrayList<Item>) query.getResultList();
对此:
dbItems = new ArrayList<Item>(query.getResultList());
现在,从设计的角度来看,方法的客户端应该决定他们想要使用哪种实现,尽可能使用抽象/接口。忘记 ArrayList,只需在查询方法周围使用 List,然后方法的客户端将不得不决定如何使用该 List 以及他们想要哪种实现。
此外,您不需要单个 SELECT 查询的事务
public List<Item> getDbItems()
{
TypedQuery<Item> query = em.createQuery("SELECT i FROM Item i", Item.class);
return query.getResultList();
}
你必须了解什么是接口和类:
- 这里的接口是List,它将为您提供可以调用的函数/方法集。
-
你将实例化的类,在本例中为 ArrayList,你告诉你为接口 List 提供的方法将如何执行,所以现在,你的代码可以编译,并且功能很好,做:
public List<Item> getDbItems() { List<Item> dbItems = new ArrayList<>(); EntityTransaction entr=em.getTransaction(); entr.begin(); TypedQuery<Item> query = em.createQuery("SELECT i FROM Item i", Item.class); dbItems = query.getResultList(); em.getTransaction().commit(); return dbItems; }