EntityManager基本查询

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import java.util.List;
import java.util.Map;

import lombok.extern.slf4j.Slf4j;
import org.hibernate.query.internal.NativeQueryImpl;
import org.hibernate.transform.Transformers;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;

@Component
@Slf4j
public class JPAUtils {

    @Autowired
    @PersistenceContext
    private EntityManager entityManager;

    private <T> Query nativeQuery(String sql, Class<T> resultClass, List<Object> params) {
        Assert.hasText(sql, "查询sql为空");
        Query query = null;
        if (resultClass == null) {
            query = entityManager.createNativeQuery(sql);
        } else {
            query = entityManager.createNativeQuery(sql, resultClass);
        }
        log.info("query sql = {}", sql);
        if (params != null && params.size() > 0) {
            log.debug("params = {}", params);
            for (int i = 0; i < params.size(); i++) {
                query.setParameter(i + 1, params.get(i));
            }
        }

        return query;
    }

    /**
     * sql查询返回Map
     *
     * @param sql
     * @param params
     * @return key为查询语句中的字段名,value为对应值
     */
    public List<Map<String, Object>> nativeQueryForMap(String sql, List<Object> params) {
        Query query = nativeQuery(sql, null, params);
        return query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).getResultList();
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_41131531/article/details/88538160
今日推荐