Springboot +Vue 瑞吉外卖项目实例总结

前言

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

一、技术栈

后端技术:

  1. SpringBoot
  2. Mybatis Plus

前端技术

  1. Vue
  2. element ui
  3. axios

二、项目截图

1.员工管理
员工管理
2.菜品管理
菜品管理
3.新增套餐
新增套餐
4.新增套餐
新增套餐
5.订单明细
在这里插入图片描述
6.用户首页
在这里插入图片描述
在这里插入图片描述

三、知识点总结

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风格请求方式
在这里插入图片描述
接收参数方法:
使用@PathVariable

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

4、Utils工具类

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

4、总结

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

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值