一、分析

> 按图名查询(模糊)(分页)
> 按作者查询(分页)
> 按出版社查询(分页)
> 按id查询
> 多条件组合查询(分页)

二、代码

1.view层

(1)gj.jsp等

 <form action="<c:url value='/BookServlet'/>" method="get">
<input type="hidden" name="method" value="findByCombination" />
<table align="center">
<tr>
<td>书名:</td>
<td>
<input type="text" name="bname" />
</td>
</tr>
<tr>
<td>作者:</td>
<td>
<input type="text" name="author" />
</td>
</tr>
<tr>
<td>出版社:</td>
<td>
<input type="text" name="press" />
</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>
<input type="submit" value="搜  索" />
<input type="reset" value="重新填写" />
</td>
</tr>
</table>
</form>

2.servlet层

(1)BookServlet.java

 /**
* 按作者查
* @param req
* @param resp
* @return
* @throws ServletException
* @throws IOException
*/
public String findByAuthor(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
int currentPage = getCurrentPage(req);
String url = getUrl(req);
String author = req.getParameter("author");
PageBean<Book> pb = bookService.findByAuthor(author, currentPage);
pb.setUrl(url);
req.setAttribute("pb", pb);
return "f:/jsps/book/list.jsp";
} /**
* 按书名查
* @param req
* @param resp
* @return
* @throws ServletException
* @throws IOException
*/
public String findByBname(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
int currentPage = getCurrentPage(req);
String url = getUrl(req);
String bname = req.getParameter("bname");
PageBean<Book> pb = bookService.findByBname(bname, currentPage);
pb.setUrl(url);
req.setAttribute("pb", pb);
return "f:/jsps/book/list.jsp";
} /**
* 按出版社查询
* @param req
* @param resp
* @return
* @throws ServletException
* @throws IOException
*/
public String findByPress(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
int currentPage = getCurrentPage(req);
String url = getUrl(req);
String press = req.getParameter("press");
PageBean<Book> pb = bookService.findByPress(press, currentPage);
pb.setUrl(url);
req.setAttribute("pb", pb);
return "f:/jsps/book/list.jsp";
} /**
* 多条件组合查询
* @param req
* @param resp
* @return
* @throws ServletException
* @throws IOException
*/
public String findByCombination(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
int currentPage = getCurrentPage(req);
String url = getUrl(req);
Book criteria = CommonUtils.toBean(req.getParameterMap(), Book.class);
PageBean<Book> pb = bookService.findByCombination(criteria, currentPage);
pb.setUrl(url);
req.setAttribute("pb", pb);
return "f:/jsps/book/list.jsp";
} /**
* 按bid查询
* @param req
* @param resp
* @return
* @throws ServletException
* @throws IOException
*/
public String load(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String bid = req.getParameter("bid");
Book book = bookService.load(bid);
req.setAttribute("book", book);
return "f:/jsps/book/desc.jsp";
}

3.service层

(1)BookService.java

 /**
* 按书名查
* @param bname
* @param currentPage
* @return
*/
public PageBean<Book> findByBname(String bname, int currentPage) {
try {
return bookDao.findByBname(bname, currentPage);
} catch (SQLException e) {
throw new RuntimeException(e);
}
} /**
* 按作者查
* @param author
* @param currentPage
* @return
*/
public PageBean<Book> findByAuthor(String author, int currentPage) {
try {
return bookDao.findByAuthor(author, currentPage);
} catch (SQLException e) {
throw new RuntimeException(e);
}
} /**
* 按出版社查
* @param author
* @param currentPage
* @return
*/
public PageBean<Book> findByPress(String press, int currentPage) {
try {
return bookDao.findByPress(press, currentPage);
} catch (SQLException e) {
throw new RuntimeException(e);
}
} /**
* 多条件组合查询
* @param criteria
* @param currentPage
* @return
*/
public PageBean<Book> findByCombination(Book criteria, int currentPage) {
try {
return bookDao.findByCombination(criteria, currentPage);
} catch (SQLException e) {
throw new RuntimeException(e);
}
} /**
* 加载图书
* @param bid
* @return
*/
public Book load(String bid) {
try {
return bookDao.findById(bid);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}

4.dao层

(1)BookDao.java

     /**
* 按书名模糊查询
* @param bname
* @param currentPage
* @return
* @throws SQLException
*/
public PageBean<Book> findByBname(String bname, int currentPage) throws SQLException {
List<Expression> exprList = new ArrayList<Expression>();
exprList.add(new Expression("bname", "like", "%" + bname + "%"));
return findByCriteria(exprList, currentPage);
} /**
* 按作者查
* @param author
* @param currentpage
* @return
* @throws SQLException
*/
public PageBean<Book> findByAuthor(String author, int currentpage) throws SQLException {
List<Expression> exprList = new ArrayList<Expression>();
exprList.add(new Expression("author", "like", "%" + author + "%"));
return findByCriteria(exprList, currentpage);
} /**
* 按出版社查
* @param press
* @param currentpage
* @return
* @throws SQLException
*/
public PageBean<Book> findByPress(String press, int currentpage) throws SQLException {
List<Expression> exprList = new ArrayList<Expression>();
exprList.add(new Expression("press", "like", "%" + press + "%"));
return findByCriteria(exprList, currentpage);
} /**
* 多条件组合查询
* @param criteria
* @param currentPage
* @return
* @throws SQLException
*/
public PageBean<Book> findByCombination(Book criteria, int currentPage) throws SQLException {
List<Expression> exprList = new ArrayList<Expression>();
exprList.add(new Expression("bname", "like", "%" + criteria.getBname() + "%"));
exprList.add(new Expression("author", "like", "%" + criteria.getAuthor() + "%"));
exprList.add(new Expression("press", "like", "%" + criteria.getPress() + "%"));
return findByCriteria(exprList, currentPage);
} /**
* 通用的查询方法
* @param exprList
* @param currentPage
* @return
* @throws SQLException
*/
private PageBean<Book> findByCriteria(List<Expression> exprList,
int currentPage) throws SQLException {
/*
* 1. 得到pageSize
* 2. 得到totalRecords
* 3. 得到beanList
* 4. 创建PageBean,返回
*/
/*
* 1. 得到pageSize
*/
int pageSize = PageConfig.BOOK_PAGE_SIZE;
/*
* 2. 通过exprList来生成where子句
*/
StringBuilder whereSql = new StringBuilder(" where 1=1");
List<Object> params = new ArrayList<Object>();
for(Expression expr : exprList) {
/*
* 添加一个条件上,
* 1) 以and开头
* 2) 条件的名称
* 3) 条件的运算符,可以是=、!=、>、< ... is null,is null没有值
* 4) 如果条件不是is null,再追加问号,然后再向params中添加一与问号对应的值
*/
whereSql.append(" and ").append(expr.getName())
.append(" ").append(expr.getOperator()).append(" ");
// where 1=1 and bid = ?
if(!expr.getOperator().equalsIgnoreCase("is null")) {
whereSql.append("?");
params.add(expr.getValue());
}
} /*
* 3. 总记录数
*/
String sql = "select count(*) from t_book" + whereSql;
Number count = (Number) qr.query(sql, new ScalarHandler(), params.toArray());
int totalRecords = count.intValue();//得到了总记录数
/*
* 4. 得到beanList,即当前页记录
*/
sql = "select * from t_book" + whereSql + " order by orderBy limit ?,?";
params.add((currentPage - 1) * pageSize);//当前页首行记录的下标
params.add(pageSize);//每页记录数 List<Book> beanList = qr.query(sql, new BeanListHandler<Book>(Book.class), params.toArray()); /*
* 5. 创建PageBean,设置参数
*/
PageBean<Book> pb = new PageBean<Book>();
/*
* 其中PageBean没有url,这个任务由Servlet完成
*/
pb.setBeanList(beanList);
pb.setCurrentPage(currentPage);
pb.setPageSize(pageSize);
pb.setTotalRecords(totalRecords); return pb;
} /**
* 按bid查询
* @param bid
* @return
* @throws SQLException
*/
public Book findById(String bid) throws SQLException {
String sql = "select * from t_book where bid=?";
return qr.query(sql, new BeanHandler<Book>(Book.class), bid);
}

网上图书商城项目学习笔记-012BOOK模块查询2的更多相关文章

  1. 网上图书商城项目学习笔记-011Book模块查询(分页)

    一.流程分析 1.图书模块 2.分布分析 二.代码 1.view层 1)list.jsp <%@ page language="java" import="java ...

  2. 网上图书商城项目学习笔记-014购物车模块页面javascrip

    一.流程分析 二.代码 1.view层 (1)list.jsp <%@ page language="java" import="java.util.*" ...

  3. 网上图书商城项目学习笔记-037工具类之BaseServlet及统一中文编码

    1.统一中文编码分析 tomcat默认esetISO-8859-1编码,在servlet中,可能通过request的setCharacterEncoding(charset)和response.set ...

  4. 网上图书商城项目学习笔记-036工具类之CommonUtils及日期转换器

    1.CommonUtils.java package cn.itcast.commons; import java.util.Map; import java.util.UUID; import or ...

  5. 网上图书商城项目学习笔记-035工具类之JdbcUtils及TxQueryRunner及C3P0配置

    事务就是保证多个操作在同一个connection,TxQueryRunner通过JdbcUtils获取连接,而JdbcUtils通过ThreadLocal<Connection>确保了不同 ...

  6. 【Java EE 学习 25 上】【网上图书商城项目实战】

    一.概述 1.使用的jdk版本:1.6 2.java EE版本:1.6 3.指导老师:传智播客 王建 二.小项目已经实现的功能 普通用户: 1.登陆 2.注册 3.购物 4.浏览 管理员用户(全部管理 ...

  7. 基于SSH的网上图书商城-JavaWeb项目-有源码

    开发工具:Myeclipse/Eclipse + MySQL + Tomcat 项目简介: 技术:Java:JSP:JDBC,struts2,spring,hibernate数据库: mysqlweb ...

  8. JavaWeb网上图书商城完整项目--day02-4.regist页面提交表单时对所有输入框进行校验

    1.现在我们要将table表中的输入的参数全部提交到后台进行校验,我们提交我们是按照表单的形式提交,所以我们首先需要在table表外面添加一个表单 <%@ page language=" ...

  9. JavaWeb网上图书商城完整项目--24.注册页面的css样式实现

    现在框架已经做好了,即下来我们要对页面进行装饰了,第一步给每一个元素添加id 1.最外面的div添加id为divMain 2.第二个div添加id为divTitle,里面的span对应的id为span ...

随机推荐

  1. Lua 常用的shell命令

    lua作为一种小巧的脚本语言,其函数等动作可以使用shell命令进行运行和调试,以下是几个常用的shell命令.基本格式是  lua [选项参数] [脚本参数] (1)%lua 程序名.lua     ...

  2. 【转】Python的XML-RPC简介

    编写客户端提交数据到服务器处理是程序员最常碰到的几个问题之一.各种不同的语言对此都有相应的解决方案.比如Unix下,C程序员们可以用SUNRPC,Java程序员则使用RMI来处理.大多数语言还都可以使 ...

  3. scanf gets fgets区别与联系 puts fputs printf区别与联系

    组一:scanf( )函数 gets( )函数    fgets()函数都可用于输入字符串, 组二:printf( )函数 puts( )函数 fputs()函数则用于字符串的输出. 两组内部函数各有 ...

  4. layout_weight体验(实现按比例显示)

    在android开发中LinearLayout很常用,LinearLayout的内控件的android:layout_weight在某些场景显得非常重要,比如我们需要按比例显示.android并没用提 ...

  5. android实现可拖动按钮

    功能:在Android中实现可拖动按钮,同时实现按钮的点击功能 相关问题: 按钮拖动的界限限定. 按钮单击和拖动之间的冲突. 在界面未显示之前,获得View的高/宽. 问题描述: 如果不为按钮的拖动范 ...

  6. 野指针及c++指针使用注意点

    避免野指针的产生 “野指针”的成因主要有: 1)指针变量没有被初始化.任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气.所以,指针变量在创建的同时应当被初始化,要么将指 ...

  7. android studio 完整安装教程,已完全实践过

    直接去官方下载包含android sdk的安装包(约813M),之前就是没有包含android sdk (约214M)所以需要另外从dl-google下载android sdk,太麻烦了.下面就一步步 ...

  8. Android PopupWindow 点击消失解决办法

    1.点击PopupWindow 外部区域时,PopupWindow消失 popMenu = new PopupWindow(getApplicationContext()); popMenu.setW ...

  9. 2437: [Noi2011]兔兔与蛋蛋 - BZOJ

    Description Input 输入的第一行包含两个正整数 n.m.接下来 n行描述初始棋盘.其中第i 行包含 m个字符,每个字符都是大写英文字母"X".大写英文字母" ...

  10. c++ std::bitset

    转载自 作用:及  64位 移位  取或  用64个位存储64个位,取 或 merge . 然后查索引即知道id是否存在~~ 目标:省空间. #include <iostream> #in ...