当前位置:   article > 正文

jpa 使用原生sql 总结_jpa 原生sql

jpa 原生sql

SQL 使用的是@Query注解,进行编写查询,修改,删除,增加的sql

在**删除和修改,增加方法需要有@Modifying**注解.也可以根据需要添加 @Transactional对事物的支持,查询超时的设置等

@Modifying
@Query("update User u set u.userName = ?1 where u.id = ?2")
int modifyByIdAndUserId(String  userName, Long id);
	
@Transactional
@Modifying
@Query("delete from User where id = ?1")
void deleteByUserId(Long id);
  
@Transactional(timeout = 10)
@Query("select u from User u where u.emailAddress = ?1")
User findByEmailAddress(String emailAddress);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

传参方式

下表索引传参
@Query ( "select u from t_user u where id>?1 and username like ?2" )
List <User > selectUserByParam ( Long id , String name );

@param 命名参数传参
@Query ( "select u from t_user u where id>:id and username like :name" )
List <User > selectUserByParam ( @param('id') Long id ,  @param('name') String name );
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

使用原生的SQL查询

@Query(value="select * from t_user", nativeQuery=true)
List <User > selectAll()
  • 1
  • 2

有nativeQuery = true时,是可以执行原生sql语句,所谓原生sql,也就是说这段sql拷贝到数据库中,然后把参数值给一下就能运行了

nativeQuery = false时,就不是原生sql,而其中的select * from 的xxx中xxx也不是数据库对应的真正的表名,而是对应的实体名,并且sql中的字段名也不是数据库中真正的字段名,而是实体的字段名。

【推荐】自定义接收指定sql的接口对象,这种方式能够根据需要查询需要展示的字段。
package gds.health.domain;
/**
 * 此接口中可以定义多于和接收参数有关的get Methond
 */
public interface UserPoint {
    String getUserId();
    String getUserName();
    String getEmail();
    String getClassName();
    Integer getUPoints();
}

 // 使用定义接口方式实现原生sql 的数据获取
    @Query(value="select u.id userId, u.login userName, sum(p.meals + p.alcohol + p.excercise) uPoints  from Points p, jhi_user u where p.user_id=u.login group by u.id", nativeQuery=true)
    List<UserPoint> findUserPoint();

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

注意:

  1. 可以通过自定义的 JPQL 完成 UPDATE 和 DELETE, INSERT操作
  2. 方法的返回值应该是 int,表示更新语句所影响的行数
  3. 在调用的地方必须加事务,没有事务不能正常执行
  4. 默认情况下, Spring Data 的每个方法上有事务, 但都是一个只读事务. 他们不能完成修改操作
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/119650
推荐阅读
相关标签
  

闽ICP备14008679号