博主主页猫头鹰源码

博主简介:Java领域优质创作者、博客专家、公司架构师、全网粉丝5万+、专注Java技术领域和毕业设计项目实战

主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询

项目介绍: 

该系统创作于2022年2月,包含详细数据库设计。 基于springboot,数据层为MyBatis,mysql数据库,具有完整的业务逻辑。

项目功能:

用户:
登录注册系统
查看热门商品及最新商品
可以查看所有商品
以一级或二级分类查看商品
可以根据关键词搜索商品
查看商品详情,选择订购数量,加入购物车
查看个人中心或者修改个人信息
查看个人订单或详情,并可对订单状态操作
查看购物车,并可以下单
退出登录

后台管理员:
登录
用户管理:维护用户信息
分类管理:包含一级和二级分类的维护
订单管理:可以查看订单的详细信息,并可以操作状态
商品管理:可以维护商品信息
资讯管理:维护资讯信息
管理员管理:可以内部新增及维护管理员
退出登录

数据库表结构文档: 

基于springboot的水果商城系统_java

系统包含技术:

后端:SpringBoot+MyBatis
前端:BootStrap,Layui,js,css等
开发工具:idea
数据库:mysql 5.7
JDK版本:jdk1.8

部分截图说明:

下面是首页

基于springboot的水果商城系统_java_02

登录操作

基于springboot的水果商城系统_spring boot_03

 

所有商品查看

基于springboot的水果商城系统_java_04

 

分类查看

基于springboot的水果商城系统_java_05

详情商品

基于springboot的水果商城系统_java_06

资讯查看

基于springboot的水果商城系统_java_07

购物车

基于springboot的水果商城系统_java_08

我的订单

基于springboot的水果商城系统_mybatis_09

后台-首页

基于springboot的水果商城系统_后端_10

 后台-用户管理

基于springboot的水果商城系统_java_11

 后台-分类管理

基于springboot的水果商城系统_后端_12

 后台-商品管理

基于springboot的水果商城系统_javaweb_13

 后台-订单管理

基于springboot的水果商城系统_java_14

部分代码:

异常处理

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);
    }

}

以上就是部分功能展示,从整体上来看,本系统功能是十分完整的,界面设计简洁大方,交互友好,数据库设计也很合理,规模适中,代码工整,清晰,适合学习使用。

好了,今天就到这儿吧,小伙伴们点赞、收藏、评论,一键三连走起呀,下期见~~