Spring Boot(二):Many To Many的操作(后台数据库处理)

        Day(每日)和Dish(菜谱)属于多对多关系,一天可以有多个菜谱选择,一个菜谱可以被多天选择。定义两张表时确定好两个表的联系,会自动生成第三张表来存放相关联的ID。

        创建两张表时可设定一张表为关系维持方,使用@ManyToMany注解和@JoinTable注解。

day表的创建

        dishSet用于存放这一个选择的哪些菜谱。

        @JsonIdentityReference(alwaysAsId = true)使dishSet中都以dish的Id存放。

        @JoinTable定义表名,以及对应属性joinColumns为关系维持方的属性,inverseJoinColumns为被维护方的属性。

Spring Boot(二):Many To Many的操作(后台数据库处理)_第1张图片
dish表的创建

        @ManyToMany中mappedBy = "dishSet"表示该表与day中的dishSet相关联,fetch设置该表为懒加载方式,需要使用到这些数据时再进行加载。

        在这之前需要创建一个Dao类来操作数据库

Dao类继承自两个Jpa类,用于操作数据库
Spring Boot(二):Many To Many的操作(后台数据库处理)_第2张图片
Dao类下的delete方法

        使用@Transactional这个注解的类或者方法表示该类里面的所有方法或者这个方法的事务由spring处理,来保证事务的原子性,即是方法里面对数据库操作,如果失败则spring负责回滚操作,成功则提交操作。这样删除数据操作就算中间失败出错,也会恢复数据。

        对事务的理解:

        事务是一个整体,结果就两种(成功或者失败)要么全部成功(提交),要么全部失败(回滚),就算成功一部分也要(回滚)。

        事物的四个特性

  1、原子性:对数据进行操作的时候,要么全都执行,要么全都不执行。

  2、一致性:和原子性是分不开的,事务执行成功,说明全部都执行了,那么就使数据库从一个一致性状态变到另一个一致性状了。

  3、隔离性: 一个事务的执行不能被其他事务干扰

     4、持续性: 事务一旦提交成功,那么数据库里的数据就会永久性的改变。

        @Modifying注解用于标注这是一个Updata或者Delete操作

后台接收前端传递回来的数据后执行以下操作:

Spring Boot(二):Many To Many的操作(后台数据库处理)_第3张图片
当向day中添加dish的关系

        先根据day的Id将第三张表中有关这个Id的数据删除,再通过jdbc.batchUpdata对第三张表执行插入数据的操作。该方法适用于数据量不多的情况。

        前后端传递数据的类型要一致。

你可能感兴趣的:(Spring Boot(二):Many To Many的操作(后台数据库处理))