提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
本文记录了瑞吉外卖项目1~14集
提示:以下是本篇文章正文内容,下面案例可供参考
一、操作顺序
1、新建Maven项目
File->new Project->新建maven->GroupId:com.andljh->ArtifactId:reggie_take_out->Next->Project name:reggie_take_out->finish
2、导入pom文件
<properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <scope>compile</scope> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.2</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.20</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.76</version> </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.23</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.4.5</version> </plugin> </plugins> </build>
3、创建ReggieApplication
package com.andljh.reggie; import lombok.extern.slf4j.Slf4j; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @Slf4j @SpringBootApplication public class ReggieApplication { public static void main(String[] args) { SpringApplication.run(ReggieApplication.class,args); // log.info("项目启动成功"); } }
4、创建package
分别创建 config(WebMvcConfig)、controller(ReggieController)、entity(Employee)、mapper(Employeemapper)、{service(EmployeeService)、impl(EmployeeServiceImpl)} 、util(R)
5、application.yml文件(mysql账号密码换成自己的)
server: port: 8080 spring: application: name: reggie_take_out datasource: druid: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/reggie?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true username: root password: root mybatis-plus: configuration: #在映射实体或者属性时,将数据库中表名和字段名中的下划线去掉,按照驼峰命名法映射 map-underscore-to-camel-case: true log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: id-type: ASSIGN_ID
6、导入前端文件(复制下面两个文件到resources目录下)
7、为了能显示页面,编写WebMvcConfig.java
package com.andljh.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; @Slf4j @Configuration 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/"); } }
8、 按顺序编写Employee(实体类对应数据库表名)、EmployeeMapper、EmployeeService、EmployeeServiceImpl、ReggieController
Employee:
package com.andljh.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; }
EmployeeMapper: BaseMapper<T>
@Mapper public interface EmployeeMapper extends BaseMapper<Employee> { }
EmloyeeService: IService<T>
public interface EmployeeService extends IService<Employee> { }
EmployeeServiceImpl: ServiceImpl<M,T>
@Service public class EmployeeServiceImpl extends ServiceImpl<EmployeeMapper, Employee> implements EmployeeService { }
ReggieController:
个e
根据前端的网址和请求方法得到Post请求和/employee/login 路径
@Slf4j @RestController @RequestMapping("/employee") public class ReggieController { LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper<>(); @Autowired private EmployeeService employeeService; /** * 员工登陆 * @param request * @param employee * @return */ @PostMapping("/login") public R<Employee>login(HttpServletRequest request, @RequestBody Employee employee){ String password = employee.getPassword();//首先拿到前端密码 String md5pwd = DigestUtils.md5DigestAsHex(password.getBytes()); //将前端密码进行md5加密 queryWrapper.eq(Employee::getUsername,employee.getUsername());//判断数据库的username 和前端传来的username是否相等 Employee emp = employeeService.getOne(queryWrapper); //emp为数据库的一条数据 不懂emp是什么的同学可以自己debug试试,下方有我debug截图 if(emp==null){ return R.error("登陆失败"); } //epm为数据库数据 等于null,返回登陆失败 if(emp.getStatus()==0) //0表禁用 1表正常 { return R.error("员工已经禁用"); } if(!emp.getPassword().equals(md5pwd)){ return R.error("密码错误"); } request.getSession().setAttribute("employee",emp.getId()); // 将id作为session return R.success(emp); success方法中code=1,前端 }/** * 开发退出登陆,根据前端logout方法得知,code=1即可退出登陆,那我们想办法将code为1 * logout() { * logoutApi().then((res)=>{ * if(res.code === 1){ * localStorage.removeItem('userInfo') * window.location.href = '/backend/page/login/login.html' * } * }) * }, * @param request * @return */ @PostMapping("/logout") public R<String> logout(HttpServletRequest request){ request.getSession().removeAttribute("employee"); //清空session return R.success("退出成功"); /** * success()方法中code=1;而下面前端方法if判断 code=1才可登陆,所以调用success方法 * if (String(res.code) === '1') { * localStorage.setItem('userInfo',JSON.stringify(res.data)) * window.location.href= '/backend/index.html' */} }
总结
1、如果WebMvcConfig写完了还是不能打开页面,刷新以下Maven。
2、SpringBoot+mybatis-plus不熟悉的小伙伴,我建议你非必要情况不要CV大法,idea写了一遍之后可以用记事本自己单独写一遍,加强印象,理解很重要。
持续更新中~ 点个关注,点点爱心支持一下!