分栏
书城项目-第一阶段:表单验证的实现
https://blog.csdn.net/qq_51625007/article/details/117197615
书城第二阶段——用户注册和登录
https://blog.csdn.net/qq_51625007/article/details/119642283
书城项目第三阶段及其源码
https://blog.csdn.net/qq_51625007/article/details/119838878
书城-第四阶段
https://blog.csdn.net/qq_51625007/article/details/119853085
书城项目第五阶段-图书模块
https://blog.csdn.net/qq_51625007/article/details/119853114
书城项目第五阶段-图书分页
https://blog.csdn.net/qq_51625007/article/details/119865262
书城项目第六阶段
https://blog.csdn.net/qq_51625007/article/details/119894580
书城项目第六、七阶段
https://blog.csdn.net/qq_51625007/article/details/119904621
书城第七阶段补充
https://blog.csdn.net/qq_51625007/article/details/120106587
书城项目第八阶段:使用Filter过滤器实现后台的权限管理
https://blog.csdn.net/qq_51625007/article/details/120164999
书城项目第九阶段
https://blog.csdn.net/qq_51625007/article/details/120186531
样式
源码
book 框架
src
com.atguigu
dao 框架
dao 代码
impl
BookDaoImpl
package com.atguigu.dao.impl; import com.atguigu.dao.BaseDao; import com.atguigu.dao.BookDao; import com.atguigu.pojo.Book; import java.util.List; public class BookDaoImpl extends BaseDao implements BookDao { @Override public int addBook(Book book) { String sql="insert into t_book(name,author,price,sales,stock,img_path) values(?,?,?,?,?,?)"; return update(sql,book.getName(),book.getAuthor(),book.getPrice(),book.getSales(),book.getStock(),book.getImgPath()); } @Override public int deleteBook(Integer id) { String sql="delete from t_book where id=?"; return update(sql,id); } @Override public int updateBook(Book book) { System.out.println("BookDaoImpl 程序在["+Thread.currentThread().getName()+"]中"); String sql ="update t_book set name=?,author=?,price=?,sales=?,stock=?,img_path=? where id=?"; return update(sql,book.getName(),book.getAuthor(),book.getPrice(),book.getSales(),book.getStock(),book.getImgPath(),book.getId()); } @Override public Book queryBookById(Integer id) { String sql="select id,name,author,price,sales,stock,img_path imgPath from t_book where id=?"; return queryForOne(Book.class,sql,id); } @Override public List<Book> queryBooks() { String sql="select id,name,author,price,sales,stock,img_path imgPath from t_book"; return queryForList(Book.class,sql); } @Override public Integer queryForPageTotalCount() { String sql="select count(*) from t_book"; Number count= (Number) queryForSingleValue(sql); return count.intValue(); } @Override public List<Book> queryForPageItems(int begin, int pageSize) { String sql="select id,name,author,price,sales,stock,img_path imgPath from t_book limit ?,?"; return queryForList(Book.class,sql,begin,pageSize); } //Ctrl+I @Override public Integer queryForPageTotalCountByPrice(int min, int max) { String sql="select count(*) from t_book where price between ? and ?"; Number count= (Number) queryForSingleValue(sql,min,max); return count.intValue(); } @Override public List<Book> queryForPageItemsByPrice(int begin, int pageSize, int min, int max) { String sql="select id,name,author,price,sales,stock,img_path imgPath" + " from t_book where price between ? and ? order by price limit ?,?"; return queryForList(Book.class,sql,min,max,begin,pageSize); } }
OrderDaoImpl
package com.atguigu.dao.impl; import com.atguigu.dao.BaseDao; import com.atguigu.dao.OrderDao; import com.atguigu.pojo.Order; import java.util.List; public class OrderDaoImpl extends BaseDao implements OrderDao { @Override public int saveOrder(Order order) { System.out.println("OrderDaoImpl 程序在["+Thread.currentThread().getName()+"]中"); String sql="insert into t_order(order_id,create_time,price,status,user_id)values(?,?,?,?,?)"; return update(sql,order.getOrderId(),order.getCreateTime(),order.getPrice(),order.getStatus(),order.getUserId()); } @Override public List<Order> queryOrders() { String sql = "select order_id orderId,create_time createTime,price,status,user_id from t_order"; return queryForList(Order.class, sql); } @Override public int changeOrderStatus(String orderId, int status) { String sql="update t_order set status=? where order_id=?"; return update(sql,status,orderId); } @Override public List<Order> queryByUserId(int userId) { String sql = "select order_id orderId,create_time createTime,price,status,user_id from t_order where user_id=?"; return queryForList(Order.class,sql,userId); } }
OrderItemDaoImpl
package com.atguigu.dao.impl; import com.atguigu.dao.BaseDao; import com.atguigu.dao.OrderItemDao; import com.atguigu.pojo.OrderItem; import java.util.List; public class OrderItemDaoImpl extends BaseDao implements OrderItemDao { @Override public int saveOrderItem(OrderItem orderItem) { System.out.println("OrderItemDaoImpl 程序在["+Thread.currentThread().getName()+"]中"); String sql="insert into t_order_item(name,count,price,total_price,order_id)values(?,?,?,?,?)"; return update(sql,orderItem.getName(),orderItem.getCount(),orderItem.getPrice(),orderItem.getTotalPrice(),orderItem.getOrderId()); } @Override public List<OrderItem> queryOrderItemByOrderId(String orderId) { String sql="select id,name,count,price,total_price totalPrice,order_id orderId from t_order_item where order_id=?"; return queryForList(OrderItem.class,sql,orderId); } }
UserDaoImpl
package com.atguigu.dao.impl; import com.atguigu.dao.BaseDao; import com.atguigu.dao.UserDao; import com.atguigu.pojo.User; public class UserDaoImpl extends BaseDao implements UserDao { @Override public User queryUserByUsername(String username) { String sql="select id,username,password,email from t_user where username=?"; return queryForOne(User.class,sql,username); } @Override public User queryUserByUsernameAndPassword(String username, String password) { String sql="select id,username,password,email from t_user where username=?and password=?"; return queryForOne(User.class,sql,username,password); } @Override public int saveUser(User user) { String sql="insert into t_user(username,password,email) values (?,?,?)"; return update(sql,user.getUsername(),user.getPassword(),user.getEmail()); } }
BaseDao
package com.atguigu.dao; import com.atguigu.utils.JdbcUtils; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanHandler; import org.apache.commons.dbutils.handlers.BeanListHandler; import org.apache.commons.dbutils.handlers.ScalarHandler; import java.sql.Connection; import java.sql.SQLException; import java.util.List; public abstract class BaseDao { //使用DbUtils操作数据库 private QueryRunner queryRunner=new QueryRunner(); /** * update() 方法用来执行,Insert\Update\Delete语句 * @return 如果返回-1,说明执行失败<br/>返回其他表示影响的行数 */ public int update(String sql,Object... args){ System.out.println("BaseDao 程序在["+Thread.currentThread().getName()+"]中"); Connection connection= JdbcUtils.getConnection(); try { return queryRunner.update(connection,sql,args); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } } /** * 查询返回一个javabean的sql语句 * @param type 返回的对象类型 * @param sql 执行的sql语句 * @param args sql对应的参数值 * @param <T> 返回类型的泛型 * @return */ public <T> T queryForOne(Class<T> type,String sql,Object... args){ Connection con=JdbcUtils.getConnection(); try { return queryRunner.query(con,sql,new BeanHandler<T>(type),args); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } } /** * 查询返回多个javabean的sql语句 * @param type 返回的对象类型 * @param sql 执行的sql语句 * @param args sql对应的参数值 * @param <T> 返回类型的泛型 * @return */ public <T>List<T> queryForList(Class<T> type,String sql,Object... args){ Connection con=JdbcUtils.getConnection(); try { return queryRunner.query(con,sql,new BeanListHandler<T>(type),args); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } } /** * 执行返回一行一列的sql语句 * @param sql 执行的sql语句 * @param args sql对应的参数值 * @return */ public Object queryForSingleValue(String sql,Object... args){ Connection conn=JdbcUtils.getConnection(); try { return queryRunner.query(conn,sql,new ScalarHandler(),args); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException(e); } } }
BookDao
package com.atguigu.dao; import com.atguigu.pojo.Book; import java.util.List; public interface BookDao { //Ctrl+Shift+T public int addBook(Book book); public int deleteBook(Integer id ); public int updateBook(Book book); public Book queryBookById(Integer id); public List<Book> queryBooks(); Integer queryForPageTotalCount(); List<Book> queryForPageItems(int begin, int pageSize); Integer queryForPageTotalCountByPrice(int min, int max); List<Book> queryForPageItemsByPrice(int begin, int pageSize, int min, int max); }
OrderDao
package com.atguigu.dao; import com.atguigu.pojo.Order; import java.util.List; public interface OrderDao { public int saveOrder(Order order); public List<Order> queryOrders(); public int changeOrderStatus(String orderId,int status); public List<Order> queryByUserId(int userId); }
OrderItemDao
package com.atguigu.dao; import com.atguigu.pojo.OrderItem; import java.util.List; public interface OrderItemDao { public int saveOrderItem(OrderItem orderItem); public List<OrderItem> queryOrderItemByOrderId(String orderId); }
UserDao
package com.atguigu.dao;//ALT+Enter Move... import com.atguigu.pojo.User; public interface UserDao { //Ctrl+Shift+T /** * 根据 用户名查询用户信息 * @param username 用户名 * @return 如果返回null,说明没有这个用户。 */ public User queryUserByUsername(String username); /** * 根据 用户名和密码查询用户信息 * @param username * @param password * @return 如果返回null,说明没有这个用户。 */ public User queryUserByUsernameAndPassword(String username,String password); /** * 保存用户信息 * @param user * @return 返回-1表示操作失败,其他是sql语句影响的行数 */ public int saveUser(User user); }
filter 框架
filter 代码
ManageFilter
package com.atguigu.filter; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import java.io.IOException; public class ManageFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest httpServletRequest= (HttpServletRequest) servletRequest; Object user = httpServletRequest.getSession().getAttribute("user"); if (user==null){ httpServletRequest.getRequestDispatcher("/pages/user/login.jsp").forward(servletRequest,servletResponse); }else { filterChain.doFilter(servletRequest,servletResponse); } } @Override public void destroy() { } }
TransactionFilter
package com.atguigu.filter; import com.atguigu.utils.JdbcUtils; import javax.servlet.*; import java.io.IOException; public class TransactionFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { try { filterChain.doFilter(servletRequest,servletResponse); JdbcUtils.commitAndClose();//提交事务 } catch (Exception e) { JdbcUtils.rollbackAndClose();//回滚事务 e.printStackTrace(); throw new RuntimeException(e);//把异常抛给Tomcat管理展示友好的错误页面 } } @Override public void destroy() { } }