系统定制开发【项目实战】基于 springboot + mybatis + mysql 的电脑商城项目(附源码)

系统定制开发源码及数据库文件在文末链接中

 🎉系统定制开发电脑商城项目
✨系统定制开发欢迎大家访问我的个人博客:

🕶️系统定制开发详细信息如下
💖系统定制开发如果觉得本篇文章还不错的话,系统定制开发欢迎大家点赞👍+收藏❤️+评论🤞

目录


一、项目介绍

1.项目技术

springboot + mybatis + maven + ajax

2.项目数据库

t_user:用户表

t_product:产品表

t_address:用户地址表

t_order:订单主表

t_cart:购物车

t_order_item:订单详情表

t_dict_district:中国省市区表

t_product_cateory:产品分类表

3.项目截图及说明

说明:除了注册、登录、首页、商品详情页及静态页面未设置拦截,其余功能都需用户进行登录才能操作。

首页及

  • 热销排行以出售数量排序并从数据库中获取

 商品详细页

点击加入购物车后,进入购物车界面

  • 采用Pagehelper进行分页处理
  • 多选商品点击结算一并进入结算界面
  • 增减商品金额变化,同时在数据库发生变化

点击结算会将选中的商品进行结算

  • 结算后会在数据库中生成对应的订单信息

 用户模块

 修改密码

  • 用户的密码经过md5加密处理

 修改个人资料

  • 用户自定义信息,如果已经存在这些信息会异步显示

 修改头像

  • 用户上传头像,保存在服务器中
  • 上传完成后,会异步显示

 收货地址

  • 查看用户的收货地址

 新增收货地址

  • 省市区从数据库中获取并异步显示
  • 保存完信息后,会跳转到收货地址界面并进行显示

 登录及注册模块

  • 注册后的密码经过MD5加密

二、代码部分

部分代码如下:

1.application.properties

  1. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  2. spring.datasource.url=jdbc:mysql://localhost:3306/store
  3. spring.datasource.username=root
  4. spring.datasource.password=123456
  5. mybatis.mapper-locations=classpath:mapper/*.xml
  6. user.address.max-count=20
  7. spring.servlet.multipart.max-file-size=10MB
  8. spring.servlet.multipart.max-request-size=100MB
  9. mybatis.configuration.map-underscore-to-camel-case=true
  10. pagehelper.helper-dialect=mysql
  11. pagehelper.reasonable=true

2.UserController

  1. package com.xxx.store.controller;
  2. import com.xxx.store.controller.exception.*;
  3. import com.xxx.store.entity.User;
  4. import com.xxx.store.service.UserService;
  5. import com.xxx.store.util.JsonResult;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.web.bind.annotation.RequestMapping;
  8. import org.springframework.web.bind.annotation.RestController;
  9. import org.springframework.web.multipart.MultipartFile;
  10. import javax.servlet.http.HttpSession;
  11. import java.io.File;
  12. import java.io.IOException;
  13. import java.util.ArrayList;
  14. import java.util.List;
  15. import java.util.UUID;
  16. @RestController
  17. @RequestMapping("/users")
  18. public class UserController extends BaseController{
  19. @Autowired
  20. private UserService userService;
  21. @RequestMapping("regist")
  22. public JsonResult<Void> regist(User user){
  23. userService.regist(user);
  24. return new JsonResult<>(OK);
  25. }
  26. @RequestMapping("login")
  27. public JsonResult<User> login(String username, String password, HttpSession session){
  28. User login = userService.login(username, password);
  29. session.setAttribute("uid",login.getUid());
  30. session.setAttribute("username",login.getUsername());
  31. System.out.println("用户id:"+getUidFromSession(session)+"密码:"+getUsernameFromSession(session));
  32. return new JsonResult<User>(OK,login);
  33. }
  34. @RequestMapping("change_password")
  35. public JsonResult<Void> changePassword(String oldPassword,String newPassword,HttpSession session){
  36. Integer uid=getUidFromSession(session);
  37. String username = getUsernameFromSession(session);
  38. userService.changePassword(uid,username,oldPassword,newPassword);
  39. return new JsonResult<Void>(OK);
  40. }
  41. @RequestMapping("getInfo")
  42. public JsonResult<User> getInfo(HttpSession session){
  43. User user = userService.getByUid(getUidFromSession(session));
  44. return new JsonResult<>(OK, user);
  45. }
  46. @RequestMapping("changeInfo")
  47. public JsonResult<Void> changeInfo(HttpSession session,User user){
  48. userService.changeInfo(getUidFromSession(session),getUsernameFromSession(session),user);
  49. return new JsonResult<>(OK);
  50. }
  51. public static final int AVATAR_SIZE=10*1024*1024;
  52. public static final List<String> AVATAR_TYPE=new ArrayList<>();
  53. static {
  54. AVATAR_TYPE.add("image/png");
  55. AVATAR_TYPE.add("image/jpeg");
  56. AVATAR_TYPE.add("image/gif");
  57. AVATAR_TYPE.add("image/bmp");
  58. }
  59. @RequestMapping("changeAvatar")
  60. public JsonResult<String> changeAvatar(HttpSession session, MultipartFile file){
  61. if (file.isEmpty()){
  62. throw new FileEmptyException("文件为空");
  63. }
  64. if (file.getSize()>AVATAR_SIZE){
  65. throw new FileSizeException("文件大小超出限制");
  66. }
  67. if (!AVATAR_TYPE.contains(file.getContentType())){
  68. throw new FileTypeException("文件类型不支持");
  69. }
  70. String upload = "E:\\JavaCode\\store\\src\\main\\resources\\static\\upload";
  71. File dir = new File(upload);
  72. if (!dir.exists()){
  73. dir.mkdir();
  74. }
  75. String originalFilename = file.getOriginalFilename();
  76. //获取后缀
  77. String suffix=originalFilename.substring(originalFilename.lastIndexOf("."));
  78. String filename=UUID.randomUUID().toString()+suffix;
  79. File dest = new File(dir,filename);//空文件
  80. try {
  81. file.transferTo(dest);
  82. }catch (FileStateException e){
  83. throw new FileStateException("文件状态异常");
  84. } catch (IOException e) {
  85. throw new FileUploadException("文件读写异常");
  86. }
  87. String avatar="/upload/"+filename;
  88. userService.changeAvatar(getUidFromSession(session),avatar,getUsernameFromSession(session));
  89. return new JsonResult<>(OK,avatar);
  90. }
  91. }

3.

订单Mapper测试

  1. package com.xxx.store.mapper;
  2. import com.xxx.store.entity.Cart;
  3. import com.xxx.store.entity.Order;
  4. import com.xxx.store.entity.OrderItem;
  5. import org.junit.jupiter.api.Test;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import java.util.Date;
  9. @SpringBootTest
  10. public class OrderMapperTests {
  11. @Autowired
  12. OrderMapper orderMapper;
  13. @Test
  14. void insertOrder(){
  15. Order order = new Order();
  16. order.setUid(14);
  17. order.setRecvName("456");
  18. order.setRecvPhone("19345231589");
  19. orderMapper.insertOrder(order);
  20. }
  21. @Test
  22. void insertOrderItem(){
  23. OrderItem orderItem = new OrderItem();
  24. orderItem.setOid(1);
  25. orderItem.setPid(10000001);
  26. orderItem.setTitle("施耐德(Schneider) K15 经典款圆珠笔 (5支混色装)");
  27. orderMapper.insertOrderItem(orderItem);
  28. }
  29. }

三、注意事项

这里是一些使用时的注意事项

1.修改路径

config文件中的LoginInterceptorConfigurer的资源地址,这里配置addResourceHandler和addResourceLocations,使得可以从磁盘中读取图片、视频、音频等,使用时注意改到自己的磁盘路径,这里我使用的是项目下的static/upload的绝对路径

  1. @Override
  2. public void addResourceHandlers(ResourceHandlerRegistry registry) {
  3. registry.addResourceHandler("/upload/**")
  4. .addResourceLocations("file:E:/JavaCode/store/src/main/resources/static/upload/");
  5. }

 UserController中创建upload文件夹的位置,这里我使用的是项目下的static/upload的绝对路径

2.分页数据设置

在CartController中我设置的是一页展示三条数据,每次显示两页

  1. @RequestMapping({"","/"})
  2. public JsonResult<PageInfo<CartVO>> getCart(@RequestParam(value = "pn",defaultValue = "1")Integer pn,HttpSession session){
  3. PageHelper.startPage(pn,3);
  4. List<CartVO> cart = cartService.getCartByUid(getUidFromSession(session));
  5. PageInfo<CartVO> page = new PageInfo<>(cart,2);
  6. return new JsonResult<>(OK,page);
  7. }

 四、源码链接

链接:https://pan.baidu.com/s/15XCUlqeIV3eUsILkJ3cJgQ 
提取码:f31d

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发