Spring Data JPA实现查询结果返回map或自定义的实体类

yizhihongxing

要实现Spring Data JPA查询结果返回Map或自定义的实体类,需要完成以下步骤:

1.定义自定义实体类

创建一个自定义实体类,在其中定义需要查询的属性,对应数据库中的列:

@Entity
public class CustomEntity {

  @Id
  private Long id;

  private String name;

  @Column(name = "created_time")
  private Date createdTime;

  // getter、setter 方法
}

2.编写自定义查询方法

在Repository接口中定义自定义查询方法,通过@Query注解指定查询语句,使用SELECTE NEW的方式返回自定义实体类:

public interface CustomEntityRepository extends JpaRepository<CustomEntity, Long> {

  @Query("SELECT NEW com.example.CustomEntity(u.id, u.name, u.createdTime) FROM User u WHERE u.name LIKE %?1%")
  List<CustomEntity> findCustomEntities(String nameKeyword);
}

其中SELECT NEW语句中的com.example.CustomEntity是自定义实体类的全类名。

3.查询并返回结果

在Service层调用自定义查询方法,将查询结果返回:

@Service
public class CustomEntityService {

  @Autowired
  private CustomEntityRepository customEntityRepository;

  public List<CustomEntity> findEntities(String keyword) {
    return customEntityRepository.findCustomEntities(keyword);
  }
}

至此,就可以通过自定义实体类和自定义查询方法,返回Map或自定义实体类形式的查询结果了。

下面给出两个示例,以更好地理解上述步骤:

示例一

假设存在一个用户表,其中有id、name和created_time三个列,需要查询所有姓名含有“张”的用户信息,并以自定义实体类形式返回。则可以按照以下步骤进行:

1.定义自定义实体类

@Entity
public class CustomEntity {

  @Id
  private Long id;

  private String name;

  @Column(name = "created_time")
  private Date createdTime;

  // getter、setter方法
}

2.编写自定义查询方法

public interface CustomEntityRepository extends JpaRepository<CustomEntity, Long> {

  @Query("SELECT NEW com.example.CustomEntity(u.id, u.name, u.createdTime) FROM User u WHERE u.name LIKE %?1%")
  List<CustomEntity> fiindCustomEntities(String nameKeyword);
}

3.查询并返回结果

@Service
public class CustomEntityService {

  @Autowired
  private CustomEntityRepository customEntityRepository;

  public List<CustomEntity> findEntities(String keyword) {
    return customEntityRepository.findCustomEntities(keyword);
  }
}

示例二

假设存在一个学生表,其中有id、name、gender和age四个列,需要查询所有年龄大于18岁的学生信息,并以Map形式返回。则可以按照以下步骤进行:

1.编写自定义查询方法

public interface StudentRepository extends JpaRepository<Student, Long> {

  @Query("SELECT new map(s.name as name, s.age as age, s.gender as gender) FROM Student s WHERE s.age > 18")
  List<Map<String, Object>> findStudentsByAge();
}

2.查询并返回结果

@Service
public class StudentService {

  @Autowired
  private StudentRepository studentRepository;

  public List<Map<String, Object>> findStudentsByAge() {
    return studentRepository.findStudentsByAge();
  }
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring Data JPA实现查询结果返回map或自定义的实体类 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • JAVA对象JSON数据互相转换的四种常见情况

    JAVA对象JSON数据互相转换是日常开发中常见的需求之一,下面我们将讲解四种常见情况并给出相应示例说明。 1. JAVA对象转JSON数据 将JAVA对象转换成JSON格式的数据,一般使用JSON库来实现,比如Google Gson、Jackson等。 以Google Gson为例,使用方法如下: // 定义一个JAVA对象 public class Pe…

    Java 2023年5月26日
    00
  • GateWay动态路由与负载均衡详细介绍

    GateWay动态路由与负载均衡详细介绍 什么是 Gateway 动态路由 Gateway (网关) 是微服务架构中的重要组件之一,可以理解为一个整合了多个微服务节点的入口,它处理着客户端请求,根据请求的不同,将请求转发到不同的微服务中。 Gateway 动态路由则是指在网关中,通过配置文件或者 API 等方式,实现动态路由规则的制定和修改。这样,对于不同的…

    Java 2023年5月26日
    00
  • 我的编程学习小圈子

    大家好,我是陶朱公Boy。(一个认真生活总想超越自己的程序员) 一线互联网Java技术专家,有超过8年+后端开发、架构经验。公众号:「陶朱公Boy」欢迎大家关注! 星球简介 一个帮你学编程、做项目、找工作少走弯路的交流圈,进步从此开始! 加入后你可以: 1.获取陶朱公原创编程学习路线、原创编程知识库、原创项目、海量编程学习资料。 2.向陶朱公和大厂嘉宾1对1…

    Java 2023年4月17日
    00
  • 基于Java解决华为机试之字符串合并处理实操

    下面是基于Java解决华为机试之字符串合并处理实操的完整攻略。 1. 题目背景 该机试题目要求将两个字符串进行处理,将它们合并成一个字符串并进行排序。在处理过程中,需要满足特殊规则,即将字母和数字分别单独排序。例如,给定以下两个字符串: str1 = "a3cd2e1" str2 = "ghf4" 则处理后的结果应该为…

    Java 2023年5月27日
    00
  • java防反编译最简单的技巧分享

    这里给您详细讲解一下”Java防反编译最简单的技巧分享”的完整攻略。 标题 1. 为什么要防反编译? 在Java程序中,源代码存在于Class文件中,一旦程序发布,就有可能被反编译,导致源代码泄露,甚至是代码被篡改。为了保护源代码的安全性,就必须对Java程序进行防反编译。 2. 最简单的防反编译技巧 Java程序的防反编译技巧有很多种,比如代码混淆,加密等…

    Java 2023年5月26日
    00
  • Spring Security 实现“记住我”功能及原理解析

    下面是关于“Spring Security 实现‘记住我’功能及原理解析”的完整攻略。 1. Spring Security “记住我”功能原理 1.1 什么是“记住我”功能 “记住我”是指,在浏览器关闭后,再次打开浏览器后用户仍然不需要重新登录,直接就可以访问受保护的资源。这个功能在某些情况下非常方便,比如在家里用个人电脑访问自己的博客网站,不想每次都登录…

    Java 2023年5月20日
    00
  • Java Apache POI报错“NullArgumentException”的原因与解决办法

    “NotOfficeXmlFileException”是Java的Apache POI类库中的一个异常,通常由以下原因之一引起: 文件格式错误:如果文件不是Office Open XML格式,则可能会出现此异常。例如,可能会尝试读取旧版的Microsoft Office文件或尝试读取其他文件类型。 以下是两个实例: 例1 如果文件格式错误,则可以尝试使用正确…

    Java 2023年5月5日
    00
  • uniapp如何编写含有后端的登录注册页面

    uni-app是一个跨平台的前端框架,它可以让我们开发一次代码,然后在多个平台上进行部署。在这里,我们通过uni-app来实现含有后端的登录注册页面。 步骤一:创建uni-app应用 我们需要在本地创建一个uni-app应用,可以通过HBuilder X来创建。我们在控制台中进入到项目目录,然后执行以下命令: $ hbuilderx init 按照提示输入应…

    Java 2023年5月30日
    00
合作推广
合作推广
分享本页
返回顶部