前言

相信大家在用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. OC的单例模式的实现

    下面是在ARC,GCD下的单例模式实现: 头文件里申明类方法getInstance: #import <Foundation/Foundation.h> @interface Single ...

  2. Java 调用Dll

    Java 中怎么能调用到dll中的函数呢? 关键是java中生的本地函数名參数和dll中的本地函数名參数一模一样. 这个程序是java中调用dll中的求和函数. 一,java代码部分操作 1.新建pr ...

  3. Windows内核之线程的调度,优先级,亲缘性

    1 调度 Windows不是实时操作系统,它是抢占式多线程操作系统.在如果全部优先级同样的情况下,CPU对线程的调度原则是每隔20m就会切换到下一个线程,依据Context中的IP和SP来接着运行上次 ...

  4. Objective-C中的@Property详解

    Objective-C中的@Property详解 @Property (属性) class vairs 这个属性有nonatomic, strong, weak, retain, copy等等 我把它 ...

  5. 10.13 noip模拟试题

    Porble 1时间与空间之旅(tstrip.*) 题目描述 公元22××年,宇宙中最普遍的交通工具是spaceship.spaceship的出现使得星系之间的联系变得更为紧密,所以spaceship ...

  6. html 新元素

    html5新元素 html5语义元素 <header> 定义了文档或者文档的一部分区域的页眉 <nav> 定义了导航链接的部分 <section> 定义了文档的某个 ...

  7. 了解php面向对象

    php 三大特性:封装.继承.多态,一直以来只知道其字,却不大了解其意思和具体使用,只是对继承有大概的了 解,优点是代码的重用性,oop概念,记得有一次我去面试,人家问我什么是oop,然后我答了很多什 ...

  8. JAAS - Document

    JAAS 参考文档: JAAS Reference Guide JAAS Authentication Tutorial JAAS Authorization Tutorial LoginModule ...

  9. Source not found for AeceManager$$FastClassByCGLIB$$15dcd49c.invoke(int, Object, Object[]) line: not available 问题解决

    一般出现这个问题,是manager的问题.控制台没有报错.是调试出来的.. 解决办法: 在调用此方法的manager里的方法上加上try  ...catch 重新启动调试, 就可在控台看到问题所在. ...

  10. 添加Appicon的方法

    1.将设计好的图片,拖拽到Groups&Files的Resources目录下: 2.修改Resources目录下的“工程名-info.plist”文件 3.修改该文件的Iconfile属性,填 ...