天天看點

20201113問題記錄

1、@Resource與@Autowired的差別

@Resource 是通過 byName方式注入的。對應的查找bean的ID屬性

@Autowired是通過類型注入的。對應的class .可以配合@Qualifier 指定裝配相同類型對象的哪個bean.

2、@[email protected]@NoArgsConstructor注解

都是lombok的注解

@Data用來生成get/set方法

@AllArgsConstructor 用來生成包含所有參數的構造方法

@NoArgsConstructor 用來生成無參構造方法。

3、需要特别注意的一點,基礎類型資料是有預設值的,使用JPA自動生成sql,可能會附帶上,需要注意忽略掉!!!!

4、Spring JPA關聯關系中一個fetch屬性,有FetchType.EAGER 和FetchType.LAZY 兩種選擇 。

FetchType.EAGER 使用的JOIN.FetchType.LAZY 使用的SELECT

對于JPA,隻有使用Spring-Data-Jpa提供的方法的時候,配置的FetchType.EAGER才會生效,關聯一條sql。而自己定義的方法,隻有在使用時才會加載,即使用的是懶加載JOIN.FetchType.LAZY。

懶加載的問題是會發送很多SQL請求。怎樣避免這種情況,有兩種方法:1、使用@Query 來寫自己的JPQL  2、@NamedEntityGraphs、@NamedEntityGraph、@EntityGraph 使用這幾個注解,

具體使用方法:

1、在Entity 上添加該注解

@NamedEntityGraphs({

    @NamedEntityGraph(name = "Book.fetch.category",attributeNodes = {@NamedAttributeNode("category")})

})

2、在需要及時加載的method的上使用

@EntityGraph(value = "Book.fetch.category") 或者也可以直接使用實體名 @EntityGraph(attributePaths = {"category"})