【java】【项目实战】[外卖二]后台登录与退出功能实现

目录

一 、登录功能开发

1.1 需求分析

1.1.1 查看原型

1.1.2 查看效果图

1.1.3 查看登录请求信息(有接口文档最佳啊)

 1.1.4 数据模型 (employee表)

1.2 代码开发

1.2.1 创建实体类Employee与employee库表进行映射

1.2.2 创建controller、mapper、service、service.impl包

 1.2.2.1 创建 EmployeeMapper接口

1.2.2.2 创建 EmployeeServcie接口

1.2.2.3 创建 EmployeeServcieImpl实现类

1.2.2.4  创建 EmployeeController类

1.2.3  导入返回结果类R

1.2.4 EmployeeController

1.3 功能测试

1.3.1 启动服务

1.3.2 登录测试

二、退出功能开发

2.1 需求分析

2.2 代码开发

2.2.1 EmployeeController

2.3 功能测试

2.3.1 启动服务

2.3.2 退出测试


前言:实现管理系统的登录功能开发,包含需求分析、代码开发、功能测试

一 、登录功能开发

1.1 需求分析

1.1.1 查看原型

1.1.2 查看效果图

启动服务

http://localhost:8080/backend/page/login/login.html

1.1.3 查看登录请求信息(有接口文档最佳啊)

 1.1.4 数据模型 (employee表)

 

1.2 代码开发

1.2.1 创建实体类Employee与employee库表进行映射

 

 

package com.runa.reggie.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;

@Data
public class Employee implements Serializable {

    private static final long serialVersionUID = 1L;

    private Long id;

    private String username;

    private String name;

    private String password;

    private String phone;

    private String sex;

    private String idNumber;

    private Integer status;

    private LocalDateTime createTime;

    private LocalDateTime updateTime;

    @TableField(fill = FieldFill.INSERT)
    private Long createUser;

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Long updateUser;

}

1.2.2 创建controller、mapper、service、service.impl包

 

 1.2.2.1 创建 EmployeeMapper接口
package com.runa.reggie.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.runa.reggie.entity.Employee;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface EmployeeMapper extends BaseMapper<Employee> {
}
1.2.2.2 创建 EmployeeServcie接口
package com.runa.reggie.service.impl;

import com.baomidou.mybatisplus.extension.service.IService;
import com.runa.reggie.entity.Employee;

public interface EmployeeServcie extends IService<Employee> {
}
1.2.2.3 创建 EmployeeServcieImpl实现类

 

package com.runa.reggie.service.impl.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.runa.reggie.entity.Employee;
import com.runa.reggie.mapper.EmployeeMapper;
import com.runa.reggie.service.impl.EmployeeServcie;
import org.springframework.stereotype.Service;

@Service
public class EmployeeServcieImpl extends ServiceImpl<EmployeeMapper, Employee> implements EmployeeServcie {
}
1.2.2.4  创建 EmployeeController类
package com.runa.reggie.controller;

import com.runa.reggie.service.impl.EmployeeServcie;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Slf4j
@RestController
@RequestMapping("/employee")
public class EmployeeController {
    
    @Autowired
    private EmployeeServcie employeeServcie;
}

1.2.3  导入返回结果类R

 

 

package com.runa.reggie.common;

import lombok.Data;
import java.util.HashMap;
import java.util.Map;


/**
 * 通用返回结果,服务端响应的数据最终都会封装成此对象
 * @param <T>
 */
@Data
public class R<T> {

    private Integer code; //编码:1成功,0和其它数字为失败

    private String msg; //错误信息

    private T data; //数据

    private Map map = new HashMap(); //动态数据

    public static <T> R<T> success(T object) {
        R<T> r = new R<T>();
        r.data = object;
        r.code = 1;
        return r;
    }

    public static <T> R<T> error(String msg) {
        R r = new R();
        r.msg = msg;
        r.code = 0;
        return r;
    }

    public R<T> add(String key, Object value) {
        this.map.put(key, value);
        return this;
    }

}

1.2.4 EmployeeController

 

package com.runa.reggie.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.runa.reggie.common.R;
import com.runa.reggie.entity.Employee;
import com.runa.reggie.service.impl.EmployeeServcie;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.DigestUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;

@Slf4j
@RestController
@RequestMapping("/employee")
public class EmployeeController {

    @Autowired
    private EmployeeServcie employeeServcie;


    /**
     * 员工登录
     * @param request
     * @param employee
     * @return
     */
    //HttpServletRequest request  是为了将登录对象塞入session
    @PostMapping("/login")
    public R<Employee> login(HttpServletRequest request, @RequestBody Employee employee){

        //1、将页面提交的密码password进行md5加密处理
        String password = employee.getPassword();
        password = DigestUtils.md5DigestAsHex(password.getBytes());

        //2、根据页面提交的用户名username查询数据库
        LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(Employee::getUsername,employee.getUsername());
        Employee emp = employeeServcie.getOne(queryWrapper);

        //3、如果没有查询到则返回登录失败结果
        if(emp == null){
            return R.error("登录失败");
        }

        //4、密码比对,如果不一致则返回登录失败结果
        if(!emp.getPassword().equals(password)){
            return R.error("登录失败");
        }

        //5、查看员工状态,如果为已禁用状态,则返回员工已禁用结果
        if(emp.getStatus() == 0){
            return R.error("账号已禁用");
        }

        //6、登录成功,将员工id存入Session并返回登录成功结果
        request.getSession().setAttribute("employee",emp.getId());
        return R.success(emp);
    }

}

1.3 功能测试

1.3.1 启动服务

访问 

http://localhost:8080/backend/page/login/login.html

1.3.2 登录测试

 

二、退出功能开发

2.1 需求分析

 

 

2.2 代码开发

2.2.1 EmployeeController

package com.runa.reggie.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.runa.reggie.common.R;
import com.runa.reggie.entity.Employee;
import com.runa.reggie.service.impl.EmployeeServcie;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.DigestUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;

@Slf4j
@RestController
@RequestMapping("/employee")
public class EmployeeController {

    @Autowired
    private EmployeeServcie employeeServcie;


    /**
     * 员工登录
     * @param request
     * @param employee
     * @return
     */
    //HttpServletRequest request  是为了将登录对象塞入session
    @PostMapping("/login")
    public R<Employee> login(HttpServletRequest request, @RequestBody Employee employee){

        //1、将页面提交的密码password进行md5加密处理
        String password = employee.getPassword();
        password = DigestUtils.md5DigestAsHex(password.getBytes());

        //2、根据页面提交的用户名username查询数据库
        LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(Employee::getUsername,employee.getUsername());
        Employee emp = employeeServcie.getOne(queryWrapper);

        //3、如果没有查询到则返回登录失败结果
        if(emp == null){
            return R.error("登录失败");
        }

        //4、密码比对,如果不一致则返回登录失败结果
        if(!emp.getPassword().equals(password)){
            return R.error("登录失败");
        }

        //5、查看员工状态,如果为已禁用状态,则返回员工已禁用结果
        if(emp.getStatus() == 0){
            return R.error("账号已禁用");
        }

        //6、登录成功,将员工id存入Session并返回登录成功结果
        request.getSession().setAttribute("employee",emp.getId());
        return R.success(emp);
    }

    @PostMapping("/logout")
    public R<String> logout(HttpServletRequest request){
        // 清理Session 中保存的当前员工的id
        request.getSession().removeAttribute("emplyee");

        return R.success("退出成功!");

    }

}

2.3 功能测试

2.3.1 启动服务

访问 

http://localhost:8080/backend/page/login/login.html

2.3.2 退出测试

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 瑞吉是一个基于Java开发的项目实战,适用于在线订餐系统。该项目提供了用户注册、登录、浏览餐厅、查看菜单、下订单等功能。 首先,我们需要在网盘上下载瑞吉项目源代码文件。通过提供的下载链接,我们可以将项目源代码文件下载到本地。下载完成后,我们可以将文件解压缩,并使用Java开发工具(如Eclipse或IntelliJ IDEA)导入项目。 接下来,我们需要安装项目所需的Java开发环境。确保已经安装了JDK(Java Development Kit)和Maven(项目构建工具)。这样可以保证项目能够正常编译和运行。 在导入项目后,我们可以查看项目的目录结构。主要包括源代码、配置文件和静态资源文件等。在源代码文件夹中,我们可以找到各种Java类文件,包括控制器、实体类、服务类等。配置文件夹中包含项目的配置文件,用于配置数据库连接、日志记录等。静态资源文件夹中包含了项目所需的各种图片、样式表和JavaScript文件等。 在开始开发之前,我们需要先配置数据库。将提供的SQL脚本文件导入到MySQL数据库中,并在项目配置文件中修改数据库连接相关的配置信息。 接下来,我们可以根据需求对项目进行开发和定制化。例如,我们可以根据需要添加更多的功能模块,如优惠券管理、配送员管理等。我们也可以根据需求修改前端页面的样式和布局,以满足用户的需求。 开发完成后,我们可以使用Maven将项目打包成可执行的WAR文件。将WAR文件上传至服务器,并部署在Tomcat等Java Web服务器上。通过访问服务器的IP地址和端口号,我们就可以在浏览器中访问瑞吉系统了。 总之,下载并实战瑞吉项目需要下载源代码文件,并在Java开发工具中导入项目。然后,我们可以根据需求进行开发和定制化,并最终将项目打包部署在服务器上。最后,我们可以通过浏览器访问项目,体验瑞吉系统的功能。 ### 回答2: 瑞吉是一个基于Java语言开发的项目实战项目的主要目标是实现一个在线订餐系统。用户可以通过网页或手机应用程序浏览餐厅菜单、下订单、查看订单状态等功能。 该项目的开发环境主要包括Java SE、Java EE、Spring框架和MySQL数据库。其中,Java SE用于实现基本的语言特性和数据处理操作,Java EE用于构建Web应用程序,Spring框架用于实现系统的MVC架构,MySQL数据库用于存储用户信息、菜品信息和订单数据等。 项目的实施步骤如下: 1. 需求分析:首先,根据用户的需求分析,确定项目的基本功能和需求。 2. 系统设计:基于需求分析的结果,进行系统设计,包括数据库设计、界面设计和系统架构设计等。 3. 环境搭建:安装配置Java开发环境,包括JDK、开发工具(如Eclipse或IntelliJ IDEA)、Web服务器(如Tomcat)和数据库管理系统(MySQL)。 4. 数据库建模:创建数据库表结构,定义各个表之间的关系。 5. 编码实现:根据系统设计的结果,进行编码实现,包括前端界面的开发和后端功能的开发。 6. 软件测试:对已实现功能进行测试,包括单元测试、集成测试和系统测试等,保证系统的稳定性和可靠性。 7. 部署上线:将项目部署到服务器上,使用户可以通过网络访问系统。 8. 运维和优化:监控系统运行情况,对性能进行优化和改进。 最后,用户可以通过网盘下载瑞吉的源代码和相关文档,以便学习和参考。项目实战瑞吉的开发过程将帮助开发者熟悉Java开发技术,并理解实际项目的需求分析、系统设计和开发实施等流程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值