Spring Boot电商项目19:用户模块八:普通用户登录接口开发;(一个特别需要注意的点:对于Mybatis来说,如果Mapper接口中的方法的参数不止一个,需要使用@Param注解;)

说明:

(1)登录的基本逻辑: 【用户在前端输入用户名、密码】→【Controller获取到用户名和密码】→【调用Service中编写的login方法】→【然后,Service会去调用Mapper接口中定义的方法,这个方法是根据用户名和密码两个条件,去查询User】→【如果Service调用Mapper接口的方法后,查到了,就返回User对象;;;如果没查到,就抛出一个异常】→【自然,如果Service抛出了异常,Controller接到了这个异常后,也继续抛,自然我们前面编写的GlobalExceptionHandler会根据这个异常构建对应的ApiRestResponse】→【如果Service执行OK,Controller就会获取到查询的User,将这个对象保存到Session中,然后构建ApiRestResponse对象,返回】;

(2)本篇博客需要注意的点:

         ● 如果Mapper接口中的方法不止一个,需要使用@Param注解;即,对于Mybatis来说,如果Mapper接口中的方法只有一个参数的话,是可以不用【@Param注解】注解的;但是,如果有多个参数的话,是一定要使用【@Param注解】注解的;否则,mapper.xml中的SQL语句在获取参数的时候,就会混乱;(即@Param注解的作用类似于:给其参数起个别名,在投入到SQL之前,最后归整一下)

         ● 一个新的开发习惯:先在实现类中编写方法实现,然后再在接口中反向生成方法声明;比如,本篇博客中,我们就心在UserServiceImpl实现类中,编写了login()方法的实现;然后,再在UserService接口中反向生成了login()方法的定义;

         ● 在登录的时候,不能的登录的原因有很多,如【用户名不存在,密码错误】等;出于对系统的保护,防止黑客窥探我们程序的细节,这些错误我们全部使用【密码错误】这一个去表征;

         ● 登录接口,需要我们返回登录用户的信息;但,记得要把密码password给清除掉;

目录

0.登陆功能说明;

1.在UserController类中,编写登陆方法;

2.在UserServiceImpl类中,编写login登陆方法,实现登陆逻辑;在UserService接口中,定义login登陆方法;

(1)在UserServiceImpl类中,编写login登陆方法;

(2)在UserService接口中,定义login登陆方法:一个新的开发习惯:我们可以,先在ServiceImpl实现类中,写对应的方法;然后,反向生成Service接口中的方法;

3.在UserMapper接口中,定义【根据用户名和密码两个条件,查询User的方法】;在UserMapper.xml中,编写对应的实现SQL;

(1)在UserMapper接口中,定义【根据用户名和密码,查询User的方法】:selectLogin()方法;

(2)在UserMapper.xml中,编写对应的实现SQL;


0.登陆功能说明;

(1)当某个用户登录后,是需要保存这个登陆状态的;只有保存了这个登陆状态,我们在后面进行如【添加商品到购物车】、【查看订单】等需要登录才能操作的操作时,才OK嘛;

(2)在本项目中,我们把登陆状态,保存在session中;;;即,我们服务端把用户的登录信息保存在session中;;;即,一个用户登陆了系统,然后服务端把该用户的登陆信息保存在了session中,该用户登录之后,又来系统进行访问的话,就可以利用session把这个用户给识别出来;

1.在UserController类中,编写登陆方法;

    /**
     * 登录方法
     * @param userName
     * @param password
     * @param session
     * @return
     */
    @PostMapping("/login")
    @ResponseBody
    public ApiRestResponse login(@RequestParam("userName") String userName,
                                 @RequestParam("password") String password,
                                 HttpSession session) throws ImoocMallException {
        if (StringUtils.isEmpty(userName)) {//如果用户名为空,直接返回用户名不能为空的信息;
            return ApiRestResponse.error(ImoocMallExceptionEnum.NEED_USER_NAME);
        }
        if (StringUtils.isEmpty(password)) {//如果
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值