前言

相信大家在用Java JPA作为ORM的时候都会有这种困惑,就是某个表T我仅仅希望取到其中的A、B、C三个字段,可是jpa是通过Entity Class映射的方式组合查询结果的。

那么如何通过使用JPA查询部分想要的内容,下面我把它做了一些通用的封装,供大家参考。痛快点,直接上代码!

实现


public interface BaseService<T,ID extends Serializable> { List<Object[]> findAllByNavtiveSQLBase(String sql); Page<Object[]> findAllByNavtiveSQLPagingBase(String sql, Pageable pageable);
}

public abstract class BaseServiceImpl<T, ID extends Serializable> implements BaseService<T, ID> { @Autowired
protected BaseRepository<T, ID> baseRepository;
@PersistenceContext(unitName="primaryPersistenceUnit")
@Qualifier(value = "primaryDataSource")
@Autowired
protected EntityManager entityManager; @Override
public List<Object[]> findAllByNavtiveSQLBase(String sql){
try {
Query query = entityManager.createNativeQuery(sql);
@SuppressWarnings("unchecked")
List<Object[]> list = query.getResultList();
System.out.println("list.size() = " + list.size());
entityManager.close();
return list;
} catch (RuntimeException ex) {
throw ex;
}
} @Override
public Page<Object[]> findAllByNavtiveSQLPagingBase(String sql, Pageable pageable){
try {
Query query = entityManager.createNativeQuery(sql);
long total = query.getResultList().size(); Iterator<Order> orders = pageable.getSort().iterator();
String pageOrder = orders.hasNext() ? "order by" : "";
while (orders.hasNext()) {
Order order = (Order) orders.next();
pageOrder += String.format(" %s %s%s", order.getProperty(), order.getDirection(), (orders.hasNext() ? ", " : ""));
} int size = pageable.getPageSize();
int begin = (pageable.getPageNumber() - 1) * size;
String pageSql = String.format("%s %s limit %s, %s", sql, pageOrder, begin, size); System.out.println("pageSql = " + pageSql);
query = entityManager.createNativeQuery(pageSql);
@SuppressWarnings("unchecked")
List<Object[]> list = query.getResultList(); entityManager.close();
return new PageImpl<Object[]>(list, pageable, total);
} catch (RuntimeException ex) {
throw ex;
}
}
}

@Service
public class ServiceAttendanceRecordImpl extends BaseServiceImpl<AttendanceRecord,Integer> implements ServiceAttendanceRecord { }

所有继承了BaseServiceImpl类的实现默认都有了通用的sql查询功能

如何使用


List<Object[]> list = serviceCompanyEntityImpl.findAllByNavtiveSQLBase("SELECT A, B, C FROM T");
for (Object[] objects : list) {
for (Object object : objects) { }
}

Java JPA 查询实体部分字段的更多相关文章

  1. java去除查询实体字段多值之间空格

    String str = 需要去除的字段; str.replaceAll(",","");

  2. java 数据库查询Date类型字段 没有了时分秒 全为 00 的解决办法

    当取出这个值的时候只能用java.sql.Date而且只能显示年月日,我想知道如何才能显示时分秒   PS:不改变用getdate()存入的前提下! 解决方法:将getDate()方法改为getTim ...

  3. JPA查询单个字段和多个字段返回类型总结

    原文地址:https://blog.csdn.net/weixin_40326509/article/details/80865646 在使用springboot中,需要使用JPQL和SQL去查询记录 ...

  4. Dynamics CRM使用元数据之一:查询实体的主字段(托管代码版本)

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复159或者20151013可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! Dynamics CRM是基于元 ...

  5. spring data jpa 查询自定义字段,转换为自定义实体

    目标:查询数据库中的字段,然后转换成 JSON 格式的数据,返回前台. 环境:idea 2016.3.4, jdk 1.8, mysql 5.6, spring-boot 1.5.2 背景:首先建立 ...

  6. 【java】分页查询实体类

    package com.dmsd.itoo.tool.pageModel; import java.io.Serializable; import java.util.HashMap; import ...

  7. spring data jpa查询部分字段、多余附加字段

    spring data jpa查询部分字段 第一种方法:使用 model 查询时转化 首先建立一个 model ,写上自己想要查询的字段,然后写上构造函数,这步很重要,因为spring jpa 转化时 ...

  8. @NamedEntityGraphs --JPA按实体类对象参数中的字段排序问题得解决方法

    JPA按实体类对象参数中的字段排序问题得解决方法@Entity @Table(name="complaints") @NamedEntityGraphs({ @NamedEntit ...

  9. 通过Java反射做实体查询

    我们在使用hibernate的时候,查询的时候都会和实体中的一些字段相结合去查询,当然字段少了,还算是比较简单,当字段多了,就不那么容易了,所以就自己写了个方法,根据实体中的字段信息去查询,废话不多说 ...

随机推荐

  1. javascript正则表达式简述

    compile 编译或改变字符串,参数跟new RegExp相同 var patt = /man/g; var str = "man and woman"; str.replace ...

  2. C#自定义泛型类绑定ComboBox控件

    C# WinForm ComboBox 自定义数据项 (ComboBoxItem ) WinForm下的ComboBox默认是以多行文本来设定显示列表的, 这通常不符合大家日常的应用, 因为大家日常应 ...

  3. SAE 上传根目录不存在!请尝试手动创建:./Uploads/Picture/

    请在Application\Common\Conf\config.php中,添加'FILE_UPLOAD_TYPE' => 'Sae'

  4. Codeforces 15B Laser

    题目链接:点击打开链接 #include<stdio.h> #include<iostream> #include<string.h> #include<se ...

  5. C#系列之值类型和引用类型

    前言 这几天一直在思考这章讨论什么, 在上一章讨论string的时候牵涉到引用类型,那么我们这一章讨论讨论一下,值类型和引用类型. 值类型和引用类型,它们的区别来源于传值方式.有人会认为值类型就存在栈 ...

  6. 在32位Windows 8或Windows 7上安装Windows Phone 8 SDK

    这需要一点技巧的,其实WPSDK8是支持32位系统的,可因为微软脑残的限制,安装方法如下: 这里必需要有一个工具,OllyDbg 2.0,去官网下载即可. 启动OD,在菜单打开选项窗口,在Events ...

  7. CMake 简单介绍 图

    http://tech.uc.cn/?p=914     CMake特点 CMake需要用户用CMake规范的语法编写CMake脚本,该语法简单易用,入门极其顺手 原生支持 C/C++/Fortran ...

  8. iOS 复杂动画之抽丝剥茧

    一.前言 随着开发者的增多和时间的累积,AppStore已经有非常多的应用了,每年都有很多新的APP产生.但是我们手机上留存的应用有限,所以如何吸引用户,成为产品设计的一项重要内容.其中炫酷的动画效果 ...

  9. MD5 SHA-1 示例

    测试代码 public class SignatureUtils {     public static void main(String[] args) throws Exception {     ...

  10. gulp完成javascript压缩合并,css压缩

    最近需要对项目进行优化,主要是对js的压缩合并和css文件的压缩,查找相关资料之后发现gulp可以实现相关的功能,特此分享一下使用心得. 1.安装gulp gulp是基于Node.js的前端构建工具. ...