🍅 作者主页:
🍅 简介: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等
关键代码:
用户相关:
-
- package com.controller;
-
-
- /**
- * 登录相关
- */
- @RequestMapping("users")
- @RestController
- public class UserController{
-
- @Autowired
- private UserService userService;
-
- @Autowired
- private TokenService tokenService;
-
- /**
- * 登录
- */
- @IgnoreAuth
- @PostMapping(value = "/login")
- public R login(String username, String password, String captcha, HttpServletRequest request) {
- UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
- if(user==null || !user.getPassword().equals(password)) {
- return R.error("账号或密码不正确");
- }
- String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
- return R.ok().put("token", token);
- }
-
- /**
- * 注册
- */
- @IgnoreAuth
- @PostMapping(value = "/register")
- public R register(@RequestBody UserEntity user){
- // ValidatorUtils.validateEntity(user);
- if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
- return R.error("用户已存在");
- }
- userService.insert(user);
- return R.ok();
- }
-
- /**
- * 退出
- */
- @GetMapping(value = "logout")
- public R logout(HttpServletRequest request) {
- request.getSession().invalidate();
- return R.ok("退出成功");
- }
-
- /**
- * 密码重置
- */
- @IgnoreAuth
- @RequestMapping(value = "/resetPass")
- public R resetPass(String username, HttpServletRequest request){
- UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
- if(user==null) {
- return R.error("账号不存在");
- }
- user.setPassword("123456");
- userService.update(user,null);
- return R.ok("密码已重置为:123456");
- }
-
- /**
- * 列表
- */
- @RequestMapping("/page")
- public R page(@RequestParam Map<String, Object> params,UserEntity user){
- EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
- PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
- return R.ok().put("data", page);
- }
-
- /**
- * 列表
- */
- @RequestMapping("/list")
- public R list( UserEntity user){
- EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
- ew.allEq(MPUtil.allEQMapPre( user, "user"));
- return R.ok().put("data", userService.selectListView(ew));
- }
-
- /**
- * 信息
- */
- @RequestMapping("/info/{id}")
- public R info(@PathVariable("id") String id){
- UserEntity user = userService.selectById(id);
- return R.ok().put("data", user);
- }
-
- /**
- * 获取用户的session用户信息
- */
- @RequestMapping("/session")
- public R getCurrUser(HttpServletRequest request){
- Long id = (Long)request.getSession().getAttribute("userId");
- UserEntity user = userService.selectById(id);
- return R.ok().put("data", user);
- }
-
- /**
- * 保存
- */
- @PostMapping("/save")
- public R save(@RequestBody UserEntity user){
- // ValidatorUtils.validateEntity(user);
- if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
- return R.error("用户已存在");
- }
- userService.insert(user);
- return R.ok();
- }
-
- /**
- * 修改
- */
- @RequestMapping("/update")
- public R update(@RequestBody UserEntity user){
- // ValidatorUtils.validateEntity(user);
- userService.updateById(user);//全部更新
- return R.ok();
- }
-
- /**
- * 删除
- */
- @RequestMapping("/delete")
- public R delete(@RequestBody Long[] ids){
- userService.deleteBatchIds(Arrays.asList(ids));
- return R.ok();
- }
- }
拦截配置:
- package com.config;
-
-
- @Configuration
- public class InterceptorConfig extends WebMvcConfigurationSupport{
-
- @Bean
- public AuthorizationInterceptor getAuthorizationInterceptor() {
- return new AuthorizationInterceptor();
- }
-
- @Override
- public void addInterceptors(InterceptorRegistry registry) {
- registry.addInterceptor(getAuthorizationInterceptor()).addPathPatterns("/**").excludePathPatterns("/static/**");
- registry.addInterceptor(getAuthorizationInterceptor()).addPathPatterns("/**").excludePathPatterns("/upload/**");
- // registry.addInterceptor(getAuthorizationInterceptor()).addPathPatterns("/**").excludePathPatterns("/virtuel/**");
-
- super.addInterceptors(registry);
- }
-
- /**
- * springboot 2.0配置WebMvcConfigurationSupport之后,会导致默认配置被覆盖,要访问静态资源需要重写addResourceHandlers方法
- */
- @Override
- public void addResourceHandlers(ResourceHandlerRegistry registry) {
- registry.addResourceHandler("/**")
- .addResourceLocations("classpath:/resources/")
- .addResourceLocations("classpath:/static/")
- .addResourceLocations("classpath:/upload/")
- .addResourceLocations("classpath:/admin/")
- .addResourceLocations("classpath:/front/")
- .addResourceLocations("classpath:/public/");
- registry.addResourceHandler("/upload/**").addResourceLocations("file:D:/work/");
- super.addResourceHandlers(registry);
- }
- }
全局yml配置:
- # Tomcat
- server:
- tomcat:
- uri-encoding: UTF-8
- port: 8080
- servlet:
- context-path: /springbootUCW7v
-
- spring:
- datasource:
- driverClassName: com.mysql.jdbc.Driver
- url: jdbc:mysql://127.0.0.1:3306/springbootUCW7v?useUnicode=true&characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
- username: root
- password: 123456
- servlet:
- multipart:
- max-file-size: 10MB
- max-request-size: 10MB
- resources:
- static-locations: classpath:/testStatic/,classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
-
- #mybatis
- mybatis-plus:
- mapper-locations: classpath*:mapper/*.xml
- #实体扫描,多个package用逗号或者分号分隔
- typeAliasesPackage: com.entity
- global-config:
- #主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
- id-type: 1
- #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
- field-strategy: 2
- #驼峰下划线转换
- db-column-underline: true
- #刷新mapper 调试神器
- refresh-mapper: true
- #逻辑删除配置
- logic-delete-value: -1
- logic-not-delete-value: 0
- #自定义SQL注入器
- sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector
- configuration:
- map-underscore-to-camel-case: true
- cache-enabled: false
- call-setters-on-nulls: true
- #springboot 项目mybatis plus 设置 jdbcTypeForNull (oracle数据库需配置JdbcType.NULL, 默认是Other)
- jdbc-type-for-null: 'null'
-
-
- #文件虚拟路径
- virtuel:
- 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天
精彩专栏推荐订阅:在下方专栏👇🏻👇🏻👇🏻👇🏻