博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java JPA 查询实体部分字段
阅读量:5878 次
发布时间:2019-06-19

本文共 2519 字,大约阅读时间需要 8 分钟。

前言

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

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

实现

public interface BaseService
{ List
findAllByNavtiveSQLBase(String sql); Page
findAllByNavtiveSQLPagingBase(String sql, Pageable pageable);}
public abstract class BaseServiceImpl
implements BaseService
{ @Autowired protected BaseRepository
baseRepository; @PersistenceContext(unitName="primaryPersistenceUnit") @Qualifier(value = "primaryDataSource") @Autowired protected EntityManager entityManager; @Override public List
findAllByNavtiveSQLBase(String sql){ try { Query query = entityManager.createNativeQuery(sql); @SuppressWarnings("unchecked") List
list = query.getResultList(); System.out.println("list.size() = " + list.size()); entityManager.close(); return list; } catch (RuntimeException ex) { throw ex; } } @Override public Page
findAllByNavtiveSQLPagingBase(String sql, Pageable pageable){ try { Query query = entityManager.createNativeQuery(sql); long total = query.getResultList().size(); Iterator
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
list = query.getResultList(); entityManager.close(); return new PageImpl
(list, pageable, total); } catch (RuntimeException ex) { throw ex; } }}
@Servicepublic class ServiceAttendanceRecordImpl extends BaseServiceImpl
implements ServiceAttendanceRecord {}

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

如何使用

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

转载于:https://www.cnblogs.com/Romantic/p/5946403.html

你可能感兴趣的文章
前台页面之<base>标签
查看>>
angular分页插件tm.pagination 解决触发二次请求的问题
查看>>
day08-文件操作
查看>>
教学-45 对象的相等
查看>>
贪食蛇
查看>>
关于Spring 中的事务
查看>>
为什么现在都用面向对象开发,为什么现在都用分层开发结构?
查看>>
【离散数学】 SDUT OJ 偏序关系
查看>>
写给学弟学妹的产品入门建议(持续更新)
查看>>
view视图总结
查看>>
oracle11g 数据库导出报“ EXP-00003:
查看>>
201521123009 《Java程序设计》第11周学习总结
查看>>
可解释的机器学习
查看>>
Python3之多线程学习
查看>>
aspx页面@Page指令解析
查看>>
POJ 2002
查看>>
MVC和MTV结构分析
查看>>
(转)微信网页扫码登录的实现
查看>>
mariadb启动报错:[ERROR] Can't start server : Bind on unix socket: Permission denied
查看>>
nginx的信号量
查看>>