JPA 笔记

JPA,Java Persistence API的简称,中文名为Java持久层API。

JPA 是一种规范,它建立了实体类对象和数据库表之间的映射关系,并可以据此将实体对象持久化到数据库表中。

Spring-data-jpa 是在JPA规范下提供的 Repository 层的实现。

示例:

@Query(value = "select ID,LON,LAT,WARN_AREA_ID,PHASE_ID,GRID_INDEXS,K_LON,K_LAT from INFO_RIVER_POINTS where phase_id = ?1", nativeQuery = true)
List<InfoRiverPointsEntity> findByPhaseId(Integer phaseId);
@Query(value = "select a.warnAreaId from InfoRiverPointsEntity a where a.warnAreaId LIKE :id")
List<InfoRiverPointsEntity> findByCode(@Param("id")String id);

也可以通过这种方式实现修改、删除和添加:

@Modifying
@Transactional @Query(
"update Person set email = :email where lastName =:lastName") void updatePersonEmailByLastName(@Param("lastName")String lastName,@Param("email")String email);

总结: 
(1)可以通过自定义的 JPQL 完成 UPDATE 和 DELETE 操作。 注意: JPQL 不支持使用 INSERT; 
(2)在 @Query 注解中编写 JPQL 语句, 但必须使用 @Modifying 进行修饰. 以通知 SpringData, 这是一个 UPDATE 或 DELETE 操作 
(3)UPDATE 或 DELETE 操作需要使用事务,此时需要定义 Service 层,在 Service 层的方法上添加事务操作; 
(4)默认情况下, SpringData 的每个方法上有事务, 但都是一个只读事务。 他们不能完成修改操作。
(5)在 @Query 标签中,如果不使用 nativeQuery,则查询语言为 JPQL,用实体类查询,用实体类接收; 
(6)在 @Query 标签中,如果 nativeQuery 为 true,则查询语言为原生 sql,如果不是 SELECT * ,则无法用实体类接收;
(7)在调用 save 方法插入数据时,以实体类 List 的形式,对数据入库批量操作,比在循环中单个插入,对时间开销更小; 

原文地址:https://www.cnblogs.com/unique1319/p/9014754.html