有没有办法在<c:forEach>
中从jOOQ循环通过Result<Record>
?
下面是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>
有没有办法让我的getter方法更简单,比如:
public Result<Record> getUsers() {
Factory sql = new Factory(Database.getInstance().connect(), SQLDialect.MYSQL);
reutrn sql.select().from("users").fetch();
}
但是正如前面提到的,我不知道如何在<c:forEach>
中循环通过它,或者这是不可能的?
5条答案
按热度按时间afdcj2ne1#
看起来您希望像操作Map一样操作记录。下面是使用jOOQ实现这一点的方法:
请参阅此处的相关Javadoc:
ResultQuery.fetchMaps()
Result.intoMaps()
Record.intoMap()
jbose2ul2#
然后将返回的List放在请求属性(例如属性名称“users”)和jsp:
tpgth1q73#
这是Google对“jooq jsp”的最佳答案,因此(经过一些实验)这是另一种将JOOQ与JSP结合的方法,同时保留了JOOQ的类型安全和性能。
brccelvz4#
如果您经常将JOOQ与JSP一起使用,那么添加一个能够理解
Record
的ELResolver是值得的。下面是一个简单的实现:https://gist.github.com/dbichko/074641915157ac21996c
然后您需要将其注册到JSP引擎中。在
ServletContextListener
中是一个很好的位置:这样,您就可以将记录字段用作属性:
5ssjco0h5#
我会使用一个ORM库,比如Hibernate,这样您只需遍历一个普通的对象列表。
如果你只是在做JDBC操作的话,它可能看起来有点沉重,但是看起来你已经达到了它对你有用的地方。
然后像这样的DAO类...
显然,将Hibernate引入您的项目需要进行大量的设置,但我认为好处远远超过了这些。
编辑:我不认为JOOQ可以做ORM,但它似乎有一个行Map系统。如果你想坚持使用JOOQ,试着创建一个
RecordHandler
并使用fetchInto()
方法。