我正在开发一个应用程序,用于显示我正在使用 displaytag
库并查询数据库中的数据,我正在使用 Ibatis
< / strong>即可。
我的数据库中有大约10k
个记录。在 UI
上我有链接转到下一页和上一页,但问题是当我转到下一页或上一页时,每次点击分页链接(例如页面) 1,2,3 ......,下一步),我的应用程序正在加载每个10k
条记录。表示每次点击都会获取所有10k
条记录。
我有什么遗漏或有其他方法可以尝试吗?
这是我的Jsp
:
<sfdisplay:table name="userList"
pagesize="10"
requestURI="/viewUserList.do"
uid="listOfValues"
sort="list"
decorator="com.xxx.xxx.xxx.xxx.xxx.xxx" excludedParams="password confirmPassword " >
<sfdisplay:setProperty name="basic.empty.showtable" value="true" />
<sfdisplay:column property="userName" titleKey="userlist.column.label.username" sortable="true" />
<sfdisplay:column property="firstName" titleKey="userlist.column.label.firstname" sortable="true" />
<sfdisplay:column property="lastName" titleKey="userlist.column.label.lastname" sortable="true" />
<sfdisplay:column property="orgs" titleKey="userlist.column.label.orgs" sortable="false" />
<sfdisplay:column property="modules" titleKey="userlist.column.label.modules" sortable="false" />
<sfdisplay:column property="roles" titleKey="userlist.column.label.roles" sortable="false" />
<sfdisplay:column property="action" titleKey="userlist.column.label.action" sortable="false" />
</sfdisplay:table>
修改 我想知道是否有任何东西可以通过使用displaytag的JSP方面完成?
更新: 这是查询:
<select id="selectUsers" resultClass="user"> SELECT u.user_id as userId, u.name as userName, u.first_name as firstName, u.last_name as lastName, u.LOCKED_AT_DATE as lockedAt FROM users u WHERE u.deleted IS NULL </select>
以下是部分列表实施
的更新jsp<sfdisplay:table name="userList"
pagesize="10"
requestURI="/viewUserList.do"
uid="listOfValues1"
partialList="true"
size="resultSize"
sort="external"
defaultsort="1"
答案 0 :(得分:0)
Displaytag“剪切”10k元素中的10个元素。必须为每个请求做到这一点。这就是它如此缓慢的原因。如果您的ibatis查询类似于select * from users
,LIMIT
将只包含所有10k用户。
建议#1 :在Ibatis中实现某种具有偏移功能的分页。几乎每个数据库都有这个(例如mysql使用{{1}})。使用该功能,您应该只能从数据库中的10k表中访问某些元素,而不是所有元素。
推荐#2 :对于“自定义”分页(和排序),您必须使用displaytag的partialList功能。因此,您必须实现分页功能并告诉displaytag您的查询在哪个页面上选择服务器端的数据。 (Example)
这些建议需要一些时间来实现,但是如果你坚持使用这种工具并且用户表会在下一次增长,那么这是我看到的唯一选择。