Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)十九(用户中心)

  • ly-user:父工程,包含2个子工程:

  • ly-user-interface:实体及接口

  • ly-user-service:业务和服务

1、创建父module

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

修改打包方式

在这里插入图片描述

2、创建ly-user-interface

在这里插入图片描述

在这里插入图片描述

3、创建ly-user-service

(1)创建工程

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

(2)修改pom.xml引入依赖

在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns=“http://maven.apache.org/POM/4.0.0”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>

ly-user

com.leyou.service

1.0.0-SNAPSHOT

4.0.0

ly-user-service

org.springframework.boot

spring-boot-starter-web

org.springframework.cloud

spring-cloud-starter-netflix-eureka-client

org.mybatis.spring.boot

mybatis-spring-boot-starter

tk.mybatis

mapper-spring-boot-starter

mysql

mysql-connector-java

com.leyou.service

ly-user-interface

${leyou.latest.version}

(3)编写启动类

在这里插入图片描述

在这里插入图片描述

package com.leyou;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

import tk.mybatis.spring.annotation.MapperScan;

@SpringBootApplication

@EnableDiscoveryClient

@MapperScan(“com.leyou.user.mapper”)

public class LyUserApplication {

public static void main(String[] args) {

SpringApplication.run(LyUserApplication.class,args);

}

}

(4)创建mapper路径

在这里插入图片描述

(5)编写配置文件

在这里插入图片描述

在这里插入图片描述

server:

port: 8088

spring:

application:

name: user-service

datasource:

url: jdbc:mysql://127.0.0.1:3306/yun6

username: root

password: root

driver-class-name: com.mysql.jdbc.Driver

eureka:

client:

service-url:

defaultZone: http://127.0.0.1:10086/eureka

instance:

prefer-ip-address: true

ip-address: 127.0.0.1

instance-id: e u r e k a . i n s t a n c e . i p − a d d r e s s . {eureka.instance.ip-address}. eureka.instance.ipaddress.{server.port}

lease-renewal-interval-in-seconds: 3

lease-expiration-duration-in-seconds: 10

mybatis:

type-aliases-package: com.leyou.item.pojo

(6)创建pojo

在这里插入图片描述

(7)添加网关路由

我们修改ly-gateway,添加路由规则,对ly-user-service进行路由:

在这里插入图片描述

user-service: /user/**

二、后台功能准备


1、数据结构

CREATE TABLE tb_user (

id bigint(20) NOT NULL AUTO_INCREMENT,

username varchar(50) NOT NULL COMMENT ‘用户名’,

password varchar(32) NOT NULL COMMENT ‘密码,加密存储’,

phone varchar(20) DEFAULT NULL COMMENT ‘注册手机号’,

created datetime NOT NULL COMMENT ‘创建时间’,

salt varchar(32) NOT NULL COMMENT ‘密码加密的salt值’,

PRIMARY KEY (id),

UNIQUE KEY username (username) USING BTREE

) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8 COMMENT=‘用户表’;

数据结构比较简单,因为根据用户名查询的频率较高,所以我们给用户名创建了索引

2、基本代码

实体类

注意:为了安全考虑。这里对password和salt添加了注解@JsonIgnore,这样在json序列化时,就不会把password和salt返回。

ly-user-interface添加依赖

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns=“http://maven.apache.org/POM/4.0.0”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>

ly-user

com.leyou.service

1.0.0-SNAPSHOT

4.0.0

ly-user-interface

javax.persistence

persistence-api

1.0

com.fasterxml.jackson.core

jackson-databind

tk.mybatis

mapper-core

1.0.4

在这里插入图片描述

在这里插入图片描述

package com.leyou.item.pojo;

import com.fasterxml.jackson.annotation.JsonIgnore;

import lombok.Data;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.Table;

import java.util.Date;

@Data

@Table(name = “tb_user”)

public class User {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

private Long id;

private String username;// 用户名

@JsonIgnore

private String password;// 密码

private String phone;// 电话

private Date created;// 创建时间

@JsonIgnore

private String salt;// 密码的盐值

}

mapper

在这里插入图片描述

在这里插入图片描述

public interface UserMapper extends Mapper {

}

Service

在这里插入图片描述

在这里插入图片描述

@Service

public class UserService {

@Autowired

private UserMapper userMapper;

}

3.数据验证功能

(1)接口说明:

实现用户数据的校验,主要包括对:手机号、用户名的唯一性校验。

接口路径

GET /check/{data}/{type}

参数说明:

| 参数 | 说明 | 是否必须 | 数据类型 | 默认值 |

| — | — | — | — | — |

| data | 要校验的数据 | 是 | String | 无 |

| type | 要校验的数据类型:1,用户名;2,手机; | 否 | Integer | 1 |

返回结果:

返回布尔类型结果:

  • true:可用

  • false:不可用

状态码:

  • 200:校验成功

  • 400:参数有误

  • 500:服务器内部异常

(2)controller

在这里插入图片描述

在这里插入图片描述

package com.leyou.user.web;

import com.leyou.user.service.UserService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class UserController {

@Autowired

private UserService userService;

}

因为有了接口,我们可以不关心页面,所有需要的东西都一清二楚:

  • 请求方式:GET

  • 请求路径:/check/{param}/{type}

  • 请求参数:param,type

  • 返回结果:true或false

在这里插入图片描述

package com.leyou.user.web;

import com.leyou.user.service.UserService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.http.ResponseEntity;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class UserController {

@Autowired

private UserService userService;

/**

  • 校验数据是否可用

  • @param data

  • @param type

  • @return

*/

@GetMapping(“/check/{data}/{type}”)

public ResponseEntity checkData(@PathVariable(“data”) String data,

@PathVariable(“type”) Integer type) {

return ResponseEntity.ok(userService.checkData(data,type));

}

}

(3)Service

在这里插入图片描述

在这里插入图片描述

package com.leyou.user.service;

import com.leyou.item.pojo.User;

import com.leyou.user.mapper.UserMapper;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import org.springframework.util.CollectionUtils;

@Service

public class UserService {

@Autowired

private UserMapper userMapper;

public Boolean checkData(String data, Integer type) {

User user = new User();

//判断数据类型

switch (type){

case 1:

user.setUsername(data);

break;

case 2:

user.setPhone(data);

break;

default:

return null;

}

return userMapper.selectCount(user) == 0;

}

}

(4)测试

在这里插入图片描述

我们在数据库插入一条假数据:

在这里插入图片描述

然后在浏览器调用接口,测试:

http://localhost:8088/check/admin/1

在这里插入图片描述

4.发送短信功能

短信微服务已经准备好,我们就可以继续编写用户中心接口了。

(1)接口说明

在这里插入图片描述

这里的业务逻辑是这样的:

  • 1)我们接收页面发送来的手机号码

  • 2)生成一个随机验证码

  • 3)将验证码保存在服务端(redis)

  • 4)发送短信,将验证码发送到用户手机

(2)controller

在这里插入图片描述

/*

发送短信

*/

@PostMapping(“code”)

public ResponseEntity sendCode(@RequestParam(“phone”) String phone){

userService.sendCode(phone);

return ResponseEntity.status(HttpStatus.NO_CONTENT).build();

}

(3)service

这里的逻辑会稍微复杂:

  • 生成随机验证码

  • 将验证码保存到Redis中,用来在注册的时候验证

  • 发送验证码到ly-sms-service服务,发送短信

在这里插入图片描述

因此,我们需要引入AMQP:

在这里插入图片描述

因此,我们需要引入AMQP:

org.springframework.boot

spring-boot-starter-amqp

添加RabbitMQ和Redis配置:

在这里插入图片描述

spring:

redis:

host: 192.168.206.66

rabbitmq:

host: 192.168.206.66

username: leyou

password: leyou

virtual-host: /leyou

template:

retry:

enabled: true

initial-interval: 10000ms

max-interval: 210000ms

multiplier: 2

publisher-confirms: true

另外还要用到工具类,生成6位随机码,这个我们封装到了ly-common中,因此需要引入依赖:

在这里插入图片描述

引入common

com.leyou.common

ly-common

${leyou.latest.version}

引入Redis

在这里插入图片描述

org.springframework.boot

spring-boot-starter-data-redis

Service代码:

在这里插入图片描述

在这里插入图片描述

package com.leyou.user.service;

import com.leyou.common.utils.NumberUtils;

import com.leyou.item.pojo.User;

import com.leyou.user.mapper.UserMapper;

import org.springframework.amqp.core.AmqpTemplate;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.data.redis.core.StringRedisTemplate;

import org.springframework.stereotype.Service;

import org.springframework.util.CollectionUtils;

import tk.mybatis.mapper.annotation.KeySql;

import java.util.HashMap;

import java.util.Map;

import java.util.concurrent.TimeUnit;

@Service

public class UserService {

@Autowired

private UserMapper userMapper;

@Autowired

private AmqpTemplate amqpTemplate;

@Autowired

private StringRedisTemplate redisTemplate;

private static final String KEY_PREFIX = “user:verify☎️”;

public Boolean checkData(String data, Integer type) {

User user = new User();

//判断数据类型

switch (type){
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

一个好的心态和一个坚持的心很重要,很多冲着高薪的人想学习前端,但是能学到最后的没有几个,遇到困难就放弃了,这种人到处都是,就是因为有的东西难,所以他的回报才很大,我们评判一个前端开发者是什么水平,就是他解决问题的能力有多强。

分享一些简单的前端面试题以及学习路线给大家,狂戳这里即可免费领取

er;

@Autowired

private AmqpTemplate amqpTemplate;

@Autowired

private StringRedisTemplate redisTemplate;

private static final String KEY_PREFIX = “user:verify☎️”;

public Boolean checkData(String data, Integer type) {

User user = new User();

//判断数据类型

switch (type){
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-MsQuy5CJ-1713508747959)]

[外链图片转存中…(img-RvqsGioR-1713508747959)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

[外链图片转存中…(img-7rIPuXgo-1713508747960)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

[外链图片转存中…(img-3avsIu5W-1713508747960)]

最后

一个好的心态和一个坚持的心很重要,很多冲着高薪的人想学习前端,但是能学到最后的没有几个,遇到困难就放弃了,这种人到处都是,就是因为有的东西难,所以他的回报才很大,我们评判一个前端开发者是什么水平,就是他解决问题的能力有多强。

分享一些简单的前端面试题以及学习路线给大家,狂戳这里即可免费领取

[外链图片转存中…(img-pBiwuElQ-1713508747960)]

  • 30
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本文介绍了一个基于Spring BootSpring CloudVue前后端分离项目实战。这个项目是一个简单的在线商城,包含了用户注册、登录、商品展示、购物车、订单管理等功能。通过这个项目,读者可以深入理解前后端分离的架构模式和互联网应用的开发方式。 首先,文章介绍了前后端分离的基本概念和优势。前后端分离是将应用的前端和后端代码分开来开发,使得前端和后端具有独立的开发周期和技术栈,进而提高了开发效率和代码质量。同时,前后端分离还可以提供更好的用户体验和灵活性,对于互联网应用来说尤为重要。 接下来,文章介绍了项目的架构和技术栈。项目采用了Spring BootSpring Cloud框架来实现后端代码,采用MyBatis作为ORM框架和Redis作为缓存中间件。同时,项目还采用了Vue.js作为前端框架和Element UI组件库来实现前端页面。通过这些开源框架和组件,可以快速搭建一个前后端分离的互联网应用。 然后,文章介绍了项目的核心功能和代码实现。在用户注册和登录方面,项目采用了Spring Security框架和JWT令牌来实现用户认证和授权,保证了用户信息的安全性。在商品展示和购物车方面,项目采用了Vue.js来实现前端页面和事件处理。在订单管理方面,项目采用了MyBatis Plus来实现订单数据的持久化和分页查询。 最后,文章介绍了项目的测试和优化。通过对项目的压力测试和性能测试,文章发现项目还存在一些性能瓶颈和安全隐患,可以通过优化数据库查询、缓存配置和代码实现来提高应用的性能和安全性。 总之,这篇文章介绍了一个基于Spring BootSpring CloudVue前后端分离项目实战,通过实现一个在线商城的功能,展示了前后端分离的开发模式和互联网应用的开发技术栈。本文可以作为前后端分离开发的入门教程,也可以作为互联网应用开发的参考文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值