在大多数情况下,可以像上一篇文章所述的那样,借助Args参数对象来从数据库中查询出多条记录。但某些个别情况(例如查询语句过于复杂,您不知道怎么设置Args),您仍然可以使用原生SQL语句来进行查询,对应的Dao方法为:
Ls Dao.ls(String sql, int pageSize, int absPage)
此方法接受三个参数,分别为:原生的SQL查询语句, 每页显示的记录条数,当前显示的页码
对于不需要分页的多条记录查询,可以像这样:
Ls list= dao.ls("SELECT * FROM user_info WHERE type_id=1", 0, 1);
//即pageSize=0时将不分页(查询返回全部的记录)
对于需要分页的查询(例如每页显示5条记录),可以像这样:
Ls list= dao.ls("SELECT * FROM user_info WHERE type_id=1", 5, 1);
从上面的例子可以看到,此方法仍旧返回的为Ls记录集对象,通过该对象可以获得查询到的记录集合:
Rs[] rsArray = list.getItems();
如果存在分页,您可以方便地从Ls对象中获取分页信息,如:
总记录数: list.getRowCount();总页数: list.getPageCount();当前页: list.getAbsPage()
最后,我们来看一下完整的jsp页面代码:
代码示例:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="org.jdiy.core.*" %>
<html>
<head><title>JDiy demo</title></head>
<body>
<%
<%@ page import="org.jdiy.core.*" %>
<html>
<head><title>JDiy demo</title></head>
<body>
<%
//Web环境下用App类来获取JDiy上下文
App app = App.get();
App app = App.get();
//下面获取默认的数据库操作DAO
Dao dao = app.getDao();
//下面获取post/get过来的查询参数(即取得当前页),如果取不到正确的页码信息,则默认为第1页
Dao dao = app.getDao();
//下面获取post/get过来的查询参数(即取得当前页),如果取不到正确的页码信息,则默认为第1页
int currentPage = app.getInt("page",1);
//下面通过原生SQL语句创建查询
Ls ls = dao.ls("SELECT * FROM user_info WHERE type_id=1", 5, currentPage);
//下面通过原生SQL语句创建查询
Ls ls = dao.ls("SELECT * FROM user_info WHERE type_id=1", 5, currentPage);
//下面,我们在页面上循环输出内容:
for(Rs rs:ls.getItems()){
//为便于演示说明,这儿仅仅只输出了user_info的name字段。
//为便于演示说明,这儿仅仅只输出了user_info的name字段。
out.print( rs.get("name") + "<br />" );
}
//下面输出分页信息:
%>
总共<%=ls.getPageCount()%>页 / <%=ls.getRowCount()%>条记录
当前第<%=ls.getAbsPage()%>页
<a href="?page=1">首页</a>
转到:
<%
for(int i=1;i<=ls.getPageCount();i++){
out.println("<a href=\"?page=" + i + "\">第" + i + "页</a>");
}
%>
<a href="?page=<%=ls.getPageCount()%>">尾页</a>
</body>
</body>
</html>
有关更多Ls对象方法的信息,请参见JDiy API开发文档。