使用JPA自定义SQL查询结果

 更新时间:2021年11月22日 08:41:25   作者:coderping  
这篇文章主要介绍了使用JPA自定义SQL查询结果,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

JPA自定义SQL查询结果

很多时候都会遇到自定义sql,自定义返回字段,而不是pojo类。这个情况要通过接口定义返回。

直接上代码

 @Query(value = "select m.field AS field,COUNT(m.field) AS size from MigrationObject m where m.xmlName = ?1 and m.groupName = ?2 group by m.field")
    List<WorkCenter> getKey(String xmlName, String groupName);

对于这种情况,只返回了两个字段,就需要定义一个接口来接收(注意AS别名的配置)

public interface WorkCenter { 
    String getField();
    String getSize();
}

最后跑一下demo代码

   List<WorkCenter> list = migrationObjectRepository.getKey("EN_Work centerResource.xml","Key");
        for (WorkCenter workCenter:list){
            System.out.println(workCenter.getField());
            System.out.println(workCenter.getSize());
        }

ARBPL
5
SPRAS
2
CANUM
2
ENDDA
1
WERKS
5

JPA的SQL查询

一 点睛

JAP通过SQL查询一般有两种方法:通过NamedQuery查询和使用@Query查询。

二 JPA的NamedQuery查询

1 说明

Spring Data JPA支持用JPA的NameQuery来定义查询方法,即一个名称映射一个查询语句。

2 定义

@Entity 
@NamedQuery(name = "Person.withNameAndAddressNamedQuery",
query = "select p from Person p where p.name=?1 and address=?2")
public class Person {
    ......
}

3 使用方法

public interface PersonRepo extends JpaRepository<Person,Long>{
    //使用的是NameQuery里定义的查询语句,而不是根据方法名称来查询
    Person withNameAndAddressNamedQuery(String name,String address);
}

三 使用@Query查询

1 使用参数索引

public interface PersonRepo extends JpaRepository<Person,Long>{
    @Query("select p from Person p where p.address= ?1")
    List<Person> findByAddress(String address);
}

2 使用命名参数

public interface PersonRepo extends JpaRepository<Person,Long>{
    @Query("select p from Person p where p.name= :name and p.address= :address")
    Person withNameAndAddressQuery(@Param("name")String name,@Param("address")String address);
}

3 更新查询

public interface PersonRepo extends JpaRepository<Person,Long>{
    @Modifying
    @Transactional
    @Query("update Person p set p.name=?1")
    int setName(String name);//表示更新语句影响的行数
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java对接微信支付之JSAPI支付(微信公众号支付)

    java对接微信支付之JSAPI支付(微信公众号支付)

    这篇文章主要给大家介绍了关于java对接微信支付之JSAPI支付(微信公众号支付)的相关资料,微信JSAPI支付是近年来非常流行的一种支付方式,它使用了微信支付的SDK和demo来实现支付接口的对接,需要的朋友可以参考下
    2023-07-07
  • Java快速排序的实现方法示例

    Java快速排序的实现方法示例

    快速排序是对冒泡排序的一种改进,下面这篇文章主要给大家介绍了关于Java快速排序的实现方法,文中通过代码介绍的非常详细,对大家的学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-03-03
  • SpringData Repository接口用法解析

    SpringData Repository接口用法解析

    这篇文章主要介绍了SpringData Repository接口用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • 深入学习Java同步机制中的底层实现

    深入学习Java同步机制中的底层实现

    在多线程编程中我们会遇到很多需要使用线程同步机制去解决的并发问题,这些同步机制是如何实现的呢?下面和小编来一起学习吧
    2019-05-05
  • Springboot多种情况yml配置代码实例

    Springboot多种情况yml配置代码实例

    这篇文章主要介绍了Springboot多种情况yml配置代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • 使用mybatis进行数据插入时返回自增id的方法及注意点

    使用mybatis进行数据插入时返回自增id的方法及注意点

    这篇文章主要给大家介绍了关于使用mybatis进行数据插入时返回自增id的方法及注意点,在插入一条数据之后需要返回它的自增主键id,因为插入的实体类数据id为空,后面的逻辑还需要这个id,需要的朋友可以参考下
    2023-09-09
  • Maven中dependencyManagement管理项目依赖项

    Maven中dependencyManagement管理项目依赖项

    在开发 Java 项目时,管理和协调依赖项的版本号是一项重要而繁琐的任务,本文主要介绍了Maven中dependencyManagement管理项目依赖项,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • Java虚拟机之类加载

    Java虚拟机之类加载

    这篇文章主要介绍了Java虚拟机之类加载,文中有非常详细的代码示例,对正在学习java的小伙伴们有很好地帮助,需要的朋友可以参考下
    2021-05-05
  • springboot枚举类型传递的步骤

    springboot枚举类型传递的步骤

    这篇文章主要介绍了springboot枚举类型传递的步骤,帮助大家更好的理解和学习使用springboot,感兴趣的朋友可以了解下
    2021-04-04
  • Maven 项目生成jar运行时提示“没有主清单属性”

    Maven 项目生成jar运行时提示“没有主清单属性”

    这篇文章主要介绍了Maven 项目生成jar运行时提示“没有主清单属性”,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03

最新评论