java项目实战--瑞吉外卖Day1

java项目实战–瑞吉外卖Day1

一、业务开发

1.数据库环境搭建

使用navicat创建数据库,字符集为utf8mb4:

在这里插入图片描述
运行SQL文件:

这里运行的文件是“黑马程序员Java项目实战《瑞吉外卖》”的课程资料,可在黑马程序员课程视频下查看获取方法。

在这里插入图片描述

数据库中各表的说明:

在这里插入图片描述

2.Maven项目搭建

新建一个Maven项目:

将课程资料中pom.xml文件的依赖拷贝到项目的pom.xml文件中:

在这里插入图片描述

在这里插入图片描述

将课程资料中的application.yml文件拷贝到src\main\resources目录下:

在这里插入图片描述

在这里插入图片描述
在使用application.yal文件时,别忘了将数据库中的账户密码和端口修改成自己的。
在这里插入图片描述

编写启动类:

package com.mj.reggie;

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @author mj
 * @version 1.0
 */
//编写启动类
@Slf4j
@SpringBootApplication
public class ReggieApplication {
    public static void main(String[] args) {
        SpringApplication.run(ReggieApplication.class,args);
//        输出日志
        log.info("项目启动成功");
    }
}

3.导入前端资源

将资料中的前端资源backend和front文件粘贴到resources目录下:
在这里插入图片描述
在这里插入图片描述

此时虽然项目中已经有了前端的文件,但是还并不能通过浏览器进行访问,此时访问会出现404的错误:

在这里插入图片描述
为了解决这个问题,我们需要编写配置类来设置静态资源的映射:

在这里插入图片描述
代码如下:

package com.mj.reggie.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

/**
 * @author mj
 * @version 1.0
 * 设置静态映射
 */
@Configuration
@Slf4j
public class WebMvcConfig extends WebMvcConfigurationSupport {

    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        log.info("开始进行静态资源映射...");
        registry.addResourceHandler("/backend/**")
                .addResourceLocations("classpath:/backend/");
        registry.addResourceHandler("/front/**")
                .addResourceLocations("classpath:/front/");
    }
}

然后就可以进行访问了:
在这里插入图片描述

二、后台登录与退出功能开发

1. 创建所需接口和类

1.创建实体类Employee,与数据库中的employee员工表进行映射:

在这里插入图片描述
代码如下:

package com.mj.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;

}

2.创建EmployeeMapper接口:
在这里插入图片描述
代码如下:

package com.mj.reggie.mapper;

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

/**
 * @author mj
 * @version 1.0
 */
@Mapper
public interface EmployeeMapper extends BaseMapper<Employee> {

}

3.创建EmployeeService接口:
在这里插入图片描述

代码如下:

package com.mj.reggie.service;

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

/**
 * @author mj
 * @version 1.0
 */
public interface EmployeeService extends IService<Employee> {

}


4.创建EmployeeServiceImpl实现类:
在这里插入图片描述
代码如下:

package com.mj.reggie.service.impl;

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

/**
 * @author mj
 * @version 1.0
 */
@Service
public class EmployeeServiceImpl extends ServiceImpl<EmployeeMapper, Employee> implements EmployeeService {
    
}

5.创建EmployeeController类:
在这里插入图片描述

package com.mj.reggie.controller;

import com.mj.reggie.service.EmployeeService;
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;

/**
 * @author mj
 * @version 1.0
 */
@Slf4j
@RestController
@RequestMapping("/employee")
public class EmployeeController {

    @Autowired
    private EmployeeService employeeService;
}

6.通用返回结果类,服务端响应的数据最终都会封装成此对象:
在这里插入图片描述
代码如下:

package com.mj.reggie.common;

import lombok.Data;

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

/*
 * 通用返回结果,服务端响应的数据最终都会封装成此对象
 * */
@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;
    }

}

2.后台登录功能开发

1.实现登录功能流程:
在这里插入图片描述

代码如下:

package com.mj.reggie.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.mj.reggie.common.R;
import com.mj.reggie.entity.Employee;
import com.mj.reggie.service.EmployeeService;
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;

/**
 * @author mj
 * @version 1.0
 */
@Slf4j
@RestController
@RequestMapping("/employee")
public class EmployeeController {

    @Autowired
    private EmployeeService employeeService;

    /*
     * 员工登录*/
    @PostMapping("/login")
    public R<Employee> login(HttpServletRequest httpServletRequest, @RequestBody Employee employee) {
//        1.将页面提交的密码password进行md5加密处理
        String password = employee.getPassword();
        password = DigestUtils.md5DigestAsHex(password.getBytes());
//        2.将页面提交的用户名userName进行数据库查询
        LambdaQueryWrapper<Employee> lambdaQueryWrapper = new LambdaQueryWrapper<Employee>();
        lambdaQueryWrapper.eq(Employee::getUsername, employee.getUsername());
        Employee emp = employeeService.getOne(lambdaQueryWrapper);
//        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,并返回登录成功结果
        httpServletRequest.getSession().setAttribute("employee", emp.getId());
        return R.success(emp);
    }
}

为了方便后续的调试,我们可以在 src/main/resources/backend/js/request.js 文件中修改timeout,让我们在调试时有充足的时间:
在这里插入图片描述

3.后台退出功能开发

1.实现退出功能流程:
在这里插入图片描述
2.代码如下:

    /*
     * 员工退出*/
    @PostMapping("/logout")
    public R<String> logout(HttpServletRequest httpServletRequest) {
//        清理Session中保存的当前登录员工的ID
        httpServletRequest.getSession().removeAttribute("employee");
        return R.success("退出成功");
    }
}

4.登录与退出实现后的总代码:

package com.mj.reggie.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.mj.reggie.common.R;
import com.mj.reggie.entity.Employee;
import com.mj.reggie.service.EmployeeService;
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;

/**
 * @author mj
 * @version 1.0
 */
@Slf4j
@RestController
@RequestMapping("/employee")
public class EmployeeController {

    @Autowired
    private EmployeeService employeeService;

    /*
     * 员工登录*/
    @PostMapping("/login")
    public R<Employee> login(HttpServletRequest httpServletRequest, @RequestBody Employee employee) {
//        1.将页面提交的密码password进行md5加密处理
        String password = employee.getPassword();
        password = DigestUtils.md5DigestAsHex(password.getBytes());
//        2.将页面提交的用户名userName进行数据库查询
        LambdaQueryWrapper<Employee> lambdaQueryWrapper = new LambdaQueryWrapper<Employee>();
        lambdaQueryWrapper.eq(Employee::getUsername, employee.getUsername());
        Employee emp = employeeService.getOne(lambdaQueryWrapper);
//        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,并返回登录成功结果
        httpServletRequest.getSession().setAttribute("employee", emp.getId());
        return R.success(emp);
    }

    /*
     * 员工退出*/
    @PostMapping("/logout")
    public R<String> logout(HttpServletRequest httpServletRequest) {
//        清理Session中保存的当前登录员工的ID
        httpServletRequest.getSession().removeAttribute("employee");
        return R.success("退出成功");
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Java项目实战案例增删改查是在实际开发中经常会遇到的需求,它是指在一个Java项目中进行对数据库进行数据的增加、删除、修改和查询操作。下面将用300字中文回答如何实现。 首先,我们需要创建一个数据库,并为该数据库创建一个连接。在Java中使用JDBC技术来连接数据库,可以使用JDBC的API接口和相关的类来完成这个步骤。 接下来,我们需要实现增加数据的功能。通过使用JDBC的API接口和相关的类,我们可以将数据插入到数据库中。通过执行SQL语句,可以向数据库中的特定表中插入特定的数据。 然后,我们需要实现删除数据的功能。通过使用JDBC的API接口和相关的类,我们可以执行SQL语句来删除数据库中的特定表中的特定数据。 接着,我们需要实现修改数据的功能。通过使用JDBC的API接口和相关的类,我们可以执行SQL语句来修改数据库中特定表中的特定数据。 最后,我们需要实现查询数据的功能。通过使用JDBC的API接口和相关的类,我们可以执行SQL语句来查询数据库中的特定表中的特定数据。查询结果会返回一个ResultSet对象,我们可以通过ResultSet对象来获取相关的查询结果。 通过上述步骤,我们可以实现Java项目实战案例中的增删改查功能。这些功能在实际开发中非常常见,特别是对于需要操作数据库的项目来说,是非常重要的技术。掌握了这些技术,我们就可以更好地开发出符合需求的Java项目。 ### 回答2: Java项目实战案例中的增删改查常用于数据库操作。下面是一个简单示例,其中使用了Java和MySQL数据库。 首先,我们需要建立数据库表,这里以学生表为例,包括学生ID、姓名和年龄字段。 创建学生表的SQL语句如下: ``` CREATE TABLE student ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, age INT ); ``` 接下来,在Java项目中,我们需要使用JDBC连接到MySQL数据库,并编写增删改查的代码逻辑。 1. 增加操作: ``` public void addStudent(String name, int age) { try { Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database_name", "your_username", "your_password"); String sql = "INSERT INTO student (name, age) VALUES (?, ?)"; PreparedStatement statement = conn.prepareStatement(sql); statement.setString(1, name); statement.setInt(2, age); statement.executeUpdate(); statement.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } ``` 2. 删除操作: ``` public void deleteStudent(int id) { try { Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database_name", "your_username", "your_password"); String sql = "DELETE FROM student WHERE id = ?"; PreparedStatement statement = conn.prepareStatement(sql); statement.setInt(1, id); statement.executeUpdate(); statement.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } ``` 3. 修改操作: ``` public void updateStudent(int id, String name, int age) { try { Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database_name", "your_username", "your_password"); String sql = "UPDATE student SET name = ?, age = ? WHERE id = ?"; PreparedStatement statement = conn.prepareStatement(sql); statement.setString(1, name); statement.setInt(2, age); statement.setInt(3, id); statement.executeUpdate(); statement.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } ``` 4. 查询操作: ``` public List<Student> getAllStudents() { List<Student> students = new ArrayList<>(); try { Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database_name", "your_username", "your_password"); String sql = "SELECT * FROM student"; Statement statement = conn.createStatement(); ResultSet resultSet = statement.executeQuery(sql); while (resultSet.next()) { int id = resultSet.getInt("id"); String name = resultSet.getString("name"); int age = resultSet.getInt("age"); Student student = new Student(id, name, age); students.add(student); } resultSet.close(); statement.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } return students; } ``` 以上是一个简单的Java项目实战案例,实现了对学生表的增删改查操作。当然,实际的项目可能会更加复杂,需要根据具体情况进行相应的编码和数据库操作。 ### 回答3: Java项目实战案例中的增删改查是指在项目中对数据进行新增、删除、修改和查询操作。下面以一个简单的学生信息管理系统为例进行介绍。 1. 增加(Create): 在学生信息管理系统中,可以通过输入学生的姓名、年龄、性别等信息来实现学生信息的新增。首先,创建一个添加学生信息的界面,接收用户输入的学生信息,并将其保存到数据库或文件中。 2. 删除(Delete): 当需要删除学生信息时,可以根据学生的学号或姓名等唯一标识符进行删除操作。在学生信息管理系统中,可以在界面中输入学生的学号或姓名,在数据库中查找对应的学生信息并进行删除操作。 3. 修改(Update): 当学生信息发生变化时,可以通过修改操作更新学生信息。在学生信息管理系统中,可以先根据学生的学号或姓名进行查询,然后修改相应的学生信息并保存到数据库中。 4. 查询(Retrieve): 学生信息管理系统中的查询操作可以根据不同的条件进行查询,如学号、姓名、年龄等。用户可以在界面中输入相应的查询条件,系统根据条件从数据库中检索相关的学生信息,并将结果返回给用户。 总结: 以上是在实际的Java项目中常见的增删改查操作步骤。通过使用合适的技术手段,如数据库、文件读写等,能够实现对数据的有效管理和操作。在实际项目中,这些操作通常会结合其他功能一起使用,以满足系统需求和用户期望。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值