Spring Data JPA原生SQL查询

package com.wanda.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 */@Repositorypublic 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();    }

}
时间: 2024-12-25 11:51:09

Spring Data JPA原生SQL查询的相关文章

Spring Data Jpa之高级查询(jpa-spec插件)

友情链接:Spring Data Jpa的动态查询库 https://github.com/wenhao/jpa-spec 功能介绍 兼容Spring Data Jpa 和JPA2.1接口. Equal/NotEqual/Like/NotLike/In/NotIn支持可变参数, Equal/NotEqual 支持空(Null)值. 每个条件支持关联查询. 支持自定义条件查询. 条件构建器. 支持分页和排序. 导包: <dependency> <groupId>com.github.

Spring data JPA 理解(默认查询 自定义查询 分页查询)及no session 两种处理方法

简介:Spring Data JPA 其实就是JDK方式的动态代理 (需要一个接口 有一大堆最上边的是Repository接口来自org.springframework.data.repository,还有CrudRepository接口及一个实现类SimpleJpaRepository),只要有接口就可以查询数据库了,实际上就是proxy的方法,具体查询的方法有两种一种是简单式就是方法名为findBy+属性名+(AndOrIsEquals等)另一种是自定义的方法就是属性名是瞎起的向abc xy

spring data jpa 一对多查询

在一对多关系中,我们习惯把一的一方称之为主表,把多的一方称之为从表.在数据库中建立一对多的关系,需要使用数据库的外键约束. 什么是外键? 指的是从表中有一列,取值参照主表的主键,这一列就是外键. package com.ytkj.entity; import javax.persistence.*; import java.io.Serializable; import java.util.ArrayList; import java.util.List; /** * @Entity * 作用:

spring data jpa的动态查询封装(转)

最近使用spring data jpa做了两个项目,对于动态查询的不友好做了个类似hibernate的封装,记录也分享下 首先定义一个所有条件的容器,继承Specification Java代码   /** * 定义一个查询条件容器 * @author lee * * @param <T> */ public class Criteria<T> implements Specification<T>{ private List<Criterion> crit

记: Spring Data Jpa @OneToMany 级联查询被动触发的问题

I have encountered a bug in using Spring Data Jpa. Specifically,when @OneToMany was used to maintain a one-to-many relationship, lazy loading was effective.However,it may passively trigger the cascading query without using the cascading property. My

spring data jpa 自定义sql 左链接查询

@Query(value = "select u.* from appuser_te u LEFT JOIN app_user_history his on his.user_id=u.id where his.apple_app_id=:appleAppId limit 1,3",nativeQuery = true) List<AppUser> findByFlushId(@Param(value="appleAppId") Integer appl

spring data jpa Specification 复杂查询+分页查询

当Repository接口继承了JpaSpecificationExecutor后,我们就可以使用如下接口进行分页查询: /** * Returns a {@link Page} of entities matching the given {@link Specification}. * * @param spec can be {@literal null}. * @param pageable must not be {@literal null}. * @return never {@l

【Spring Data 系列学习】Spring Data JPA 自定义查询,分页,排序,条件查询

Spring Boot Jpa 默认提供 CURD 的方法等方法,在日常中往往时无法满足我们业务的要求,本章节通过自定义简单查询案例进行讲解. 快速上手 项目中的pom.xml.application.properties与 Chapter1 相同 实体类映射数据库表 user 实体类 @Entity public class User implements Serializable { private static final long serialVersionUID = -39076354

Spring data jpa @OneToMany 在一的一端进行查询()对集合属性设置条件查询)

业务场景: 一个商品对应多个仓存,需要查询商品在某个或某几个库存中存在时,查询出来. 实体类 ,商品Goods @Entity @Table(name = "es_goods") public class Goods { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name = "goods_id") private Integer id; private String name; //