2012-11-26 3 views
2

<c:forEach>에있는 Result<Record>을 jOOQ에서 루프하는 방법이 있습니까?루프 스루 결과

public Result<Record> getUsers() { 
    Factory sql = new Factory(Database.getInstance().connect(), SQLDialect.MYSQL); 
    reutrn sql.select().from("users").fetch(); 
} 

그러나 언급 한 바와 같이 이전 I :

<c:forEach var="u" items="${users}"> 
    ${u.login} <br /> 
</c:forEach> 

내 getter 메소드처럼 간단하게하는 방법이 있나요 : 여기

public Vector<Map<String, String>> getUsers() { 
    Factory sql = new Factory(Database.getInstance().connect(), SQLDialect.MYSQL); 
    Result<Record> results = sql.select().from("users").fetch(); 

    Vector<Map<String, String>> v = new Vector<Map<String, String>>(); 
    for(Record item: results) { 
     Map<String, String> m = new HashMap<String, String>(); 
     m.put("login", item.getValueAsString("login")); 
     // other columns 
     v.add(m); 
    } 
    return v; 
} 

뷰입니다 : 여기

는 getter 메소드입니다 <c:forEach>에서 루프를 수행하는 방법을 모르거나 불가능할 수 있습니까?

답변

1

당신이 그들이지도 인 것처럼 기록에서 작동하도록하려는 것으로 보인다합니다. 여기 jOOQ와이를 달성하는 방법은 다음과 같습니다

+0

고마워요. 설명서를 더 자세히 읽어야합니다. –

-1

나는 Hibernate와 같은 ORM 라이브러리를 사용할 것이므로 일반 객체리스트를 반복하면된다.

JDBC 작업 만 수행하면 조금 무거워 보일지 모르지만, 유용 할 곳을 찾은 것 같습니다. 이런 식으로 뭔가 ...

@Entity 
@Table(name = "users") 
class User { 
    private String login; 
    ... 
} 

다음과 같은 DAO 클래스 ...

public List<Users> getUsers() { 
    return (List<Users>)sessionFactory.getCurrentSession().createQuery("from Users").list(); 
} 

분명히이 설치 많이 그리고 프로젝트에 최대 절전 모드를 가지고 같은,하지만 난 혜택 outweight 생각 그.

편집 : JOOQ이 ORM을 수행 할 수 있다고 생각하지 않지만 행 매핑 시스템이있는 것으로 보입니다. JOOQ를 계속 사용하려면 RecordHandler을 만들고 fetchInto() 메소드를 사용해보십시오.

+0

이미 최대 절전/JPA 엔티티가있는 경우, 물론 당신이 [상호 작용할 수 : 그와

public void contextInitialized(ServletContextEvent sce) { ServletContext ctx = sce.getServletContext(); JspFactory.getDefaultFactory() .getJspApplicationContext(ctx).addELResolver(new RecordResolver()); } 

, 당신은 속성으로 레코드 필드를 사용할 수 있습니다 : A의 ServletContextListener는만큼 좋은 곳이다 jOOQ (http://www.jooq.org/doc/2.6/manual/sql-execution/fetching/pojos/)를 통해 그들과 함께. 일반적으로 최대 절전 모드로 다시 전환 할 필요가 없습니다 ... –

1
public List<String> getUsers() { 
    Factory sql = new Factory(Database.getInstance().connect(), SQLDialect.MYSQL); 
    Result<Record> results = sql.select().from("users").fetch(); 

    return results.getValues(loginFieldIndex); 
} 

그리고 당신은 요청 속성의 목록 반환 넣어 및 JSP (예를 이름 "사용자"속성.) :

<c:forEach var="u" items="${users}"> 
    ${u} <br /> 
</c:forEach> 
+0

하지만 그게 단지 하나의 열을 반환하고, 전체 테이블이 필요합니다 –

+0

나는 당신의 질문을 오해했습니다. 죄송합니다. – Robertiano

0

이것은 '의 최고 구글의 답변입니다 :

public List<Map<String, Object>> getUsers() { 
    Factory sql = new Factory(Database.getInstance().connect(), SQLDialect.MYSQL); 
    return sql.select().from("users").fetchMaps(); 
} 

여기에 관련 Javadoc을 참조하십시오 jooq jsp "그래서 (몇 가지 실험을 한 후) 여기 빗의 또 다른 방법입니다. JSP로 JOOQ를 도입하면서 JOOQ의 유형 안전성과 성능을 유지합니다. 당신이 JSP로 많이 JOOQ를 사용하는 경우

<%@ page isELIgnored="false" %> 
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 
<%@ page import="static com.example.jooq.tables.TblCats.*" %> 
<%@ page import="org.jooq.Result, org.jooq.Record" %> 

<h2>Length: ${fn:length(cats)}</h2> 

<c:forEach var="cat" items="${cats}"> 
<% Record cat = (Record) pageContext.getAttribute("cat"); %> 

<%= cat.getValue(TBL_CATS.TITLE) %>, 
<%= cat.getValue(TBL_CATS.POSITION) %> 

<br> 

</c:forEach> 
+0

이것은 확실히 흥미로운 것 같습니다. 'cats' 변수의 출처는 어디입니까? –