2016-03-21 34 views
1

JSF/Java ve ilişkisel DB sorgularıyla yeni yapıyorum.Birden çok tablodan veri görüntüleme

Verileri iki tablodan bir veri tablosunda görüntülemeye çalışıyorum.

İki tablo tblUser ve tblCity var.

Bu tablolar için iki modeli kullanıyorum Kullanıcılar ve Şehir. Ayrıca bir UserDAO ve bir UserController var.

Kullanıcı verilerini tblUser'den nasıl seçeceğinizi ve şehir verilerini tblCity'den nasıl seçeceğimi ve bunları görünümümde göstermeyi öğrenmek istiyorum. MVC stili ile.

Modeli:

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

Benim Kontrolör

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

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

} 

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

Benim Görünüm

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

cevap

1

bir User bir City sahip olduğunu varsayalım, sen User sınıfa bir city özelliğini ekleyebilirsiniz:

public class User{ 
    ... 
    private City city; 

    public City getCity() { 
     return city; 
    } 

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

sizin userDAO yılında showUserList() yöntemin while döngüsünün sonunda, kullanıcı nesnesi kenti koymak :

... 
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() yönteminde şehirlerin listesi yönteminin dışında kullanılmaz, bunu silebilirsiniz.

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

Ve son olarak, bu gibi görünümü düzenlemek

İlgili konular