zoukankan      html  css  js  c++  java
  • Spring Data JPA原生SQL查询

    package com.test.cms.dao.repository;
    import org.springframework.stereotype.Repository;
    import javax.persistence.EntityManager;
    import javax.persistence.PersistenceContext;
    import javax.persistence.Query;
    import java.math.BigInteger;
    import java.util.*;

    /**
    * 构建复杂查询
    * @author lchb
    */
    @Repository
    public class NativeQueryRepository{

    @PersistenceContext
    private EntityManager entityManager;

    /**
    * 根据sql查询
    * @param sql
    * @param resultClass
    * @param <T>
    * @return
    */
    public <T> List<T> findBySql(String sql,Class resultClass){
    Query nativeQuery=null;
    if(resultClass!=null && !resultClass.equals(Object.class)) {
    nativeQuery = entityManager.createNativeQuery(sql, resultClass);
    }else{
    nativeQuery = entityManager.createNativeQuery(sql);
    }

    List rows = nativeQuery.getResultList();
    List<T> resultList=new ArrayList<T>();
    for (Object obj : rows) {
    T row=(T)obj;
    resultList.add(row);
    }
    return resultList;
    }

    /**
    * 根据参数查询
    * @param sql
    * @param parameters
    * @param resultClass
    * @param <T>
    * @return
    */
    public <T> List<T> findBySql(String sql,Map<String,Object> parameters,Class resultClass){
    Query nativeQuery=null;
    if(resultClass!=null && !resultClass.equals(Object.class)) {
    nativeQuery = entityManager.createNativeQuery(sql, resultClass);
    }else{
    nativeQuery = entityManager.createNativeQuery(sql);
    }

    Iterator<Map.Entry<String,Object>> entries = parameters.entrySet().iterator();
    while (entries.hasNext()) {
    Map.Entry<String,Object> entry = entries.next();
    nativeQuery.setParameter(entry.getKey(),entry.getValue());
    }

    List rows = nativeQuery.getResultList();
    List<T> resultList=new ArrayList<T>();
    for (Object obj : rows) {
    T row=(T)obj;
    resultList.add(row);
    }
    return resultList;
    }


    public Integer findCountBySql(String sql,Map<String,Object> parameters){
    List<Object> list=this.findBySql(sql,parameters,Object.class);
    BigInteger total=(BigInteger)list.get(0);
    return total.intValue();
    }

    }
  • 相关阅读:
    web前端技术社区分享
    programming-challenges Shoemaker&#39;s Problem (110405) 题解
    caffe 训练測试自己的数据集
    BootStrap有用代码片段(持续总结)
    H5学习_番外篇_PHP数据库操作
    WPF-MVVM-Demo
    android Toast大全(五种情形)建立属于你自己的Toast
    Java
    记一次死锁问题的排查和解决
    一步一步跟我学习lucene(19)---lucene增量更新和NRT(near-real-time)Query近实时查询
  • 原文地址:https://www.cnblogs.com/lchb/p/7506944.html
Copyright © 2011-2022 走看看