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"})