【电商项目】-实现用户登录

前言

本篇博客主要是实现电商项目的登录功能,希望通过查看本篇博客,能给您带来收获:


  • service层:
    在这里插入图片描述

   package com.zcw.service;

import com.zcw.pojo.Users;
import com.zcw.pojo.bo.UserBO;

/**
 * @program: zcw-foodie-dev
 * @description:
 * @author: Zhaocunwei
 * @create: 2020-05-05 11:01
 **/

public interface UserService {
    /**
     * <h1>判断用户名是否存在</h1>
     */
    boolean queryUserNameIsExist(String username);
    /**
     * <h1>创建用户接受前端表单提交的数据</h1>
     */
    Users createUser(UserBO userBO) throws Exception;

    /**
     * <h1>根据用户名称与密码查询用户信息,用于登录</h1>
     * @param username
     * @param password
     * @return
     */
    Users queryUserForLogin(String username,String password);
}


  • 实现类Impl
    在这里插入图片描述
package com.zcw.service.impl;

import com.zcw.my.mapper.UsersMapper;
import com.zcw.pojo.Users;
import com.zcw.pojo.bo.UserBO;
import com.zcw.service.UserService;
import com.zcw.utils.DateUtil;
import com.zcw.utils.MD5Utils;
import lombok.extern.slf4j.Slf4j;
import org.n3r.idworker.Sid;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;

import java.util.Date;

/**
 * @program: zcw-foodie-dev
 * @description:
 * @author: Zhaocunwei
 * @create: 2020-05-05 11:13
 **/
@Slf4j
@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UsersMapper usersMapper;
    @Autowired
    private Sid sid; //id生成器
    @Transactional(propagation= Propagation.SUPPORTS)
    @Override
    public boolean queryUserNameIsExist(String username) {
        Example userExample = new Example(Users.class);
        Example.Criteria userCriteria = userExample.createCriteria();
        userCriteria.andEqualTo("username",username);
        Users  result = usersMapper.selectOneByExample(userExample);
        return result == null ? false:true;
    }
    @Transactional(propagation= Propagation.REQUIRED)
    @Override
    public Users createUser(UserBO userBO)  {

        String userId = sid.nextShort();
        try {
            userBO.setPassword(MD5Utils.getMD5Str(userBO.getPassword()));
        } catch (Exception e) {
            e.printStackTrace();
        }
        Users users = new Users();
        BeanUtils.copyProperties(userBO,users);
        users.setNickname(userBO.getUsername());
        users.setBirthday(DateUtil.stringToDate("1900-01-01"));
        users.setSex(2);
        users.setCreatedTime(new Date());
        users.setUpdatedTime(new Date());
        users.setId(userId);
        users.setFace("http://image.baidu.com/search/detail?ct=503316480&z=0&ipn=d&word=cangjingkong&step_word=&hs=2&pn=20&spn=0&di=15080&pi=0&rn=1&tn=baiduimagedetail&is=0%2C0&istype=0&ie=utf-8&oe=utf-8&in=&cl=2&lm=-1&st=undefined&cs=2202894901%2C3846724683&os=3950259263%2C2468176693&simid=3492294725%2C535044886&adpicid=0&lpn=0&ln=101&fr=&fmq=1588684138597_R&fm=&ic=undefined&s=undefined&hd=undefined&latest=undefined&copyright=undefined&se=&sme=&tab=0&width=undefined&height=undefined&face=undefined&ist=&jit=&cg=&bdtype=15&oriquery=&objurl=http%3A%2F%2Fimg.qqzhi.com%2Fupload%2Fimg_4_4126074775D2137311337_27.jpg&fromurl=ippr_z2C%24qAzdH3FAzdH3Fooo_z%26e3Bqqzit_z%26e3Bv54AzdH3Fhjy_z%26e3Brir%3Fo1%3Dvwg23tg2h5g2&gsm=15&rpstart=0&rpnum=0&islist=&querylist=&force=undefined");
        usersMapper.insert(users);
        return users;
    }
    @Transactional(propagation=Propagation.SUPPORTS)
    @Override
    public Users queryUserForLogin(String username, String password) {
        Example userExample = new Example(Users.class);
        Example.Criteria userCriteria = userExample.createCriteria();
        userCriteria.andEqualTo("username",username).andEqualTo("password",password);
        Users result = usersMapper.selectOneByExample(userExample);
        return result;
    }


}


  • controller 层实现:
    在这里插入图片描述
package com.zcw.controller;

import com.zcw.pojo.Users;
import com.zcw.pojo.bo.UserBO;
import com.zcw.service.UserService;
import com.zcw.utils.MD5Utils;
import com.zcw.utils.ZCWJSONResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @program: zcw-foodie-dev
 * @description:
 * @author: Zhaocunwei
 * @create: 2020-05-05 11:29
 **/
@Api(value = "注册登录",tags = {"用于注册登录的相关接口"})
@RestController
@RequestMapping("passport")
public class UserController {
    @Autowired
    private UserService userService;

    @ApiOperation(value="用户名是否存在",notes = "用户名是否存在",httpMethod ="GET" )
    @GetMapping("/usernameIsExist")
    public ZCWJSONResult usernameIsExist(@RequestParam String username){

        // 1.判断用户名不能为空
        if(StringUtils.isBlank(username)){
            return ZCWJSONResult.errorMsg("用户名不能为空");
        }
        // 2.查找注册的用户名是否存在
        boolean isExist = userService.queryUserNameIsExist(username);
        if(isExist){
           return ZCWJSONResult.errorMsg("用户名已经存在");
        }
        //3.请求成功,用户名没有重复
        return ZCWJSONResult.ok();
    }
    @ApiOperation(value="用户注册",notes = "用户注册",httpMethod ="POST" )
    @PostMapping("/regist")
    public ZCWJSONResult  regist(@RequestBody UserBO userBO) throws Exception {
        String confirmPassword = userBO.getConfirmPassword();
        String password = userBO.getPassword();
        String username = userBO.getUsername();
        //判断用户名和密码必须不为空
        if(StringUtils.isBlank(username)||
        StringUtils.isBlank(password)||
        StringUtils.isBlank(confirmPassword)){
            return ZCWJSONResult.errorMsg("用户名或密码不能为空");
        }
        //查询用户名是否存在
        boolean isExist = userService.queryUserNameIsExist(username);
        if(isExist){
            return ZCWJSONResult.errorMsg("用户名已经存在");
        }
        //密码长度不能少于6位
        if(password.length()<6){
            return ZCWJSONResult.errorMsg("密码长度不能少于6");
        }
        //判断两次密码是否一致
        if(!password.equals(confirmPassword)){
            return ZCWJSONResult.errorMsg("两次密码输入不一致");
        }
        //实现注册®️
        userService.createUser(userBO);
        return ZCWJSONResult.ok();
    }
    @ApiOperation(value="用户登录",notes="用户登录",httpMethod="POST")
    @PostMapping("/login")
    public ZCWJSONResult login(@RequestBody UserBO userBO) throws Exception {
        String username = userBO.getUsername();
        String password = userBO.getPassword();
        //判断用户名和密码必须不为空
        if(StringUtils.isBlank(username)||
        StringUtils.isBlank(password)){
            return ZCWJSONResult.errorMsg("用户名或密码不能为空");
        }
        //实现登录
        Users users = userService.queryUserForLogin(username,
                MD5Utils.getMD5Str(password));
        if(users == null){
            return ZCWJSONResult.errorMsg("用户名或密码不能为空");
        }
        return ZCWJSONResult.ok(users);
    }
}



  • 安装
    在这里插入图片描述
    在这里插入图片描述

启动:

在这里插入图片描述

访问接口文档:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

本篇博客主要是介绍了电商项目中的登录,通过接口文档进行调试成功,了,虽然本篇博客看似非常简单,如果我们在实际项目开发中,不注意一些细节,会出现一些马虎的错误,希望大家在demo练习时注意,千万不要马虎大意,

原创文章 578 获赞 46 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_32370913/article/details/105984308