5.5 jsp查询操作

编写查询
需求:
1.在booklist.jsp页面需要显示所有图书类型
1.需要查询全部图书类型
Booklist.jsp

图书借阅系统

图书分类 全部   图书名称  是否借阅 请选择 未借阅 已借阅  

Servlet中查询的代码编写
查询图书类型

/**
 * 查询图书类型
 * @param request
 * @param response
 * @throws ServletException
 * @throws IOException
 */
protected void queryBookType(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
	//调用service层的方法
List<BookType> bookTypes=	bookTypeService.queryAll();
//存
HttpSession  session=request.getSession();
 session.setAttribute("bookTypes",bookTypes );
	
}

三层编写

public class BookTypeDaoImpl implements BookTypeDao {

private  QueryRunner  queryRunner=C3P0Util.getQueryRunner();

@Override
public List<BookType> queryAll() {
	String sql="SELECT  * from book_type";
	List<BookType> bookTypes=null;	
try {
	bookTypes=	queryRunner.query(sql,new BeanListHandler<BookType>(BookType.class));
} catch (SQLException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}
	return bookTypes;
}

}

页面是带3个条件的分页的动态查询
在servlet中需要获取到3个参数及当前页码数
参数:
图书分类
图书名称
是否借阅
当前页码数

分析:
页面 需要显示当前页码数 和总页数
最终页面要显示的数据:
图书的集合
当前页码数
总页数
选择图书类型及按图书名称和状态查询后 在对应的位置参数要回显

#7行数数据 如果每页显示3行–》3页
#总页数=总记录数/每页显示的行数 (总记录数%每页显示的行数==0)
#总页数=总记录数/每页显示的行数+1 (总记录数%每页显示的行数!=0)

#第一页
SELECT * from book_info LIMIT 0,3
#第二页
SELECT * from book_info LIMIT 3,3
#第三页
SELECT * from book_info LIMIT 6,3
#第一个参数与当前页码数的关系 (当前页码数-1)*每页显示的行数

–》将分页需要的参数 封装成javaBean

/**

  • 属性设置的顺序:1.pageSize(每页显示的行数) 2.rows(总行数) 3. pageNo(当前页码数)

  • @author Administrator

  • @param
    */
    public class PageBean {

    private List lists;// 存放当前页面 数据的集合
    private Integer pageNo = 1;// 当前页码数
    private Integer pageSize = 4; // 每页显示的行数
    private Integer totalPage;// 总页数
    private Integer rows;// 总行数

    public List getLists() {
    return lists;
    }

    public void setLists(List lists) {
    this.lists = lists;
    }

    public Integer getPageNo() {
    return pageNo;
    }

    public void setPageNo(Integer pageNo) {
    if (null == pageNo) {
    this.pageNo = 1;
    // 当前页码数 一直点击下一页 变成了 5了 但是数据库查询出来的总页数 只有3页
    // 这种情况 当前页码数=总页数(3)
    //如果在进行上述计算的时候 查询总页数的代码有问题 导致总页数=0
    //这个时候当前页码数=0
    } else if (pageNo > this.totalPage&&this.totalPage>0) { // --》totalPage有值–》pageSize(rows) 要预防多条件查询 总记录数为0 导致当前页码数为0 limit第一个参数为负数
    this.pageNo = this.totalPage;
    } else if(pageNo<=0){
    this.pageNo = 1;
    }else{
    this.pageNo=pageNo;
    }
    }

    public Integer getPageSize() {
    return pageSize;
    }

    public void setPageSize(Integer pageSize) {
    this.pageSize = pageSize;
    }

    public Integer getTotalPage() {
    return totalPage;
    }

    public Integer getRows() {
    return rows;
    }

    public void setRows(Integer rows) {
    this.rows = rows;
    //自动计算出总页数
    this.totalPage=rows%this.pageSize==0?rows/this.pageSize:rows/this.pageSize+1;
    }

}

动态条件查询分页代码编写:

分页动态查询Servlet
protected void queryBook(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 取调存转
String booktypeid = request.getParameter(“booktypeid”);
String bookname = request.getParameter(“bookname”);
String borrow = request.getParameter(“borrow”);
String pageno = request.getParameter(“pageno”);

	// 查询总行数
	int count = bookService.bookCount(Integer.parseInt(booktypeid), bookname, Integer.parseInt(borrow));
	// 创建分页工具类的对象
	PageBean<Book> pageBean = new PageBean<Book>();
	pageBean.setPageSize(3);// 每页显示的行数
	pageBean.setRows(count);
	// null 注意 pageno要检测是否为null 为null 报 NumberFromatException
	pageBean.setPageNo(Integer.parseInt(pageno));
	// 获取分页的第一个参数
	int first = (pageBean.getPageNo() - 1) * pageBean.getPageSize();
	// 调用service层 将 查询的条件及 limit的2个参数传递过去
List<Book> books=	bookService.queryBook(Integer.parseInt(booktypeid), bookname, Integer.parseInt(borrow), first,
			pageBean.getPageSize());

}

Service

public class BookServiceImpl implements BookService {

private BookDao bookdao = new BookDaoImpl();

@Override
public int addBook(Book book) {

	return bookdao.addBook(book);
}

@Override
public List<Book> queryBook(int booktype, String bookname, int borrow, int frist, int end) {
	// TODO Auto-generated method stub
	return bookdao.queryBook(booktype, bookname, borrow, frist, end);
}

@Override
public int bookCount(int booktype, String bookname, int borrow) {
	// TODO Auto-generated method stub
	return 0;
}

}

Dao
public interface BookDao {

int addBook(Book  book);

int bookCount(int booktype,String bookname, int borrow);
/**
 *  动态条件分页查询
 * @param booktype  图书类型id  0代码查询全部
 * @param bookname  图书名称
 * @param borrow    是否借阅  -1代码不按状态查询
 * @param frist    分页参数1
 * @param end      分页参数2
 * @return
 */
List<Book>  queryBook(int booktype,String bookname, int borrow,int frist,int end);

}

public class BookDaoImpl implements BookDao {

private QueryRunner queryRunner = C3P0Util.getQueryRunner();

@Override
public int addBook(Book book) {
	String sql = "insert into book_info(book_code,book_name,book_type,book_author,publish_press,publish_date,is_borrow) VALUES(?,?,?,?,?,?,?) ";
	int num = 0;
	try {
		num = queryRunner.update(sql, book.getBook_code(), book.getBook_name(), book.getBook_type(),
				book.getBook_author(), book.getPublish_press(), book.getPublish_date(), book.getIs_borrow());
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}

	return num;
}

@SuppressWarnings({ "unchecked", "rawtypes", "null" })
@Override
public List<Book> queryBook(int booktype, String bookname, int borrow, int frist, int end) {
	StringBuffer sb = new StringBuffer();
	List par = new ArrayList();
	List<Book> books = null;
	sb.append(
			"SELECT book_info.book_id,book_info.book_code,book_info.book_name,book_info.book_type,book_info.book_author,book_info.publish_press,book_info.publish_date,book_info.is_borrow,book_info.path, book_type.type_name FROM  book_info INNER JOIN book_type ON book_info.book_type = book_type.id  where  1=1");
	if (booktype != 0) {
		sb.append(" and  book_type=? ");
		par.add(booktype);
	}
	if (bookname != null && !"".equals(bookname)) {

		sb.append("  and book_name like ?");
		par.add("%" + bookname + "%");
	}
	if (borrow != -1) {
		sb.append("  and  is_borrow=?");
		par.add(borrow);
	}
	sb.append("  limit ?,?");
	par.add(frist);
	par.add(end);
	try {
		books = queryRunner.query(sb.toString(), new BeanListHandler<Book>(Book.class), par.toArray());
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	return books;
}

@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public int bookCount(int booktype, String bookname, int borrow) {
	StringBuffer sb = new StringBuffer();
	sb.append("select  COUNT(*) from book_info where  1=1 ");
	List par = new ArrayList();
	Long count = 0l;
	if (booktype != 0) {
		sb.append(" and  book_type=? ");
		par.add(booktype);
	}
	if (bookname != null && !"".equals(bookname)) {

		sb.append("   and book_name like ?");
		par.add("%" + bookname + "%");
	}
	if (borrow != -1) {
		sb.append("   and  is_borrow=?");
		par.add(borrow);
	}

	try {
		count = (Long) queryRunner.query(sb.toString(), new ScalarHandler(1), par.toArray());
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}

	return count.intValue();
}

}

测试
public class TestServlet {
public static void main(String[] args) {

	BookService bookService = new BookServiceImpl();
	// 取调存转
	String booktypeid = "1";
	String bookname = "我";
	String borrow = "0";
	String pageno = "1";

	// 查询总行数
	int count = bookService.bookCount(Integer.parseInt(booktypeid), bookname, Integer.parseInt(borrow));
	// 创建分页工具类的对象
	PageBean<Book> pageBean = new PageBean<Book>();
	pageBean.setPageSize(3);// 每页显示的行数
	pageBean.setRows(count);
	// null 注意 pageno要检测是否为null 为null 报 NumberFromatException
	pageBean.setPageNo(Integer.parseInt(pageno));
	// 获取分页的第一个参数
	int first = (pageBean.getPageNo() - 1) * pageBean.getPageSize();
	// 调用service层 将 查询的条件及 limit的2个参数传递过去
	List<Book> books = bookService.queryBook(Integer.parseInt(booktypeid), bookname, Integer.parseInt(borrow),
			first, pageBean.getPageSize());

	for (Book book : books) {
		System.out.println(book);
	}
}

}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值