2016-03-21 14 views
1

Ich bin neu mit JSF/Java und relationalen DB-Abfragen.Anzeige von Daten aus mehreren Tabellen

Ich versuche, Daten aus zwei Tabellen in einer Datentabelle anzuzeigen.

Ich habe zwei Tabellen tblUser und tblCity.

Für diese Tabellen habe ich zwei Modelle Benutzer und Stadt. Hat auch einen UserDAO und einen UserController.

Ich würde gerne wissen, wie Benutzerdaten aus tblUser wählen und Stadt Daten aus tblCity und zeigen sie auf meiner Ansicht. Mit MVC-Stil.

Modell:

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 
    ... 
} 

mein Controller

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

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

} 

Mein 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; 
     } 
} 

My View

<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> 

Antwort

1

die Annahme, dass ein User eine City hat, können Sie ein city Attribut auf die User Klasse hinzufügen:

public class User{ 
    ... 
    private City city; 

    public City getCity() { 
     return city; 
    } 

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

In Ihrem userDAO am Ende der while-Schleife der showUserList() Methode, legen die Stadt in dem Benutzerobjekt :

... 
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); 
} 
... 

die Liste der Städte in den showUserList() Verfahren außerhalb des Verfahrens nicht verwendet wird, können Sie es löschen.

Und schließlich, bearbeiten Sie die Ansicht wie folgt aus:

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