这是我参与2022首次更文挑战的第20天,活动详情查看:2022首次更文挑战
学了那么久的用法,今天我们来一个简单的业务整合,简简单单的一个咖啡业务,来整合一下我们前面学到的零碎知识,具体业务如下:
冰墩墩来到我的咖啡馆,在展示咖啡的菜单上,点了一杯美式,然后我们给生成一个订单。然后给其展示出来,ok,那我们开始吧。
展示全部咖啡
展示的话,我们就简单从数据库里查询所有,然后打印,那我们就需要一个查询所有方法,我们前面学了,这里我们使用JRepository,就像这样:
log.info("All Coffee: {}", coffeeRepository.findAll());
我们需要自定义一个,当然你也可根据需要自定义,就像这样:
public interface CoffeeRepository extends JpaRepository<Coffee, Long> {
}
这个前面介绍过,不多提了。
查询美式订单
生成方法很简单,但生成之前得查询我们有没有,于是我们需要一个根据名称查询的方法findone(),就像这样:
Coffee meishi = coffeeService.findOneCoffee("美式")
当然我们还要看这个咖啡存不存在,才能生成订单,因此我们选择用Optional来包装一下我们的对象,它里面有个方法叫 isPresent方法,用来判空。
我们来看一下这个方法,其实也不难,就是定义一个匹配器,然后根据名字来匹配,并忽略大小写,然后根据对象的name属性值和匹配器,映射出一个对象,并用Optional包装后返回
创建美式订单
如果有我们就创建订单,并调用方法保存到数据库中。
这里我们的咖啡是一个可变参数,可以传多个,并保存到一个list集合中,并把这些数据保存到咖啡订单项表里去。当然你可以把它当成中间表,然后指定参数放到数据库中。
如果是付款我们就更新状态,如果是未付款我们就打上其它的状态,业务就完成了。
运行结果
可以看到查询结果为空,我们添加一条数据进去
查到了,冰墩墩的美式咖啡,然后进行订单更新
更新也可以,这里有个警告就是我们的订单状态只能往后偏移,这是为了保证业务逻辑,比如从初始到支付,你不能已经支付的变为初始了,是这样。