前言
本篇博客主要是实现电商项目的登录功能,希望通过查看本篇博客,能给您带来收获:
- 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练习时注意,千万不要马虎大意,