JavaWeb项目练习--分类模块、图书模块
分类模块
1 分类模块的相关类创建
ywnxbx.bookstore.category
domain:Category
dao:CategoryDao
service:CategoryService
web.servlet:CategoryServlet
2 查询所有分类
流程:main.jsp(< iframe >) --> CategoryService#findAll() --> left.jsp
domain:
public class Category {
private String cid;
private String cname;
}
dao:
public class CategoryDao {
private QueryRunner qr = new TxQueryRunner();
/**
* 查询所有分类
* @return
*/
public List<Category> findAllCategory() {
String sql = "select * from category";
try {
return qr.query(sql, new BeanListHandler<Category>(Category.class));
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/**
* 添加分类
* @param category
*/
public void addCategory(Category category) {
String sql = "insert into category values(?,?)";
try {
qr.update(sql,category.getCid(),category.getCname());
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/**
* 删除分类
* @param cid
*/
public void deleteCategory(String cid) {
String sql = "delete from category where cid = ?";
try {
qr.update(sql,cid);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/**
* 加载分类
* @param cid
* @return
*/
public Category load(String cid) {
String sql = "select * from category where cid = ?";
try {
return qr.query(sql, new BeanHandler<Category>(Category.class),cid);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/**
* 修改分类名称
* @param category
*/
public void edit(Category category) {
String sql = "update category set cname = ? where cid = ?";
try {
qr.update(sql,category.getCname(),category.getCid());
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
service:
public class CategoryService {
private CategoryDao categoryDao = new CategoryDao();
private BookDao bookDao = new BookDao();
/**
* 查询所有分类
* @return
*/
public List<Category> findAllCategory() {
return categoryDao.findAllCategory();
}
/**
* 添加分类
* @param category
*/
public void addCategory(Category category) {
categoryDao.addCategory(category);
}
/**
* 删除分类
* @param string
* @throws CategoryException
*/
public void deleteCategory(String cid) throws CategoryException {
/*
* 检查此分类下是否含有图书
* 若有:不能删除此分类,抛出异常
* 调用方法删除
*/
int count = bookDao.getCountByCid(cid);
if(count > 0) throw new CategoryException("该分类下还有图书,不能删除");
categoryDao.deleteCategory(cid);
}
/**
* 加载分类
* @param cid
* @return
*/
public Category load(String cid) {
return categoryDao.load(cid);
}
/**
* 修改分类
* @param category
*/
public void edit(Category category) {
categoryDao.edit(category);
}
}
web.servlet
public class CategoryServlet extends BaseServlet {
private static final long serialVersionUID = 3352017120523237513L;
private CategoryService categoryService = new CategoryService();
/**
* 查询所有分类
* @param request
* @param response
* @return
* @throws ServletException
* @throws IOException
*/
public String findAllCategory(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//向request域中保存CategoryList
request.setAttribute("categoryList", categoryService.findAllCategory());
return "f:/jsps/left.jsp";
}
}
图书模块
1 创建相关类
ywnxbx.bookstore.book
domain:Book
dao:BookDao
service :BookService
web.servle:BookServlet
2 查询所有图书
流程:left.jsp(全部分类) BookServlet#findAll() /jsps/book/list.jsp
3 按分类查询图书
流程:left.jsp BookServlet#findByCategory() list.jsp
4 查询详细信息(加载)
流程:list.jsp(点击某一本书) BookServlet#load() desc.jsp
domain
public class Book {
private String bid;
private String bname;
private double price;
private String author;
private String image;
private Category category; //多方(书)关联一方(分类编号)
private boolean del;
}
dao
public class BookDao {
private QueryRunner qr = new TxQueryRunner();
/**
* 查询所有图书
* @return
*/
public List<Book> findAllBook(){
try {
String sql = "select * from book where del = false";
return qr.query(sql,new BeanListHandler<Book>(Book.class));
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/**
* 按类别编号查询
* @param cid
* @return
*/
public List<Book> findByCategory(String cid) {
try {
String sql = "select * from book where cid = ? and del = false";
return qr.query(sql,new BeanListHandler<Book>(Book.class),cid);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/**
* 加载指定图书
* @param bid
* @return
*/
public Book findByBid(String bid) {
try {
String sql = "select * from book where bid = ?";
/*
* 数据库表中cid无法与Book中Category完成映射,导致不能查询到cid
*
* 解决:
* 1.使用map做结果集 目的:将所有查询结果用键值对的方式保存
* 2.分别用map映射出Category和Book对象
* 3.将Category设置进Book中
*/
Map<String,Object> map = qr.query(sql,new MapHandler(),bid);
Category category = CommonUtils.toBean(map, Category.class);
Book book = CommonUtils.toBean(map, Book.class);
book.setCategory(category);
return book;
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/**
* 查询指定分类下图书数目
* @param cid
* @return
*/
public int getCountByCid(String cid) {
try {
String sql = "select count(*) from book where cid = ?";
Number count = (Number) qr.query(sql,new ScalarHandler(),cid);
return count.intValue();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/**
* 添加图书
* @param book
*/
public void add(Book book) {
try {
String sql = "insert into book values(?,?,?,?,?,?,false)";
Object[] params = {book.getBid(), book.getBname(), book.getPrice(),
book.getAuthor(), book.getImage(), book.getCategory().getCid()
};
qr.update(sql, params);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/**
* 删除图书
* @param bid
*/
public void delete(String bid){
try {
String sql = "update book set del=true where bid = ?";
qr.update(sql, bid);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
/**
* 编辑图书
* @param book
*/
public void edit(Book book) {
try {
String sql = "update book set bname=?, price=?,author=?, image=?, cid=? where bid=?";
Object[] params = {book.getBname(), book.getPrice(),
book.getAuthor(), book.getImage(),
book.getCategory().getCid(), book.getBid()};
qr.update(sql, params);
} catch(SQLException e) {
throw new RuntimeException(e);
}
}
}
service
public class BookService {
private BookDao bookDao = new BookDao();
/**
* 查询所有图书
* @return
*/
public List<Book> findAllBook(){
return bookDao.findAllBook();
}
/**
* 按类别查询图书
* @param cid
* @return
*/
public List<Book> findByCategory(String cid) {
return bookDao.findByCategory(cid);
}
/**
* 加载指定图书
* @param bid
* @return
*/
public Book load(String bid) {
return bookDao.findByBid(bid);
}
/**
* 添加图书
* @param book
*/
public void add(Book book) {
bookDao.add(book);
}
/**
* 删除图书
* @param bid
*/
public void delete(String bid){
bookDao.delete(bid);
}
/**
* 编辑图书
* @param book
*/
public void edit(Book book) {
bookDao.edit(book);
}
}
servlet
public class BookServlet extends BaseServlet {
private static final long serialVersionUID = 1L;
private BookService bookService = new BookService();
/**
* 查询所有图书
* @param request
* @param response
* @return
* @throws ServletException
* @throws IOException
*/
public String findAllBook(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//查询所有图书,将查询结果保存到request中
request.setAttribute("bookList", bookService.findAllBook());
return "f:/jsps/book/list.jsp";
}
/**
* 按分类查询图书
* @param request
* @param response
* @return
* @throws ServletException
* @throws IOException
*/
public String findByCategory(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//得到类别编号
String cid = request.getParameter("cid");
//按分类查询图书,将查询结果保存到request中
request.setAttribute("bookList", bookService.findByCategory(cid));
return "f:/jsps/book/list.jsp";
}
/**
* 加载指定图书
* @param request
* @param response
* @return
* @throws ServletException
* @throws IOException
*/
public String load(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//得到图书bid
String bid = request.getParameter("bid");
//通过bid查询,将结果保存到request中
request.setAttribute("book", bookService.load(bid));
return "f:/jsps/book/desc.jsp";
}
}
jsps:
1)desc.jsp 显示图书信息
<style type="text/css">
body {
font-size: 10pt;
}
div {
margin:20px;
border: solid 2px gray;
width: 150px;
height: 150px;
text-align: center;
}
li {
margin: 10px;
}
a {
background: url(<c:url value='/images/all.png'/>) no-repeat;
display: inline-block;
background-position: 0 -70px;
margin-left: 30px;
height: 36px;
width: 146px;
}
a:HOVER {
background: url(<c:url value='/images/all.png'/>) no-repeat;
display: inline-block;
background-position: 0 -106px;
margin-left: 30px;
height: 36px;
width: 146px;
}
</style>
</head>
<body>
<div>
<img src="<c:url value='/${book.image }'/>" border="0"/>
</div>
<ul>
<li>书名:${book.bname }</li>
<li>作者:${book.author }</li>
<li>单价:${book.price }</li>
</ul>
<form id="form" action="<c:url value='/CartServlet'/>" method="post">
<%--指定要调用的方法 --%>
<input type="hidden" name="method" value="add"/>
<input type="hidden" name="bid" value="${book.bid }"/>
<input type="text" size="3" name="count" value="1"/>
</form>
<a href="javascript:document.getElementById('form').submit();"></a>
</body>
2)list.jsp 遍历显示所有图书
<style type="text/css">
body {
font-size: 10pt;
}
.icon {
margin:10px;
border: solid 2px gray;
width: 160px;
height: 180px;
text-align: center;
float: left;
}
</style>
</head>
<body>
<c:forEach items="${bookList }" var="book">
<div class="icon">
<a href="<c:url value='/BookServlet?method=load&bid=${book.bid }'/>">
<img src="<c:url value='/${book.image }'/>" border="0"/></a> <br/>
<a href="<c:url value='/BookServlet?method=load&bid=${book.bid }'/>">${book.bname }</a>
</div>
</c:forEach>
</body>