Java JPA 查询实体部分字段
2016-10-10 17:01
253 查看
前言
相信大家在用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) { } }
相关文章推荐
- spring-data-jpa只查询实体部分字段
- JPA查询实体部分字段
- Spring data jpa高级查询,部分字段查询,过滤查询,空字符过滤
- hibernate查询部分字段转换成实体bean
- Spring data jpa查询多个部分字段的方法
- 【SpringBoot学习笔记】SpringBoot_03_SpringData—JpaRepository部分字段查询功能
- spring data jpa 查询自定义字段,转换为自定义实体
- spring data jpa 查询自定义字段,转换为自定义实体
- spring data jpa 查询自定义字段,转换为自定义实体
- jpa 本地查询 获取部分字段值
- hibrenate使用select语句查询多张表的部分字段,并封装到一个实体类(无配置文件)中
- JPA使用本地查询实现联表查询,同一结果集中返回多个实体,多个字段
- Jpa 查询部分字段并分页疑惑
- 用java把从数据库中查询出的结果集重新按照结果中的几个字段重新排序
- 查询Java字段的精度方法
- hibernate查询部分字段加struts2显示
- Java中使用hql,sql查询--多表查询后的新实体构建方法详解
- Java中使用hql,sql查询--多表查询后的新实体构建方法详解
- Hibernate中用hql查询部分字段
- java jax-ws发布含有DateTime字段的实体的webservice