前言
本篇博客主要是實現電商項目的登錄功能,希望通過查看本篇博客,能給您帶來收穫:
- 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©right=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練習時注意,千萬不要馬虎大意,