·我们在之前代码上实现一个搜索框
输入查询关键字:<input type="text" name="kw" value="<%=keyWord.equals("null")?"":keyWord%>">
<input type="submit" value="查询">
在这段代码中,我们将value值用一个判断语句写出,是为了在下一页是,搜索框的内容被保存下来。
·为了实现分页组件的重用,我们将分页显示的,翻页按钮和搜索框封装成一个jsp页面,并设置一个status值,当值为searchAll或searchLike时,分别表示,搜索全部的值和关键字搜索,即split_page.jsp:
其中要注意的是:在查询的结果集为空时,应该不显示上一页下一页按钮,否则点击会出错,在这里,我们用总记录数allRecorders来判断(具体代码见附件)。
·至于数据库操作和实体的分装,我们分别用DAO和javaBean实现,设计DataBaseConnection.java,Person.java,PersonDAO.java,PersonDAOImpl.java,DAOFactory.java五个类(其中PersonDAO.java是接口)。
1.其中DataBeaseConnection中实现,数据库的连接操作,在构造器中实现数据库连接,用getConnection()返回一个Connection,close()实现关闭操作。
2.Person类是一个javaBean,不多说。
3.PersonDAO定义了一个,对Person表进行操作的接口,有:
// 得到全部的记录数
public int getAllCount() throws Exception ;
// 得到模糊查询的记录数
public int getByLikeCount(String cond) throws Exception ;
// 得到全部的记录
public List queryAll(int currentPage,int lineSize) throws Exception ;
// 模糊查询记录
public List queryByLike(String cond,int currentPage,int lineSize) throws Exception ;
四个方法。
4.PersonDAOImpl是PersonDAO的实现,在这里我们通过DBMS的SQL语句实现了真分页:
例如关键字搜索,sql语句为:
SELECT id,uid,name,password FROM person WHERE uid LIKE ? OR name LIKE ? limit "+(currentPage-1)*lineSize+","+lineSize
Limit + 查询开始记录号(从0开始) + 查询的记录条数,其中,currentPage和lineSize是传递过来的参数。
查询所有的记录数为:SELECT id,uid,name,password FROM person limit "+(currentPage-1)*lineSize+","+lineSize
5.DAOFactory是一个工厂类,只有一个方法,
public static PersonDAO getPersonDAOInstance()
{
return new PersonDAOImpl() ;
}
返回一个接口
·关键的是对这些类的调用,我们不再放在jsp中,而是用一个servlet去处理,servlet通过session中设置的参数与jsp联系起来,通常像这种查询,我们将List添加到session中,再在jsp中获得,从而实现遍历与显示。这就实现了MVC模式,将jsp中的java代码减到最少。