面向小白的SpringBoot的JPA业务大综合玩法

215 阅读2分钟

这是我参与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包装后返回 image.png

创建美式订单

如果有我们就创建订单,并调用方法保存到数据库中。

这里我们的咖啡是一个可变参数,可以传多个,并保存到一个list集合中,并把这些数据保存到咖啡订单项表里去。当然你可以把它当成中间表,然后指定参数放到数据库中。 image.png

如果是付款我们就更新状态,如果是未付款我们就打上其它的状态,业务就完成了。

运行结果

可以看到查询结果为空,我们添加一条数据进去 image.png

查到了,冰墩墩的美式咖啡,然后进行订单更新 image.png

更新也可以,这里有个警告就是我们的订单状态只能往后偏移,这是为了保证业务逻辑,比如从初始到支付,你不能已经支付的变为初始了,是这样。 image.png