显示来自多个表的数据

Display Data from multiple tables

我是 JSF/Java 和关系数据库查询的新手。

我正在尝试在一个数据表中显示来自两个表的数据。

我有两个表 tblUser 和 tblCity。

对于这些表,我有两个模型用户和城市。 还有一个 UserDAO 和一个 UserController。

我想知道如何 select 来自 tblUser 的用户数据和 select 来自 tblCity 的城市数据,并在我的视图中显示它们。采用 MVC 风格。

型号:

public class User{
   private Integer user_id;
   private String user_name;
   private Integer City_id;

   //getter and setter
   ...
}


public class City{
   private Integer city_id;
   private String city_name;

   //getter and setter
   ...
}

我的控制器

@ManagedBean
@SessionScoped
public List<User> showUser(){

   List<User> users = new ArrayList<>();
   users= userDAO.showUserList();
   return users;

}

我的 DAO

@ManagedBean
@RequestScoped
public class userDAO{

    /**
     * Creates a new instance of patientDAO
     */
    private final connectToDB con = new connectToDB();

    public userDAO() {
    }
    public List<User> showUserList() {

            Connection dbConnection = null;

            dbConnection = con.getDBConnection();

            PreparedStatement pstmt = dbConnection
                    .prepareStatement("select a.user_id, a.user_name, b.city_name"
                            + " from users a, cities b WHERE a.city_id = b.city_id");
            ResultSet rs = pstmt.executeQuery();

            List<User> users = new ArrayList<>();
            List<City> cities = new ArrayList<>();

            while (rs.next()) {

                User user = new User();
                City city = new City();

                user.setUser_Id(rs.getInt("user_id"));
                user.setUser_Id(rs.getString("user_name"));

                city.setCity_Name(rs.getInt("city_name"));      


                users.add(user);
                cities.add(city);
            }
            // close resources
            rs.close();
            pstmt.close();

            dbConnection.close();


            return users;
        }
}

我的观点

<p:dataTable id="userDT" var="user" value="#{userController.showUserList()}">
    <p:column width="200" headerText="User Name">
        <h:outputText value="#{user.user_name}" />
    </p:column>

    <p:column width="200" headerText="City Name">
        <h:outputText value="#{...}" />
    </p:column>
</p:dataTable>

假设一个User有一个City,你可以给User添加一个city属性 class:

public class User{
    ...
    private City city;

    public City getCity() {
        return city;
    }

    public void setCity(City city) {
        this.city = city;
    }
    ...
}

在您的 userDAO 中,在 showUserList() 方法的 while 循环结束时,将城市放入用户对象中:

...
while (rs.next()) {
    User user = new User();
    City city = new City();

    user.setUser_Id(rs.getInt("user_id"));
    user.setUser_Id(rs.getString("user_name"));

    city.setCity_Name(rs.getInt("city_name"));      

    user.setCity(city);

    users.add(user);
}
...

showUserList()方法中的城市列表在方法外没有用到,可以删除。

最后,像这样编辑视图:

...
<p:column width="200" headerText="City Name">
    <h:outputText value="#{user.city.city_name}" />
</p:column>
...