iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >springboot jpa之返回表中部分字段如何处理
  • 229
分享到

springboot jpa之返回表中部分字段如何处理

2023-06-22 00:06:21 229人浏览 薄情痞子
摘要

这篇文章主要介绍SpringBoot jpa之返回表中部分字段如何处理,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!springboot jpa返回表中部分字段使用springboot jpa操作数据库可以

这篇文章主要介绍SpringBoot jpa之返回表中部分字段如何处理,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

springboot jpa返回表中部分字段

使用springboot jpa操作数据库可以加快我们的开发效率,对于简单的crud操作来说,使用jpa来开发不要太爽,但是说实话对于一些复杂的数据库操做jpa使用起来就不是这么爽了。

在开发中很多时候我们要返回的可能只是数据库表中或某个类中的一部分字段,这个要是用mybatis的话就很简单,直接在sql中select字段就好了,规范一点就数据传输类接一下,偷个懒的话直接用map接就完事了。但就是这么个小操作在jpa中就不能这么直接。

废话一大堆(⊙_⊙)下面是我在jpa中处理返回部分字段的方法。

public interface RoomOrderTimeRepository extends JpaRepository<RoomOrderTime,Integer>{     @Query("select  new com.ddzrh.dto.RoomOrderTimeOutPut(r.orderTime,COUNT(r.orderTime) )" +            " from RoomOrderTime as r " +            " where r.roomTypeId =:roomId"+            " GROUP BY r.orderTime" )    List<RoomOrderTimeOutPut> queryRoomOrderTime(@Param("roomId") Integer roomId);  }

看完上面的代码相比大家也能猜到,是的没什么好方法,我将要返回的数据都封装到了RoomOrderTimeOutPut类中。

@Datapublic class RoomOrderTimeOutPut {     private Date orderTime;    private Long orderNum;     public RoomOrderTimeOutPut(Date orderTime, Long orderNum) {        this.orderTime = orderTime;        this.orderNum = orderNum;    }    }

像上面的代码,我希望查询返回某个时间某间房的预定数,我就将希望返回的预定时间和预定数封装至RoomOrderTimeOutPut并写以这两个字段为入参的构造函数,这个构造函数一定要写。看Query中的sql 有一个new RoomOrderTimeOutPut 的操作,这里就调用了构造函数,根据构造函数的入参将数据库查出的值传入。

JPA 自定义返回字段

实体类:User.java

@Data@Accessors(chain = true)@EqualsAndHashCode(callSuper = true)@Entity@Table(name = "user")public class User extends AbstractEntity {     @Column(unique = true)    private String username;     private String passWord;     private String nickname;     private String email;     @Column(name = "org_id")    private Long orgId;     @Column(name = "org_name")    private String orgName;}

DTO类:UserDTO.java

import lombok.Value; @Valuepublic class UserDTO {     private String username;     private String nickname;     private String email;}

repository类:UserRepository.java

public interface UserRepository extends JpaRepository<User, Long> {         Optional<User> findByUsername(String username);          <T> Optional<T> findByUsername(String username, Class<T> type);}

测试

@RunWith(SpringRunner.class)@SpringBootTestpublic class UoServerApplicationTests {     @Autowired    UserRepository userRepository;     @Test    public void contextLoads() {        UserDTO userDTO = userRepository.findByUsername("wuqilong", UserDTO.class).get();        Console.log(userDTO);    }}

注意:返回的DTO中属性名称需要和实体类中字段名一致,且加上lombok包中的@Value注解,这种方式对于只需要返回表中部分的字段很方便,如果需要自定义返回字段名称,可以参考以下方法:

需求:统计注册人数

定义一个返回对象

使用@Query(value = "select new com.wd.cloud.uoserver.dto.TjVO(u.orgId ,count(u.orgId)) from User u group by orgId")进行查询。

@Valuepublic class TjVO {     Long orgId;     Long reGISterCount;}    @Query(value = "select new com.wd.cloud.uoserver.dto.TjVO(u.orgId ,count(u.orgId)) from User u group by orgId")    Page<TjVO> tjByOrgId(Pageable pageable);

或者也可以用下面的方法:

定义一个接口,用getXxx定义返回字段。xxx需要和返回字段的别名一致。

如果不一致,可以使用org.springframework.beans.factory.annotation包中的@Value进行映射

public interface TjDTO {         Long getOrgId();        String getRegisterDate();         String getRegisterCount();         @Value("#{target.adminCount}")    Long getManagerCount(); }

repository类:UserRepository.java添加方法tjByOrgId(),返回orgId和registerCount

     @Query(value = "select DATE_FORMAT(gmt_create,\"%Y-%m-%d\") as registerDate,count(*) as registerCount from user group by registerDate",nativeQuery = true)    List<TjDTO> tj();         @Query(value = "select org_id as orgId,count(*) as registerCount from user group by orgId",            countQuery = "select count(*) from user group by org_id", nativeQuery = true)    Page<TjDTO> tjByOrgId(Pageable pageable);

测试:

@RunWith(SpringRunner.class)@SpringBootTestpublic class UoServerApplicationTests {     @Autowired    UserRepository userRepository;     @Test    public void contextLoads() {        List<TjDTO> tjDTOList = userRepository.tj();        tjDTOList.forEach(tjDTO -> {            Console.log("registerDate={},registerCount={}", tjDTO.getRegisterDate(), tjDTO.getRegisterCount());        });    }}

结果日志

Hibernate: select DATE_FORMAT(gmt_create,"%Y-%m-%d") as registerDate,count(*) >as registerCount from user group by registerDate
registerDate=2019-01-28,registerCount=7393
registerDate=2019-03-07,registerCount=1

需求:根据机构分组,统计机构总人数和用户类型为2的人数

@Componentpublic class SpecBuilder {     @PersistenceContext    private EntityManager entityManager;     public List<Object[]> tj(Long orgId) {        CriteriaBuilder cb = entityManager.getCriteriaBuilder();        CriteriaQuery<Object[]> query = cb.createQuery(Object[].class);        Root<User> root = query.from(User.class);        //拼接where条件        List<Predicate> predicateList = new ArrayList<Predicate>();        if (orgId != null) {            predicateList.add(cb.equal(root.get("orgId"), orgId));        }        //加上where条件        query.where(ArrayUtil.toArray(predicateList, Predicate.class));        query.multiselect(root.get("orgId"),                cb.count(root),                cb.sum(cb.<Integer>selectCase().when(cb.equal(root.get("userType"), 2), 1).otherwise(0)));        query.groupBy(root.get("orgId"));        //最终sql:  select org_id,count(id),sum(case when user_type=2 then 1 else 0 end) from user where org_id=?1 group by org_id;        TypedQuery<Object[]> typedQuery = entityManager.createQuery(query);        return typedQuery.getResultList();    } }

测试:

@RunWith(SpringRunner.class)@SpringBootTestpublic class UoServerApplicationTests {     @Autowired    SpecBuilder specBuilder;     @Test    public void contextLoads() {        List<Object[]> tjDTOList1 = specBuilder.tj(169L);        tjDTOList1.forEach(tjDTO -> {            Console.log("orgId={},总人数={},管理员人数={}", tjDTO[0], tjDTO[1], tjDTO[2]);        });    }}

springboot jpa之返回表中部分字段如何处理

以上是“springboot jpa之返回表中部分字段如何处理”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: springboot jpa之返回表中部分字段如何处理

本文链接: https://www.lsjlt.com/news/301418.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • springboot jpa之返回表中部分字段如何处理
    这篇文章主要介绍springboot jpa之返回表中部分字段如何处理,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!springboot jpa返回表中部分字段使用springboot jpa操作数据库可以...
    99+
    2023-06-22
  • springboot jpa之返回表中部分字段的处理详解
    目录springboot jpa返回表中部分字段jpa 自定义返回字段springboot jpa返回表中部分字段 使用springboot jpa操作数据库可以加快我们的开发效率,...
    99+
    2024-04-02
  • SpringBoot中JPA更新时部分字段无效
    目录相关源码计算属性插入或更新时设置默认值JPA基本数据类型关联类型属性综上最近用JPA写业务代码,发现了一个奇怪的bug,在通过注解自动更新时,部分字段在调试时可以找到,却没有被自...
    99+
    2023-05-15
    JPA更新部分字段无效 JPA更新字段
  • 如何只返回实体类中的部分字段问题
    目录如何只返回实体类中的部分字段在实体类上添加注解以下为对注解所有取值的简介java动态添加实体类字段并返回给前端工具类调用前端接口调用测试总结如何只返回实体类中的部分字段 在实体类...
    99+
    2023-05-20
    返回实体类字段 返回实体类部分字段 实体类的部分字段
  • SpringBoot中JPA更新时部分字段无效怎么解决
    这篇“SpringBoot中JPA更新时部分字段无效怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SpringBoo...
    99+
    2023-07-06
  • java只返回实体类中的部分字段问题如何解决
    这篇文章主要介绍了只返回实体类中的部分字段问题如何解决,具有一定借鉴价值,需要的朋友可以参考下。下面就和我一起来看看吧。如何只返回实体类中的部分字段在实体类上添加注解@JsonInclude(JsonInclude.Include.NON_...
    99+
    2023-07-06
  • spring data jpa如何只查询实体部分字段
    需求 现在有一张article表,用来储存文章,对应的实体类如下: package com.qianyucc.blog.model; import lombok.*; impor...
    99+
    2024-04-02
  • PHP如何返回字符串的一部分
    这篇文章将为大家详细讲解有关PHP如何返回字符串的一部分,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP 字符串截取 简介 PHP 提供了多种方法来截取字符串的一部分,以满足不同的需求。以下是常用的字...
    99+
    2024-04-02
  • springboot返回数据量大如何处理
    当Spring Boot应用程序需要返回大量数据时,以下是一些处理方法:1. 分页查询:可以使用Spring Data JPA或其他...
    99+
    2023-09-17
    springboot
  • SpringBoot如何整合ES解析搜索返回字段问题
    这篇文章主要讲解了“SpringBoot如何整合ES解析搜索返回字段问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot如何整合ES解析搜索返回字段问题”吧!1. 数据构造...
    99+
    2023-07-06
  • MySql中的longtext字段的返回问题如何解决
    这篇文章主要介绍了MySql中的longtext字段的返回问题如何解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySql中的longtext字段的返回问题如何解决文章都会有所收获,下面我们一起来看看吧。M...
    99+
    2023-07-02
  • Mysql中如何处理JSON字段
    这篇文章给大家分享的是有关Mysql中如何处理JSON字段的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。mysql能处理json。Mysql中处理JSON字段,可以用json_e...
    99+
    2024-04-02
  • Mybatis-plus如何查询表中指定字段(不查询全部字段)
    目录查询表中指定字段(不查询全部字段)场景解决只查询部分字段的两种方法方法1方法2查询表中指定字段(不查询全部字段) 场景 Mybatis-Plus中BaseMapper提供的方法默...
    99+
    2024-04-02
  • springboot中如何利用fastjson处理返回值为null的属性值
    本篇内容主要讲解“springboot中如何利用fastjson处理返回值为null的属性值”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“springboot中如何利用fastjson处理返回值...
    99+
    2023-06-08
  • SpringBoot统一接口返回及全局异常如何处理
    这篇文章主要介绍“SpringBoot统一接口返回及全局异常如何处理”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringBoot统一接口返回及全局异常如何处理”文章能帮助大家解决问题。一、Sp...
    99+
    2023-07-02
  • SpringBoot中如何统一接口返回与全局异常处理详解
    目录背景 统一接口返回 定义API返回码枚举类 定义正常响应的API统一返回体定义异常响应的API统一返回体编写包装返回结果的自定义注解定义返回结果拦截器WebMvc配置类拦截器注册...
    99+
    2024-04-02
  • PHP如何返回数组中部分的或所有的键名
    这篇文章将为大家详细讲解有关PHP如何返回数组中部分的或所有的键名,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 返回数组部分键名 array_keys($array, $search_value, ...
    99+
    2024-04-02
  • Telegraf:如何使用正则表达式处理器从字段中提取?
    php小编香蕉在本文中将介绍如何使用Telegraf的正则表达式处理器从字段中提取信息。Telegraf是一个功能强大的开源数据收集器,可以将各种数据源的信息收集并发送到不同的目的地。...
    99+
    2024-02-10
  • Mysql中如何批量替换某个字段的部分数据
    这期内容当中小编将会给大家带来有关Mysql中如何批量替换某个字段的部分数据,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.修改字段里的所有含有指定字符串的文字UPDA...
    99+
    2024-04-02
  • 如何在python中处理数字列表
    如何在python中处理数字列表?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、lon...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作