美文网首页
JPA 查询部分字段

JPA 查询部分字段

作者: SteveLaw1124 | 来源:发表于2021-09-08 17:56 被阅读0次

JPA默认得查询会把表里所有数据字段都返回
这样会带来一些问题
1.数据量大的字段会导致mysql I/O问题
2.一些敏感的信息我们不应该直接返回给用户,这样的话我们查出来数据后还得手动过滤一遍

但是JPA在这方面并没有支持得很好,而mybatis可以利用resultMap,resultType
那么JPA里面要怎么做呢
一种是利用jpa的@Query

@Query("SELECT new cn.hbnet.newsguess.web.dto.app.ConfigAttrDto(cf.appId,cf.attrType,cf.attrName,cf.attrValue,cf.attrDesc) FROM ConfigAttr cf WHERE  cf.attrName=?1 ")
    ConfigAttrDto findFirstByAttrNameDto(String attrName);

当然我们首先要创建要返回数据的DTO对象
然后使用HQL语句封装。
不我们可以看看JPA生成的sql

Hibernate: select configattr0_.app_id as col_0_0_, configattr0_.attr_type as col_1_0_, configattr0_.attr_name as col_2_0_, configattr0_.attr_value as col_3_0_, configattr0_.attr_desc as col_4_0_ from config_attr configattr0_ where configattr0_.attr_name=?

第二种是利用entityManager

@Autowired
    private EntityManager entityManager;

public ConfigAttrDto selectByNameDto(String attrDesc){
        String sql = "SELECT app_id as appId,attr_type as attrType,attr_name as attrName," +
                "attr_value as attrValue,attr_desc as attrDesc FROM config_attr WHERE attr_name=:attrName LIMIT 1";
        Query query = entityManager.createNativeQuery(sql);
        query.setParameter("attrName",attrDesc);
        query.unwrap(NativeQuery.class).setResultTransformer(Transformers.aliasToBean(ConfigAttrDto.class));
        Object singleResult = query.getSingleResult();
        return (ConfigAttrDto)singleResult;
    }

生成的sql

Hibernate: SELECT app_id as appId,attr_type as attrType,attr_name as attrName,attr_value as attrValue,attr_desc as attrDesc FROM config_attr WHERE attr_name=? LIMIT 1

相关文章

  • JPA 查询部分字段

    JPA默认得查询会把表里所有数据字段都返回这样会带来一些问题1.数据量大的字段会导致mysql I/O问题2.一些...

  • springboot jpa 查询部分字段

    有两种查询部分字段方式 在repository中使用本地查询@Query返回Set ,类似原生SQL查询 在rep...

  • SpringBoot使用JPA如何查询部分字段

    用过JPA的都知道,只需要继承JpaRepository 根据Jpa的函数命名规范写出接口中的函数,不需要实现,底...

  • JPA查询部分转换

    JPA查询部分转换 方法一: 方法二:需注意类型转换

  • SpringBoot使用Jpa两张表联查返回自定义实体

    前言 在java开发中,用Jpa框架做连表查询时(需要返回两张表的各自部分字段),在返回对象的过程中感觉比较棘手,...

  • 7 Spring-data-jpa查询方法

    springdata-jpa 八种查询方法 Spring Data JPA 简单查询--接口方法 jpa动态查询-...

  • JPA动态查询方式

    如果我们使用JPA查询特定的字段,而不是某个对象,那么最合适的方式是使用动态查询,其使用方式是将查询语句组成的字符...

  • mysql regexp

    在用jpa的过程中需要使用find_in_set这个mysql的方法.使用in查询,当A,B,C中这个字段查询B或...

  • hibernate from tuple 报错

    主要原因是jpa查询sql里返回字段为null,导致赋值失败,import lombok.Data; import...

  • 【后台】列表需求走查

    后台列表页由两部分组成:查询字段和表格列表 一/查询字段 需要注意以下几点 1.哪些字段作为查询字段 不是所有的表...

网友评论

      本文标题:JPA 查询部分字段

      本文链接:https://www.haomeiwen.com/subject/mzgvwltx.html