Java JPA 查询实体部分字段
前言
相信大家在用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 查询实体部分字段的更多相关文章
- java去除查询实体字段多值之间空格
String str = 需要去除的字段; str.replaceAll(",","");
- java 数据库查询Date类型字段 没有了时分秒 全为 00 的解决办法
当取出这个值的时候只能用java.sql.Date而且只能显示年月日,我想知道如何才能显示时分秒 PS:不改变用getdate()存入的前提下! 解决方法:将getDate()方法改为getTim ...
- JPA查询单个字段和多个字段返回类型总结
原文地址:https://blog.csdn.net/weixin_40326509/article/details/80865646 在使用springboot中,需要使用JPQL和SQL去查询记录 ...
- Dynamics CRM使用元数据之一:查询实体的主字段(托管代码版本)
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复159或者20151013可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! Dynamics CRM是基于元 ...
- spring data jpa 查询自定义字段,转换为自定义实体
目标:查询数据库中的字段,然后转换成 JSON 格式的数据,返回前台. 环境:idea 2016.3.4, jdk 1.8, mysql 5.6, spring-boot 1.5.2 背景:首先建立 ...
- 【java】分页查询实体类
package com.dmsd.itoo.tool.pageModel; import java.io.Serializable; import java.util.HashMap; import ...
- spring data jpa查询部分字段、多余附加字段
spring data jpa查询部分字段 第一种方法:使用 model 查询时转化 首先建立一个 model ,写上自己想要查询的字段,然后写上构造函数,这步很重要,因为spring jpa 转化时 ...
- @NamedEntityGraphs --JPA按实体类对象参数中的字段排序问题得解决方法
JPA按实体类对象参数中的字段排序问题得解决方法@Entity @Table(name="complaints") @NamedEntityGraphs({ @NamedEntit ...
- 通过Java反射做实体查询
我们在使用hibernate的时候,查询的时候都会和实体中的一些字段相结合去查询,当然字段少了,还算是比较简单,当字段多了,就不那么容易了,所以就自己写了个方法,根据实体中的字段信息去查询,废话不多说 ...
随机推荐
- WCF服务部署到IIS上,然后通过web服务引用方式出现错误的解决办法
本文转载:http://www.cnblogs.com/shenba/archive/2012/01/06/2313932.html 昨天在用IIS部署一个WCF服务时,碰到了如下错误: 理解了文档内 ...
- Linux堆内存管理深入分析--阿里聚安全
http://www.freebuf.com/author/%E9%98%BF%E9%87%8C%E8%81%9A%E5%AE%89%E5%85%A8
- 微信公众号支付流程(Node实现)
前言 花费了一天时间,调通了微信公众号支付.作下记录,方便以后再次填坑.先声明,微信公众号支付,不同于微信H5支付,这点在本文结束时再详细说明. 微信配置 设置测试目录 在微信公众平台设置,栏目见下图 ...
- Google代码实验室
https://code.google.com/p/google-styleguide/
- Driving the Activity Lifecycle
Before Robolectric 2.2, most tests created Activities by calling constructors directly, (new MyActiv ...
- C# ashx与html的联合使用
本文将介绍ashx和html的联合使用方法,尽管目前流行mvc,但handler一般处理程序还是ASP.NET的基础知识,结合html页面,做出来的网页绝对比WebForm的简洁和效率高. 首先,概要 ...
- You must not call setTag() on a view Glide is targeting
概述 在使用Glide加载图片时,如果出现"You must not call setTag() on a view Glide is targeting"的错误,八成是在使用Li ...
- ip接口调用
<?php header("Content-type: text/html; charset=utf-8"); function getIP(){ if (isset($_S ...
- iOS将产品进行多语言发布,开发
多语言就是程序的国际化.在Xcode中要实现程序的国际化,只需要简单配置,并修改相应的字符串键值对即可. 应用程序的国际化主要包括三个方面:A.程序名称国际化:B.程序内容国际化:C.程序资源国际化 ...
- UITableViewCell 左滑删除
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { return Y ...