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