博主主页:猫头鹰源码
博主简介:Java领域优质创作者、博客专家、公司架构师、全网粉丝5万+、专注Java技术领域和毕业设计项目实战
主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询
项目介绍:
该系统创作于2022年2月,包含详细数据库设计。 基于springboot,数据层为MyBatis,mysql数据库,具有完整的业务逻辑。
项目功能:
用户:
登录注册系统
查看热门商品及最新商品
可以查看所有商品
以一级或二级分类查看商品
可以根据关键词搜索商品
查看商品详情,选择订购数量,加入购物车
查看个人中心或者修改个人信息
查看个人订单或详情,并可对订单状态操作
查看购物车,并可以下单
退出登录
后台管理员:
登录
用户管理:维护用户信息
分类管理:包含一级和二级分类的维护
订单管理:可以查看订单的详细信息,并可以操作状态
商品管理:可以维护商品信息
资讯管理:维护资讯信息
管理员管理:可以内部新增及维护管理员
退出登录
数据库表结构文档:
系统包含技术:
后端:SpringBoot+MyBatis
前端:BootStrap,Layui,js,css等
开发工具:idea
数据库:mysql 5.7
JDK版本:jdk1.8
部分截图说明:
下面是首页
登录操作
所有商品查看
分类查看
详情商品
资讯查看
购物车
我的订单
后台-首页
后台-用户管理
后台-分类管理
后台-商品管理
后台-订单管理
部分代码:
异常处理
package com.mty.medicine.aspect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartException;
import com.mty.medicine.entity.pojo.ResultBean;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import java.io.Serializable;
import java.util.Set;
/**
* 统一异常处理
* 在Controller中抛出的异常,GlobalExceptionHandler中定义的处理方法可以起作用
* 其他的业务层异常也可以单独处理
*/
@ControllerAdvice
public class GlobalExceptionHandler implements Serializable{
private static final long serialVersionUID = 1L;
private static final Logger LOGGER = LoggerFactory.getLogger(GlobalExceptionHandler.class);
/**
* 默认的异常处理
*
* @param req
* @param e
* @return
* @throws Exception
*/
@ExceptionHandler(value = Exception.class)
@ResponseBody
public ResultBean<String> defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception {
//记录日志
LOGGER.error(e.getMessage(), e);
e.printStackTrace();
ResultBean<String> r = new ResultBean<>(e);
r.setData(req.getRequestURI());
return r;
}
@ExceptionHandler(value = RuntimeException.class)
public void runtimeExceptionHandler(HttpServletRequest req, HttpServletResponse res, Exception e) throws Exception {
//记录日志
LOGGER.error(e.getMessage(), e);
req.setAttribute("msg", e.getMessage());
//转发到error页面
req.getRequestDispatcher("/mall/user/error.html").forward(req, res);
}
/**
* 处理validation异常
*
* @param req
* @param e
* @return
* @throws Exception
*/
@ExceptionHandler(value = ConstraintViolationException.class)
@ResponseBody
public ResultBean<String> validationExceptionHandler(HttpServletRequest req, ConstraintViolationException e) throws Exception {
Set<ConstraintViolation<?>> violations = e.getConstraintViolations();
StringBuilder strBuilder = new StringBuilder();
for (ConstraintViolation<?> violation : violations) {
strBuilder.append(violation.getMessage() + ",");
}
LOGGER.error(strBuilder.toString(), e);
ResultBean<String> r = new ResultBean(strBuilder.toString());
r.setData(req.getRequestURI());
return r;
}
}
商品操作
package com.mty.medicine.web.user;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.mty.medicine.entity.Classification;
import com.mty.medicine.entity.OrderItem;
import com.mty.medicine.entity.Product;
import com.mty.medicine.entity.pojo.ResultBean;
import com.mty.medicine.service.ClassificationService;
import com.mty.medicine.service.ProductService;
import com.mty.medicine.service.ShopCartService;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
@Controller
@RequestMapping("/product")
public class ProductController {
@Autowired
private ProductService productService;
@Autowired
private ClassificationService classificationService;
@Autowired
private ShopCartService shopCartService;
/**
* 获取商品信息
*
* @param id
* @return
*/
@RequestMapping("/get.do")
public ResultBean<Product> getProduct(int id) {
Product product = productService.findById(id);
return new ResultBean<>(product);
}
/**
* 打开商品详情页面
*
* @param id
* @param map
* @return
*/
@RequestMapping("/get.html")
public String toProductPage(int id, Map<String, Object> map) {
Product product = productService.findById(id);
map.put("product", product);
return "mall/product/info";
}
/**
* 查找热门商品
*
* @return
*/
@ResponseBody
@RequestMapping("/hot.do")
public ResultBean<List<Product>> getHotProduct(int pageNo, int pageSize) {
List<Product> products = productService.findHotProduct(pageNo, pageSize);
return new ResultBean<>(products);
}
/**
* 查找最新商品
*
* @param pageNo
* @param pageSize
* @return
*/
@ResponseBody
@RequestMapping("/new.do")
public ResultBean<List<Product>> getNewProduct(int pageNo, int pageSize) {
List<Product> products = productService.findNewProduct(pageNo, pageSize);
return new ResultBean<>(products);
}
/**
* 查找所有商品
*
* @param pageNo
* @param pageSize
* @return
*/
@ResponseBody
@RequestMapping("/all.do")
public ResultBean<List<Product>> getAllProduct(int pageNo, int pageSize) {
List<Product> products = productService.findAllProduct(pageNo, pageSize);
return new ResultBean<>(products);
}
/**
* 搜索商品
*
* @param pageNo
* @param pageSize
* @return
*/
@ResponseBody
@RequestMapping("/search.do")
public ResultBean<List<Product>> search(int pageNo, int pageSize,String keyword) {
List<Product> products = productService.search(pageNo, pageSize,keyword);
return new ResultBean<>(products);
}
/**
* 打开分类查看商品页面
*
* @return
*/
@RequestMapping("/category.html")
public String toCatePage(int cid, Map<String, Object> map) {
Classification classification = classificationService.findById(cid);
map.put("category", classification);
return "mall/product/category";
}
/**
* @Description: 进入购物车
* @Param: []
* @return: java.lang.String
* @Author: Mr.Wang
* @Date: 2020/12/19
*/
@RequestMapping("/toCart.html")
public String toCart(){
return "mall/product/cart";
}
/**
* 按一级分类查找商品
*
* @param cid
* @param pageNo
* @param pageSize
* @return
*/
@ResponseBody
@RequestMapping("/category.do")
public ResultBean<List<Product>> getCategoryProduct(int cid, int pageNo, int pageSize) {
List<Product> products = productService.findByCid(cid, pageNo,pageSize);
return new ResultBean<>(products);
}
/**
* 按二级分类查找商品
*
* @param csId
* @param pageNo
* @param pageSize
* @return
*/
@ResponseBody
@RequestMapping("/categorySec.do")
public ResultBean<List<Product>> getCategorySecProduct(int csId, int pageNo, int pageSize) {
List<Product> products = productService.findByCsid(csId, pageNo,pageSize);
return new ResultBean<>(products);
}
/**
* 根据一级分类查询它所有的二级分类
* @param cid
* @return
*/
@ResponseBody
@RequestMapping("/getCategorySec.do")
public ResultBean<List<Classification>> getCategorySec(int cid){
List<Classification> list = classificationService.findByParentId(cid);
return new ResultBean<>(list);
}
/**
* 加购物车
*
* @param productId
* @param request
* @return
*/
@ResponseBody
@RequestMapping("/addCart.do")
public ResultBean<Boolean> addToCart(int productId,int number, HttpServletRequest request) throws Exception {
shopCartService.addCart(productId,number, request);
return new ResultBean<>(true);
}
/**
* 移除购物车
*
* @param request
* @return
*/
@ResponseBody
@RequestMapping("/delCart.do")
public ResultBean<Boolean> delToCart(String cartId, HttpServletRequest request) throws Exception {
shopCartService.remove(cartId, request);
return new ResultBean<>(true);
}
/**
* 查看购物车商品
* @param request
* @return
*/
@ResponseBody
@RequestMapping("/listCart.do")
public ResultBean<List<OrderItem>> listCart(HttpServletRequest request) throws Exception {
List<OrderItem> orderItems = shopCartService.listCart(request);
return new ResultBean<>(orderItems);
}
}
以上就是部分功能展示,从整体上来看,本系统功能是十分完整的,界面设计简洁大方,交互友好,数据库设计也很合理,规模适中,代码工整,清晰,适合学习使用。
好了,今天就到这儿吧,小伙伴们点赞、收藏、评论,一键三连走起呀,下期见~~