2

Result<Record>jOOQからループする方法はあり<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;
}

ビューは次のとおりです。

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

私のゲッターメソッドを次のように単純にする方法はありますか?

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

しかし、前に述べたように、私はそれをループする方法がわかりません<c:forEach>、または多分それは不可能ですか?

4

5 に答える 5

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

そして、返されたリストをリクエスト属性(属性名「users」など)とjspに入れます。

<c:forEach var="u" items="${users}">
  ${u} <br />
</c:forEach>
于 2012-11-26T17:05:54.560 に答える
1

地図のようにレコードを操作したいようです。jOOQでこれを実現する方法は次のとおりです。

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

ここで関連するJavadocを参照してください。

于 2012-11-26T18:29:21.447 に答える
0

これは「jooqjsp」に対するGoogleのトップの回答であるため、(いくつかの実験の後)JOOQの型安全性とパフォーマンスを維持しながらJOOQとJSPを組み合わせる別の方法があります。

<%@ 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>
于 2013-11-22T06:37:20.900 に答える
0

JSPでJOOQを頻繁に使用する場合は、を理解するELResolverRecordを追加する価値があります。

簡単な実装は次のとおりです:https ://gist.github.com/dbichko/074641915157ac21996c

次に、それをJSPエンジンに登録する必要があります。ではServletContextListener他の場所と同じくらい良い場所です:

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

これにより、レコードフィールドをプロパティとして使用できます。

<c:forEach var="user" items="${users}">
  ${user.login} <br />
</c:forEach>
于 2014-10-03T00:40:15.980 に答える
-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();
}

明らかに、Hibernateをプロジェクトに組み込むためのセットアップなどはたくさんありますが、メリットはそれを上回っていると思います。

編集:JOOQがORMを実行できるとは思いませんが、行マッピングシステムがあるようです。JOOQを使い続けたい場合は、メソッドを作成しRecordHandlerて使用してみてくださいfetchInto()

于 2012-11-26T16:14:35.530 に答える