用户注册(头歌)

第1关:检验用户名是否注册

任务描述

本关任务:实现判断用户名是否被注册功能。

相关知识

为了完成本关任务,你需要掌握:

  1. 为什么要判断用户名是否被注册?
  2. 实现判断用户名是否被注册功能。
为什么要判断用户名是否被注册

一个系统一般在注册是都会保证用户名的唯一:

,

例如 qq 号必须唯一,这样就方便搜索用户了。

实现判断用户名是否被注册功能

以下通过 Mybatis 的注解式 sql 实现。

  1. 我们可以直接在 dao 层根据用户名作为条件查询数据库:
     
      
    1. @Select("select count(1) from users where userName=#{username}")
    2. int findUserByName(String userName);
    得到一个用户数量,如果该数量大于 0 ,则数据库中已存在使用该用户名的用户了。那么该用户名就已经被注册了。
  2. service 层调用:
     
      
    1. public interface UserService {
    2. int findUserByName(String userName);
    3. }
    4. @Service("userService")
    5. public class UserServiceImpl implements UserService {
    6. @Autowired
    7. private UserDao userDao;
    8. @Override
    9. public int findUserByName(String userName) {
    10. return userDao.findUserByName(userName);
    11. }
    12. }
  3. Controller 层调用:
     
      
    1. @RequestMapping(value = "/findUserName")
    2. public Map findByName(@RequestBody Map<String,String> userMap){
    3. String userName = userMap.get("userName");
    4. HashMap map = new HashMap<String,String>();
    5. //判断是否注册返回结果不同
    6. if(userService.findUserByName(userName)>0){
    7. map.put("code","004");
    8. map.put("msg","用户名已存在,不能注册");
    9. }else{
    10. map.put("code","001");
    11. map.put("msg","可以注册");
    12. }
    13. return map;
    14. }
  4. 数据库如下:
    字段名称类型备注约束
    user_idint(11)权限id主键,自增
    userNamevarchar(20)用户名
    passwordvarchar(40)密码
    userPhoneNumberbigint(11)电话号码
    emailvarchar(20)邮箱
    genderchar(2)性别
    saltvarchar(20)加密盐值
    login_countint(11)登录次数
    register_timedatetime注册时间

编程要求

在 UserDao.java、UserService.java、UserServiceImpl.java、UserController.java 中 Begin-End 处根据提示补充代码。实现检验用户名是否被注册功能。

测试说明

平台会对你编写的代码进行测试:发送请求访问接口,判断代码是否可以正常运行。

预期输入:

 
  1. {
  2. "userName":"admin"
  3. }

预期输出: {"msg":"用户名已存在,不能注册","code":"004"}


开始你的任务吧,祝你成功!

UserDao.java

package com.www.dao;

import com.www.entity.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.springframework.stereotype.Repository;



@Repository
public interface UserDao {
    //此处查询数据库,根据用户名查询用户是否注册
    /****************************Begin****************************/
    @Select("select count(1) from users where userName=#{username}")  
    int findUserByName(String userName); 
    /****************************Begin****************************/
}

UserService.java

package com.www.service;

import com.www.entity.User;
import org.springframework.stereotype.Component;


@Component
public interface UserService {
    //service 层接口
    /****************************Begin****************************/
    int findUserByName(String userName);
    /****************************End****************************/
}

UserServiceImpl.java

package com.www.service.impl;

import com.www.dao.UserDao;
import com.www.entity.User;
import com.www.service.UserService;
import com.www.utils.MD5Util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.thymeleaf.util.StringUtils;

import java.util.Map;
import java.util.UUID;


@Service("userService")
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;
    //service 实现类调用 dao 层接口的查询方法
    /****************************Begin****************************/
    @Override  
    public int findUserByName(String userName) {  
       return userDao.findUserByName(userName);  
    }  
    /****************************End****************************/
}

UserController.java

package com.www.controller;

import com.www.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;

@Slf4j
@RestController
@RequestMapping(value = "/user")
public class UserController {

    @Autowired
    UserService userService;

    /**
     * 调用 service 接口查询方法
     * 根据用户名查找用户,判断该用户名是否可以注册
     * @param userMap
     * @return
     */
    /****************************Begin****************************/
    @RequestMapping(value = "/findUserName")
    public Map findByName(@RequestBody Map<String,String> userMap){
            //这是接收的用户名
            String userName = userMap.get("userName");
            HashMap map = new HashMap<String,String>();  
           //判断是否注册返回结果不同
           if(userService.findUserByName(userName)>0){  
            //这里是用户名已经被注册的情况
            map.put("code","004");
            map.put("msg","用户名已存在,不能注册");
        }else{ 
            //这里是用户名可以使用的情况
            map.put("code","001");
            map.put("msg","可以注册");
        }
        return map;
    }
    /****************************End****************************/
}

第2关:根据用户名查询用户信息

任务描述

本关任务:实现根据用户名查询用户信息功能。

相关知识

为了完成本关任务,你需要掌握:

  1. 根据用户名查询用户信息功能介绍。
  2. 功能实现。
根据用户名查询用户信息功能介绍

一般一个系统中都有查询当前登录的用户信息的功能,如下:

即前端发送一个每个用户都带有的唯一属性,从数据库中查询出该用户的所有的具体的信息。

功能实现

以下通过 Mybatis 的注解式 sql 实现。

  1. dao 层查询数据库:
     
      
    1. @Repository
    2. public interface UserDao {
    3. /*
    4. 根据用户名查询用户信息
    5. */
    6. @Select("select * from users where username=#{userName}")
    7. User findByUserName(String userName);
    8. }
  2. service 层调用:
     
      
    1. public interface UserService {
    2. User findByUserName(String userName);
    3. }
    4. public class UserServiceImpl implements UserService {
    5. @Autowired
    6. private UserDao userDao;
    7. /**
    8. * 根据用户名查询用户信息
    9. * @param userName
    10. * @return
    11. */
    12. @Override
    13. public User findByUserName(String userName) {
    14. return userDao.findByUserName(userName);
    15. }
    16. }
  3. controller 层调用:
     
      
    1. @RequestMapping(value = "/findByUserName")
    2. public User findByUserName(@RequestBody Map<String,String> userMap){
    3. //调用 service 接口方法,实现根据用户名查询用户信息
    4. //接收用户名
    5. String userName=userMap.get("userName");
    6. return userService.findByUserName(userName);
    7. }
  4. 数据库字段如下:
    字段名称类型备注约束
    user_idint(11)权限id主键,自增
    userNamevarchar(20)用户名
    passwordvarchar(40)密码
    userPhoneNumberbigint(11)电话号码
    emailvarchar(20)邮箱
    genderchar(2)性别
    saltvarchar(20)加密盐值
    login_countint(11)登录次数
    register_timedatetime注册时间

编程要求

在 UserDao.java、UserService.java、UserServiceImpl.java、UserController.java 中 Begin-End 处补充代码,实现根据用户名查询用户信息功能。

测试说明

平台会对你编写的代码进行测试:发送请求访问接口,判断代码是否可以正常运行。 预期输入:

 
  1. {
  2. "userName":"admin"
  3. }

预期输出: {"user_id":1017,"userName":"admin","password":"86d5dfb54984d5a867237b8440dbd779","userPhoneNumber":null,"email":null,"gender":null}


开始你的任务吧,祝你成功!

UserDao.java

package com.www.dao;

import com.www.entity.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.springframework.stereotype.Repository;



@Repository
public interface UserDao {


    /*
        根据用户查询用户信息
     */
    //连接数据库,实现根据用户名查询用户信息
    /****************************Begin****************************/
    @Select("select * from users where username=#{userName}")
    User findByUserName(String userName);
    /****************************End****************************/
}

UserService.java

package com.www.service;

import com.www.entity.User;
import org.springframework.stereotype.Component;


@Component
public interface UserService {
    //定义 service 接口
    /****************************Begin****************************/
    User findByUserName(String userName);
    /****************************End****************************/
}

UserServiceImpl.java

package com.www.service.impl;

import com.www.dao.UserDao;
import com.www.entity.User;
import com.www.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


@Service("userService")
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;

    /**
     * 根据用户名查询用户信息
     * @param userName
     * @return
     */
    //调用 dao 层方法,返回用户信息
    /****************************Begin****************************/
    @Override
    public User findByUserName(String userName) {
        return userDao.findByUserName(userName);
    }
    /****************************End****************************/
}

UserController.java

package com.www.controller;

import com.www.entity.User;
import com.www.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

@Slf4j
@RestController
@RequestMapping(value = "/user")
public class UserController {

    @Autowired
    UserService userService;

    /**
     * 根据用户名查询用户信息
     * @param userMap
     * @return
     */
    @RequestMapping(value = "/findByUserName")
    public User findByUserName(@RequestBody Map<String,String> userMap){
        //调用 service 接口方法,实现根据用户名查询用户信息
        /****************************Begin****************************/
        //接收用户名
        String userName=userMap.get("userName");
        return userService.findByUserName(userName);
        /****************************End****************************/
    }
}

第3关:用户注册

任务描述

本关任务:实现一个用户注册功能。

相关知识

为了完成本关任务,你需要掌握:

  1. 什么是用户注册 ?
  2. 用户注册的意义。
  3. 用户注册的实现。
什么是用户注册

就是进入注册界面后、设置自己的账号密码等进行注册,注册时前端验证信息无误后会把用户注册的信息发送至后台,后台将用户信息注册进入数据库中的用户表里。如下图:

注册

用户注册的意义
  1. 记录用户的行为内容:个人身份的识别,用户注册后信息就已经录入用户系统中,做出的操作将会被记录下来,比如在 UGC 的内容产品中,用户产出的内容,或是电商平台里基于用户的操作,作为其行为的凭据。

  2. 获取用户信息:用户授权登陆注册后,平台获取用户信息,对未来挖掘用户需求和功能迭代有很大的帮助。

  3. 千人千面:根据用户提供的信息,对用户进行标签化,针对用户喜好身份进行个性化推荐。

用户注册的实现
  1. dao 层代码:
     
      
    1. /*
    2. 注册用户
    3. */
    4. //连接数据库,实现将用户信息注册进入数据库
    5. @Insert("insert into user(userName,password,salt,register_time,login_count) values(#{userName},#{password},#{salt},now(),1)")
    6. void registerUser(String userName,String password,String salt);
  2. service 层代码:
     
      
    1. /**
    2. * 注册用户
    3. * @param userName
    4. * @param formPass
    5. * @return
    6. */
    7. @Override
    8. public User registerUser(String userName, String formPass) {
    9. //加盐获取盐值
    10. String salt = "hjgoasjgajg165416565";
    11. //机密加盐后得到的密码
    12. String DBPass = MD5Util.formPassToDBPass(formPass, salt);
    13. userDao.registerUser(userName,DBPass,salt);
    14. return userDao.findByUserName(userName);
    15. }
    注册时需要给密码加盐加密来保证用户的账户信息安全。
  3. controller 层:
     
      
    1. /**
    2. * 用户注册
    3. * @param userMap
    4. * @return
    5. */
    6. @ResponseBody
    7. @RequestMapping(value = "/register")
    8. public String userRegister(@RequestBody Map<String,String> userMap){
    9. String userName = userMap.get("userName");
    10. String password = userMap.get("password");
    11. String res="";
    12. HashMap map = new HashMap<String,String>();
    13. if(userService.findUserByName(userName)>0){
    14. res="用户名已存在,不能注册";
    15. }else{
    16. User user=userService.registerUser(userName, password);
    17. res="注册成功,"+"用户信息为:"+user;
    18. }
    19. return res;
    20. }
    获取前端用户注册的信息,判断用户名是否重复后将用户信息注册进数据库,注册完成后返回注册的用户信息。
  4. 数据库如下:
    字段名称类型备注约束
    user_idint(11)权限id主键,自增
    userNamevarchar(20)用户名
    passwordvarchar(40)密码
    userPhoneNumberbigint(11)电话号码
    emailvarchar(20)邮箱
    genderchar(2)性别
    saltvarchar(20)加密盐值
    login_countint(11)登录次数
    register_timedatetime注册时间

编程要求

在 UserDao.java、UserServiceImpl.java、UserController.java 中 Begin-End 处补充代码,实现用户注册功能。

测试说明

平台会对你编写的代码进行测试:发送请求访问接口,判断代码是否可以正常运行。 预期输入:

 
  1. {
  2. "userName":"张三",
  3. "password":"123456"
  4. }

预期输出: 注册成功,用户信息为:User(user_id=1019, userName=张三, password=9e36a7e31f0975bb52b939ddca2051bd, userPhoneNumber=null, email=null, gender=null)


开始你的任务吧,祝你成功!

UserDao.java

package com.www.dao;

import com.www.entity.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;



@Repository
public interface UserDao {
    

    /*
    注册用户
     */
    //连接数据库,实现将用户信息注册进入数据库
    /****************************Begin****************************/
    @Insert("insert into users(userName,password,salt,register_time,login_count) values(#{userName},#{password},#{salt},now(),1)")  
    void registerUser(String userName,String password,String salt);  
    /****************************End****************************/
    /*
        根据用户民查询用户是否存在
    */
    @Select("select count(1) from users where userName=#{username}")
    int findUserByName(String userName);
    /*
    根据用户名查询用户信息
     */
    @Select("select * from users where username=#{userName}")
    User findByUserName(String userName);
}

User.java

    package com.www.entity;

    import lombok.Data;
    import org.springframework.stereotype.Component;

    import java.io.Serializable;

    /**
    * @author liuxianchun
    * @date 2021/1/17
    * 鐢ㄦ埛
    */
    @Data
    @Component
    public class User implements Serializable {

        private int user_id;
        private String userName;
        private String password;
        private String userPhoneNumber;
        private String email;
        private String gender;

    }

UserServiceImpl.java

package com.www.service.impl;

import com.www.dao.UserDao;
import com.www.entity.User;
import com.www.service.UserService;
import com.www.utils.MD5Util;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.UUID;


@Service("userService")
public class UserServiceImpl implements UserService {

    @Resource
    private UserDao userDao;

    @Override
    public int findUserByName(String userName) {
        return userDao.findUserByName(userName);
    }

    /**
     * 注册用户
     * @param userName
     * @param formPass
     * @return
     */
    //进行密码的加密加盐,调用 dao 层注册用户、查询注册的用户信息并返回
    /****************************Begin****************************/
     @Override  
 public User registerUser(String userName, String formPass) {  
     //加盐获取盐值  
     String salt = "hjgoasjgajg165416565";  
     //机密加盐后得到的密码  
     String DBPass = MD5Util.formPassToDBPass(formPass, salt);  
     userDao.registerUser(userName,DBPass,salt);  
     return userDao.findByUserName(userName);  
 } 
    /****************************End****************************/
}

UserService.java

package com.www.service;

import com.www.entity.User;
import org.springframework.stereotype.Component;


@Component
public interface UserService {

    int findUserByName(String userName);
    //注册  service 接口
    User registerUser(String userName,String formPass);
}

UserController.java

    package com.www.controller;

    import com.www.entity.User;
    import com.www.service.UserService;
    import lombok.extern.slf4j.Slf4j;
    ;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.*;
    import java.util.HashMap;
    import java.util.Map;


    @Slf4j
    @Controller
    @RequestMapping(value = "/user")
    public class UserController {

        @Autowired
        UserService userService;
        @Autowired
        User user;
        /**
        * 用户注册
        * @param userMap
        * @return
        */
        @ResponseBody
        @RequestMapping(value = "/register")
        public String userRegister(@RequestBody Map<String,String> userMap){
        //先查询用户名是否存在,如果存在则返回 "用户名已存在,不能注册"
        //否则注册用户,且返回 "注册成功,"+"用户信息为:"+查询的注册用户信息
        /****************************Begin****************************/ 
        String userName = userMap.get("userName");  
        String password = userMap.get("password");  
        String res="";  
        HashMap map = new HashMap<String,String>();  
        if(userService.findUserByName(userName)>0){  
            res="用户名已存在,不能注册";  
        }else{  
            User user=userService.registerUser(userName, password);  
            res="注册成功,"+"用户信息为:"+user;  
        } 
            return res; 
        /****************************End****************************/
        }

    }
加油,同学们!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值