定制开发小程序基于Java+SpringBoot+vue+node.js的图书购物商城系统详细设计和实现

🍅 作者主页:

🍅 简介:Java定制开发小程序领域优质创作者🏆、【java李杨勇】公号作者✌  、学习资料、面试题库【关注我,都给你】

🍅定制开发小程序文末获取源码联系🍅

前言介绍:

       定制开发小程序随着信息技术的不断发展,定制开发小程序我们现在已经步入了信定制开发小程序息化的时代了,定制开发小程序而信息时代的代表便是定制开发小程序网络技术的日渐成熟,定制开发小程序而现在网络已经和我们定制开发小程序的生活紧密的联系起来了,定制开发小程序我们不敢想象没有网络定制开发小程序我们的生活会像怎么样,定制开发小程序也许就像食物中没有调定制开发小程序料现在的生活离开了网定制开发小程序络会变得索然无味。定制开发小程序通过网络我们可以足不定制开发小程序出户的做许多事情,例如图书、工作、娱乐、学习,购物、交友和购物等等许多我们数之不尽的事情,而就是因为网络我们的生活变得多姿多彩,或许有时甚至帮我们省下不少的时间和给予了我们更多的机遇。图书商城网站对我们来说就有这些意义。图书网站商城主要是一些企业为了不流失因为某种原因而没有到商店店里选购商品的图书商品客人而设计的一个通过 Internet 就能进行方便购物的系统,图书商城网站的诞生为商家们提供了很多的机遇。另外一个原因是现在网上购物对图书商品人们生活和工作中所产生的压力是很有用的,所以现在网购的需求量在不断的提升,然而有很大一部分人还是没有时间去选购自己喜欢的图书商品, 所以图书商城网站应运而生。在图书商城网站诞生之后,用户可以在空余的时间通过互联网来查看大量品种的家具商品信息,从而很方便地购买到自己心仪的图书之类的、在另外一方面就是提高了图书商家的销售额。总的来说,图书商城网站既满足了很多人的需要,也不会影响到工作或者浪费了休息的时间,它是一个很有意义的系统

完整地址:

功能截图:

用户登录:分为管理员和普通用户进行登录、也可以在这里进行用户注册。 

 录入相关用户信息进行用户注册。

前端用户首页:用户登录后、可以查看新上架的书籍和新闻等书籍、点击进入详情查看购买书籍、加入购物车以及对自己感兴趣的图书书籍收藏等操作和查看修改个人信息等。

 管理员首页:图书商城系统管理员登录后主要有如下功能模块:用户个人信息管理、修改密码、图书分类管理、图书商品详情管理、首页管理、新闻资讯管理、书籍列表管理、订单信息管理和发货信息管理等。

 书籍分类管理:

新闻资讯管理:

  添加和修改:

 书籍列表管理:管理员可以添加、修改、删除和查询书籍列表信息

 书籍详情:

订单管理:管理员可以查看订单信息、对订单状态进行修改、以及发货状态等操作 。 

发货信息管理:  

 前端书籍详情页:

 书籍详情页:查看书籍详情信息、可以加入购物车和收藏等查看、也可以查看用户评论信息等

 填写购物车信息等。

我的个人中心:

工具语言:

 开发工具:IDEA 2021.3、navicat for mysql 、postman。

开发语言:java、jdk1.8、mysql5、node.js 14。

硬件环境:Windows 10操作系统、Google浏览器等。

主要技术:springboot、mybatis-plus、vue、element UI、mysql等

关键代码:

用户相关:

  1. package com.controller;
  2. /**
  3. * 登录相关
  4. */
  5. @RequestMapping("users")
  6. @RestController
  7. public class UserController{
  8. @Autowired
  9. private UserService userService;
  10. @Autowired
  11. private TokenService tokenService;
  12. /**
  13. * 登录
  14. */
  15. @IgnoreAuth
  16. @PostMapping(value = "/login")
  17. public R login(String username, String password, String captcha, HttpServletRequest request) {
  18. UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
  19. if(user==null || !user.getPassword().equals(password)) {
  20. return R.error("账号或密码不正确");
  21. }
  22. String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
  23. return R.ok().put("token", token);
  24. }
  25. /**
  26. * 注册
  27. */
  28. @IgnoreAuth
  29. @PostMapping(value = "/register")
  30. public R register(@RequestBody UserEntity user){
  31. // ValidatorUtils.validateEntity(user);
  32. if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
  33. return R.error("用户已存在");
  34. }
  35. userService.insert(user);
  36. return R.ok();
  37. }
  38. /**
  39. * 退出
  40. */
  41. @GetMapping(value = "logout")
  42. public R logout(HttpServletRequest request) {
  43. request.getSession().invalidate();
  44. return R.ok("退出成功");
  45. }
  46. /**
  47. * 密码重置
  48. */
  49. @IgnoreAuth
  50. @RequestMapping(value = "/resetPass")
  51. public R resetPass(String username, HttpServletRequest request){
  52. UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
  53. if(user==null) {
  54. return R.error("账号不存在");
  55. }
  56. user.setPassword("123456");
  57. userService.update(user,null);
  58. return R.ok("密码已重置为:123456");
  59. }
  60. /**
  61. * 列表
  62. */
  63. @RequestMapping("/page")
  64. public R page(@RequestParam Map<String, Object> params,UserEntity user){
  65. EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
  66. PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
  67. return R.ok().put("data", page);
  68. }
  69. /**
  70. * 列表
  71. */
  72. @RequestMapping("/list")
  73. public R list( UserEntity user){
  74. EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
  75. ew.allEq(MPUtil.allEQMapPre( user, "user"));
  76. return R.ok().put("data", userService.selectListView(ew));
  77. }
  78. /**
  79. * 信息
  80. */
  81. @RequestMapping("/info/{id}")
  82. public R info(@PathVariable("id") String id){
  83. UserEntity user = userService.selectById(id);
  84. return R.ok().put("data", user);
  85. }
  86. /**
  87. * 获取用户的session用户信息
  88. */
  89. @RequestMapping("/session")
  90. public R getCurrUser(HttpServletRequest request){
  91. Long id = (Long)request.getSession().getAttribute("userId");
  92. UserEntity user = userService.selectById(id);
  93. return R.ok().put("data", user);
  94. }
  95. /**
  96. * 保存
  97. */
  98. @PostMapping("/save")
  99. public R save(@RequestBody UserEntity user){
  100. // ValidatorUtils.validateEntity(user);
  101. if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
  102. return R.error("用户已存在");
  103. }
  104. userService.insert(user);
  105. return R.ok();
  106. }
  107. /**
  108. * 修改
  109. */
  110. @RequestMapping("/update")
  111. public R update(@RequestBody UserEntity user){
  112. // ValidatorUtils.validateEntity(user);
  113. userService.updateById(user);//全部更新
  114. return R.ok();
  115. }
  116. /**
  117. * 删除
  118. */
  119. @RequestMapping("/delete")
  120. public R delete(@RequestBody Long[] ids){
  121. userService.deleteBatchIds(Arrays.asList(ids));
  122. return R.ok();
  123. }
  124. }

 拦截配置:

  1. package com.config;
  2. @Configuration
  3. public class InterceptorConfig extends WebMvcConfigurationSupport{
  4. @Bean
  5. public AuthorizationInterceptor getAuthorizationInterceptor() {
  6. return new AuthorizationInterceptor();
  7. }
  8. @Override
  9. public void addInterceptors(InterceptorRegistry registry) {
  10. registry.addInterceptor(getAuthorizationInterceptor()).addPathPatterns("/**").excludePathPatterns("/static/**");
  11. registry.addInterceptor(getAuthorizationInterceptor()).addPathPatterns("/**").excludePathPatterns("/upload/**");
  12. // registry.addInterceptor(getAuthorizationInterceptor()).addPathPatterns("/**").excludePathPatterns("/virtuel/**");
  13. super.addInterceptors(registry);
  14. }
  15. /**
  16. * springboot 2.0配置WebMvcConfigurationSupport之后,会导致默认配置被覆盖,要访问静态资源需要重写addResourceHandlers方法
  17. */
  18. @Override
  19. public void addResourceHandlers(ResourceHandlerRegistry registry) {
  20. registry.addResourceHandler("/**")
  21. .addResourceLocations("classpath:/resources/")
  22. .addResourceLocations("classpath:/static/")
  23. .addResourceLocations("classpath:/upload/")
  24. .addResourceLocations("classpath:/admin/")
  25. .addResourceLocations("classpath:/front/")
  26. .addResourceLocations("classpath:/public/");
  27. registry.addResourceHandler("/upload/**").addResourceLocations("file:D:/work/");
  28. super.addResourceHandlers(registry);
  29. }
  30. }

 全局yml配置:

  1. # Tomcat
  2. server:
  3. tomcat:
  4. uri-encoding: UTF-8
  5. port: 8080
  6. servlet:
  7. context-path: /springbootUCW7v
  8. spring:
  9. datasource:
  10. driverClassName: com.mysql.jdbc.Driver
  11. url: jdbc:mysql://127.0.0.1:3306/springbootUCW7v?useUnicode=true&characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
  12. username: root
  13. password: 123456
  14. servlet:
  15. multipart:
  16. max-file-size: 10MB
  17. max-request-size: 10MB
  18. resources:
  19. static-locations: classpath:/testStatic/,classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
  20. #mybatis
  21. mybatis-plus:
  22. mapper-locations: classpath*:mapper/*.xml
  23. #实体扫描,多个package用逗号或者分号分隔
  24. typeAliasesPackage: com.entity
  25. global-config:
  26. #主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
  27. id-type: 1
  28. #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
  29. field-strategy: 2
  30. #驼峰下划线转换
  31. db-column-underline: true
  32. #刷新mapper 调试神器
  33. refresh-mapper: true
  34. #逻辑删除配置
  35. logic-delete-value: -1
  36. logic-not-delete-value: 0
  37. #自定义SQL注入器
  38. sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector
  39. configuration:
  40. map-underscore-to-camel-case: true
  41. cache-enabled: false
  42. call-setters-on-nulls: true
  43. #springboot 项目mybatis plus 设置 jdbcTypeForNull (oracle数据库需配置JdbcType.NULL, 默认是Other)
  44. jdbc-type-for-null: 'null'
  45. #文件虚拟路径
  46. virtuel:
  47. filePath: C:/Users/Administrator/Desktop/lyy/

数据库设计:

数据库名:springboot-book

文档版本:V1.0.0

文档描述:图书商城系统数据库表设计描述

表config (配置文件)

编号

名称

数据类型

长度

小数位

允许空值

主键

说明

1

id

bigint

20

0

N

Y

2

name

varchar

100

0

N

N

配置参数名称

3

value

varchar

100

0

Y

N

配置参数值

表dingdanxinxi (订单信息)

编号

名称

数据类型

长度

小数位

允许空值

主键

说明

1

id

bigint

20

0

N

Y

2

addtime

timestamp

19

0

N

N

3

dingdanbianhao

varchar

200

0

Y

N

订单编号

4

shujimingcheng

varchar

200

0

Y

N

书籍名称

5

fenlei

varchar

200

0

Y

N

分类

6

fengmian

varchar

200

0

Y

N

封面

7

jiage

varchar

200

0

Y

N

价格

8

shuliang

int

10

0

Y

N

数量

9

zongjiage

varchar

200

0

Y

N

总价格

10

xiadanriqi

date

10

0

Y

N

下单日期

11

beizhu

varchar

200

0

Y

N

备注

12

yonghuming

varchar

200

0

Y

N

用户名

13

shouji

varchar

200

0

Y

N

手机

14

dizhi

varchar

200

0

Y

N

地址

15

ispay

varchar

200

0

Y

N

是否支付

表discussshuji (书籍评论表)

编号

名称

数据类型

长度

小数位

允许空值

主键

说明

1

id

bigint

20

0

N

Y

2

addtime

timestamp

19

0

N

N

3

refid

bigint

20

0

N

N

关联表id

4

content

varchar

200

0

N

N

评论内容

5

userid

bigint

20

0

N

N

用户id

表fahuoxinxi (发货信息)

编号

名称

数据类型

长度

小数位

允许空值

主键

说明

1

id

bigint

20

0

N

Y

2

addtime

timestamp

19

0

N

N

3

dingdanbianhao

varchar

200

0

Y

N

订单编号

4

shujimingcheng

varchar

200

0

Y

N

书籍名称

5

fengmian

varchar

200

0

Y

N

封面

6

shuliang

varchar

200

0

Y

N

数量

7

fahuoriqi

date

10

0

Y

N

发货日期

8

yonghuming

varchar

200

0

Y

N

用户名

9

shouji

varchar

200

0

Y

N

手机

10

dizhi

varchar

200

0

Y

N

地址

11

dingdanzhuangtai

varchar

200

0

N

N

订单状态

表news (新闻资讯)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

id

bigint

20

0

N

Y

2

addtime

timestamp

19

0

N

N

CURRENT_TIMESTAMP

3

title

varchar

200

0

N

N

标题

4

picture

varchar

200

0

N

N

图片

5

content

longtext

2147483647

0

N

N

内容

表shuji (书籍)

编号

名称

数据类型

长度

小数位

允许空值

主键

1

id

bigint

20

0

N

Y

2

addtime

timestamp

19

0

N

N

3

shujibianhao

varchar

200

0

Y

N

4

shujimingcheng

varchar

200

0

N

N

5

fenlei

varchar

200

0

N

N

6

fengmian

varchar

200

0

Y

N

7

zuozhe

varchar

200

0

Y

N

8

chubanshe

varchar

200

0

Y

N

9

jiage

int

10

0

Y

N

10

shuliang

int

10

0

Y

N

11

shujijieshao

longtext

2147483647

0

Y

N

12

clicktime

datetime

19

0

Y

N

13

clicknum

int

10

0

Y

N

表shujifenlei (书籍分类)

编号

名称

数据类型

长度

小数位

允许空值

主键

说明

1

id

bigint

20

0

N

Y

2

addtime

timestamp

19

0

N

N

3

fenlei

varchar

200

0

N

N

分类

表storeup (收藏表)

编号

名称

数据类型

长度

小数位

允许空值

主键

说明

1

id

bigint

20

0

N

Y

2

addtime

timestamp

19

0

N

N

3

userid

bigint

20

0

N

N

用户id

4

refid

bigint

20

0

Y

N

收藏id

5

tablename

varchar

200

0

Y

N

表名

6

name

varchar

200

0

N

N

收藏名称

7

picture

varchar

200

0

N

N

收藏图片

表token (token表)

编号

名称

数据类型

长度

小数位

允许空值

主键

说明

1

id

bigint

20

0

N

Y

2

userid

bigint

20

0

N

N

用户id

3

username

varchar

100

0

N

N

用户名

4

tablename

varchar

100

0

Y

N

表名

5

role

varchar

100

0

Y

N

角色

6

token

varchar

200

0

N

N

密码

7

addtime

timestamp

19

0

N

N

新增时间

8

expiratedtime

timestamp

19

0

N

N

过期时间

表users (用户表)

编号

名称

数据类型

长度

小数位

允许空值

主键

说明

1

id

bigint

20

0

N

Y

2

username

varchar

100

0

N

N

用户名

3

password

varchar

100

0

N

N

密码

4

role

varchar

100

0

Y

N

角色

5

addtime

timestamp

19

0

N

N

新增时间

表yonghu (用户)

编号

名称

数据类型

长度

小数位

允许空值

主键

说明

1

id

bigint

20

0

N

Y

2

addtime

timestamp

19

0

N

N

3

yonghuming

varchar

200

0

N

N

用户名

4

mima

varchar

200

0

N

N

密码

5

xingming

varchar

200

0

N

N

姓名

6

xingbie

varchar

200

0

Y

N

性别

7

touxiang

varchar

200

0

Y

N

头像

8

shouji

varchar

200

0

Y

N

手机

9

dizhi

varchar

200

0

Y

N

地址

项目总结:

  经过近期对 java 面向对象程序设计、前端知识以及JAVA 框架的掌握和学习,以及这段时间本图书商品网站系统的开发,让我更加了解到 java 学习的重要性。在开发这个系统是哪个,我完成了多个实验以及教育系统的功能测试,在这个阶段的系统开发学习当中,我从认识到熟悉java,而后到能够自主运用相关技术。通过对 java 相关技术的了解和学习,我发现了它确实有很多方便之处,比如java集抽象性和封装性以及继承性和多态性于一体,实现了对代码重用和代码扩充功能,提高了整体软件开发的速度和效率。对于我们计算机这个专业来说学好 java 语言是很重要的一部分,所以在开发这个教学管理系统项目的过程中我都尽力理解 java 编程思想、掌握基本技巧,常见的方法和对错误的解决能力、尽量学到最多的知识。 我学习程序设计的主要目的就是提高自己实际问题的程序解决方案的关键技能和技术, java 面向对象程序设计是一科实践性相对来说非常比较强的语言了、springMVC框架的MVC三层架构模式、和框架中遇到的设计模式将数据访问和逻辑操作都集中到组件里面去了 , 增强了系统的复用性和扩展性。使系统的扩展性大大增强。以及前端jQuery、js、jsp、css样式的掌握让我对网页的布局、样式调整、字体等让网页效果实现的更加精准。 

系列推荐:

源码获取:

大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻微信公众号获取联系方式👇🏻👇🏻👇🏻

打卡 文章 更新 136/  365天

 精彩专栏推荐订阅:下方专栏👇🏻👇🏻👇🏻👇🏻

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