如何在 JSP 页面中显示 2 个表中的数据
Posted
技术标签:
【中文标题】如何在 JSP 页面中显示 2 个表中的数据【英文标题】:How to display data from 2 tables in JSP page 【发布时间】:2016-09-11 13:22:08 【问题描述】:我是 Hibernate 和 Spring MVC 的新手。我正在创建一个 Web 应用程序,我想在其中显示所有电话号码的列表以及分配给每个号码的用户名。有 2 个表 - 一个用于数字,另一个用于用户。每个都由 id 索引。用户 ID 是数字表中的外键。当我尝试在 JSP 页面中显示名称时,我得到的只是用户的 id 表示,而不是返回数字列表时的名称值。是否有一个标准的休眠 CRUD 示例可以创建列表以包含用户的名称值而不是其 ID。表示?如果没有,有人可以帮我为此创建正确的查询程序吗?
我正在使用 Java 1.8、Spring 4.2.5、mysql 5.7 和 Hibernate 5.0.1 以及使用 Eclipse Mars IDE 的 Tomcat 8。
实体类:
@Entity
@Table(name="Numbers")
public class Numbers
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id", unique=true, nullable=false)
private Long id;
@Column(name="Number", nullable=false)
private String Number;
@Column(name="UserID", nullable=false)
private Long UserID;
@ManyToOne
@JoinColumn(name="FK_NUMBERS_USER")
private Users Username;
//getters & setters
@Entity
@Table(name="Users")
public class Users
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id", unique=true, nullable=false)
public Long id;
@Column(name="Username", unique=true, nullable=false)
public String Username;
//getters & setters
控制器代码:
@RequestMapping(value="/numbers", method = RequestMethod.GET)
public ModelAndView getAllNumbers()
List<Numbers> allNumbers = numbersService.findAllNumbers();
ModelAndView model = new ModelAndView("numbers");
model.addObject("numbers", allNumbers);
return model;
服务接口:
public interface NumbersService
void saveNumber(Numbers number);
void deleteUser(Numbers number);
List<Numbers> findAllNumbers();
JSP 文件 c:foreach:
table border="1">
<tr>
<th>Number</th>
<th>Username</th>
</tr>
<tbody>
<c:forEach items="$numbers" var="numbers">
<tr>
<td>$numbers.id</td>
<td>$numbers.number</td>
<td>$numbers.username</td>
</tr>
</c:forEach>
</tbody>
</table>
处理数字查询时控制器的控制台输出:
Number ID Number User ID
1 12055551212 1
2 12065551212 2
3 12075551212 1
由于“userid”不是 Numbers 类的属性,并且如果在 JSP 中使用 numbers.username,表格字段为空白,因此我无法在 JSP 页面上获得相同的输出。如何获取 JSP 文件中的名称?
DAO 实现:
package com.voip.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import com.voip.dao.NumbersDAO;
import com.voip.domain.Numbers;
import com.voip.domain.Users;
import com.voip.service.NumbersService;
public class NumbersServiceImpl implements NumbersService
@Autowired
private NumbersDAO numbersDAO;
@Override
public List<Numbers> findAllNumbers()
List<Numbers> allNumbers = (List<Numbers>) numbersDAO.findAll();
return allNumbers;
【问题讨论】:
【参考方案1】:问题有两个方面。首先我在@JoinColumn 中设置了错误的值。该值应该引用我试图从中获取数据的表的主键。在我的情况下,Numbers 表正在尝试访问 Users 表,因此引用应该是“id”字段。
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="userid")
private Users userID;
其次,在我的 JSP 文件中,我需要确保引用正确的变量来检索数据。在这种情况下,变量将是用户 ID。此外,引用区分大小写。 JSP 文件应该有这个引用。
<td>$numbers.userID.username</td>
这让我可以在 JSP 文件中显示我想要的数字和用户名值。
【讨论】:
【参考方案2】:在多对一关系中添加@ManyToOne(fetch = FetchType.EAGER)
同样在 JSP 中,用于获取用户名,更改 $numbers.username 到 $numbers.username.username
【讨论】:
试过了,但是 $numbers.username.username 数据的 JSP 仍然是空白以上是关于如何在 JSP 页面中显示 2 个表中的数据的主要内容,如果未能解决你的问题,请参考以下文章
如何将mysql数据库表中的内容显示在Web页面中,用啥软件实现呢?
我想从数据库表中选择最后 5 个条目并将其显示在页面上。如何使用 JSP 实现它?