前言

经过半个多月的学习,终于把瑞吉外卖的案例完成了,因为不喜欢写博客,因此写代码过程的笔记就没进行更新,直接写一个大总结。项目大多数功能均已实现,如果有小伙伴需要的话,可以在最后的Gitee链接中进行下载。/比心

一、技术栈

后端技术:

  1. SpringBoot
  2. Mybatis Plus

前端技术

  1. Vue
  2. element ui
  3. axios

二、项目截图

1.员工管理

Springboot  瑞吉外卖项目实例总结_springboot

2.菜品管理

Springboot  瑞吉外卖项目实例总结_springboot_02

3.新增套餐

Springboot  瑞吉外卖项目实例总结_分页_03

4.新增套餐

Springboot  瑞吉外卖项目实例总结_vue_04

5.订单明细

Springboot  瑞吉外卖项目实例总结_vue_05

6.用户首页 ![在这里插入图片描述](https://img-blog.csdnimg.cn/ce9a57419c97497784e678af942d9a32.png#pic_center =200x400)

![在这里插入图片描述](https://img-blog.csdnimg.cn/805589308d5b4dd7b482ef2dc2936be9.png#pic_center =200x400)

三、知识点总结

1、Mybatis Plus

1.基本结构

实体类

@Data
public class User implements Serializable {
	private Long id;
    private String name;
}

Mapper层

@Mapper
public interface UserMapper extends BaseMapper<User> {
}

Service层接口

@Mapper
public interface UserService extends IService<User> {
}

Service层实现类

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}

controller层(通过@Resource或者@Autowired注入)

@Resource
    private UserService userService;

2.使用方法通常有两种使用方式,第一种就是正常的增删改查,另一中是使用LambdaQueryWrapper限制条件来查询

增
	userService.save(entity)      //保存一个
	userService.saveBatch(list) //批量保存
删
	userService.remove(lambdaQueryWrapper)  //根据LambdaQueryWrapper删除
	userService.removeById(entity)
改
	userService.update(entity)
	userService.update(lambdaQueryWrapper)
查
	userService.getById(entity)
	userService.getOne(lambdaQueryWrapper)
	userService.list()
	userService.list(lambdaQueryWrapper)

3.LambdaQueryWrapper使用方法:

LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getPhone,user.getPhone()) 
queryWrapper.orderByDesc() //排序
queryWrapper.like() //模糊查找
queryWrapper.apply("xxxxxx,{0}",name)  //sql语句设置条件
userService.list(queryWrapper)

//自定义sql方法:
LambdaQueryWrapper<xxxDO> queryWrapper = new QueryWrapper<xxxDO>()
.select("sex, ifnull(count(id), 0) AS num, CASE WHEN sex = 1 THEN '男' WHEN sex = 0 THEN '女' ELSE '未知' END AS sexStr").lambda();
queryWrapper.eq(xxxDO::getStatus, 0);
queryWrapper.groupBy(xxxDO::getSex);
List<Map<String, Object>> mapList = getBaseMapper().selectMaps(queryWrapper);
Map<String, String> registerNumMap = new HashMap<>(mapList.size());
for (Map<String, Object> map : mapList) {
     String key = String.valueOf(map.get("sexStr"));
     String num = String.valueOf(map.get("num"));
     registerNumMap.put(key, num);
}

4.MybatisPlus 分页插件的配置分页插件需要创建一个配置类

@Configuration
public class MybatisPlusConfig {
   @Bean
   public MybatisPlusInterceptor mybatisPlusInterceptor(){
       MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
       mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
       return mybatisPlusInterceptor;
   }
}’

Controller层:

//创建分页构造器
Page<User> pageInfo = new Page<>(page,pageSize);
	 //创建条件构造器
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
     //通过Service层使用page方法,将数据放入pageInfo中
userService.page(pageInfo,queryWrapper);

2、文件上传、下载

1.文件上传

接收参数: 使用MultipartFile和File进行文件保存方法: file.transferTo(new File(property+fileName)); 具体代码:

public R<String> upload(@RequestParam("file") MultipartFile file){
        //项目相对地址
        String property = System.getProperty("user.dir")+"\\src\\main\\resources\\backend\\upload\\";
        File dir = new File(property);
        //判断是否存在该文件夹,若不存在则新建文件夹
        if (!dir.exists()){
            dir.mkdir();
        }
        //文件原始名称
        String originalFilename = file.getOriginalFilename();
        //获取文件后缀
        String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
        //使用UUID修改文件名称防止文件名重复
        String fileName = UUID.randomUUID()+ suffix;
        try {
            file.transferTo(new File(property+fileName));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return R.success(fileName);
    }

2.文件下载通过文件流传输到页面

String property = System.getProperty("user.dir")+"\\src\\main\\resources\\upload\\";
//获取输入刘对象
FileInputStream inputStream = new FileInputStream(new File(property+name));
//设置传输文件类型
response.setContentType("image/jpeg");
ServletOutputStream outputStream = response.getOutputStream();
int len= 0;
byte[] bytes = new byte[1024];
while((len = inputStream.read(bytes))!=-1){
        outputStream.write(bytes);
        outputStream.flush();
	}
	//关闭资源
	inputStream.close();
	outputStream.close();
	} catch (Exception e) {
	     e.printStackTrace();
	}

3、RSET风格请求方式

4种请求方式:

  1. get
  2. post
  3. put
  4. delete

RSET风格请求方式

Springboot  瑞吉外卖项目实例总结_分页_06

接收参数方法: 使用@PathVariable

@GetMapping("/{id}")  //{}接收参数
    public R<SetmealDto> update(@PathVariable Long id){

4、Utils工具类

1.StringUtils.isNotEmpty() 判断空2.BeanUtils.copyProperties(参数一,参数二,参数三); 参数一是被复制的数据,参数二是复制后的数据,参数三是不被复制的部分。

4、总结

此项目为初学SpringBoot的练手项目案例,知识点较少,但也可以学到一些小知识,提高代码经验。Gitee链接等我最后完善好后会放到下面,有需要的小伙伴自取。假装有个链接。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Spring