spring jpa 扩展 JpaSpecificationExecutor

来源:互联网 发布:sql建表外键 编辑:程序博客网 时间:2024/05/21 11:21
package com.cheche365.cheche.core.repository;import com.cheche365.cheche.core.model.InternalUser;import com.cheche365.cheche.core.model.TelMarketingCenter;import com.cheche365.cheche.core.model.User;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.domain.*;import org.springframework.data.domain.Page;import org.springframework.data.jpa.domain.Specification;import org.springframework.data.jpa.repository.JpaSpecificationExecutor;import org.springframework.data.jpa.repository.Query;import org.springframework.data.jpa.repository.support.JpaEntityInformation;import org.springframework.data.jpa.repository.support.SimpleJpaRepository;import org.springframework.data.repository.PagingAndSortingRepository;import org.springframework.stereotype.Repository;import javax.persistence.EntityManager;import javax.persistence.TypedQuery;import java.util.Date;import java.util.List;@Repositorypublic interface TelMarketingCenterRepository extends TelMarketingCenterRepositoryCustom, PagingAndSortingRepository<TelMarketingCenter, Long> {    List<TelMarketingCenter> findByOperatorAndDisplayOrderByCreateTime(InternalUser operator, boolean display);    @Query(value = "SELECT * FROM tel_marketing_center  WHERE operator=?1 AND display=?2 AND status=?3", nativeQuery = true)    List<TelMarketingCenter> findDisplayByStatus(InternalUser operator, boolean display, long status);    @Query(value = " SELECT * FROM tel_marketing_center " +        "WHERE trigger_time < NOW()+INTERVAL 15 MINUTE AND trigger_time IS NOT NULL " +        "AND operator =?1 ORDER BY trigger_time DESC", nativeQuery = true)    List<TelMarketingCenter> findByInternalUserAndTriggerTime(Long operatorId);    @Query(value = "select * from tel_marketing_center tmc where tmc.status = ?1 and DATE(tmc.update_time) = ?2", nativeQuery = true)    List<TelMarketingCenter> findByStatusAndUpdateTime(Long status, Date updateTime);    TelMarketingCenter findFirstByMobile(String mobile);    TelMarketingCenter findFirstByUser(User user);    @Query(value="select count(*) from tel_marketing_center where operator=?1",nativeQuery = true)    Integer countByOperator(Long operatorId);    @Query(value="select * from tel_marketing_center where operator=?1 limit ?2",nativeQuery = true)    List<TelMarketingCenter> findByOperator(InternalUser internalUser,Integer limit);    List<TelMarketingCenter> findByMobile(String mobile);    List<TelMarketingCenter> findByUser(User user);    @Query(value = "select IFNULL(max(id),0) from tel_marketing_center where create_time <= ?1", nativeQuery = true)    Long findMaxIdByTime(Date createTime);    @Query(value = "SELECT * " +    " FROM tel_marketing_center it " +    " WHERE it.id IN (?1)" , nativeQuery = true)    List<TelMarketingCenter> findUserSourceByIds(List ids);    @Query(value = " SELECT * " +    " FROM tel_marketing_center t " +    " WHERE t.mobile IN ?1  " , nativeQuery = true)    List<TelMarketingCenter> findTelMarketingCenterByMobiles(List mobiles);    @Query(value = " SELECT s.description, count(*)                       " +        " FROM tel_marketing_center t                               " +        " JOIN tel_marketing_center_source s ON t.source = s.id     " +        " WHERE t.create_time BETWEEN ?1 AND ?2 GROUP BY t.source   " , nativeQuery = true)    List<Object[]> findSourceInputAmount(Date startTime, Date endTime);    @Query(value = " SELECT center.* " +        " FROM tel_marketing_center center " +        " LEFT JOIN mobile_area area " +        " ON center.mobile = area.mobile " +        " WHERE area.mobile IS NULL AND center.id>?1  LIMIT ?2 " , nativeQuery = true)    List<TelMarketingCenter> findByAreaIsNull(Long id,Integer limit);    @Query(value = " SELECT count(*) " +        " FROM tel_marketing_center center " +        " LEFT JOIN mobile_area area " +        " ON center.mobile = area.mobile " +        " WHERE area.mobile IS NULL   " , nativeQuery = true)    Long countByAreaIsNull();    @Query(value = " SELECT t.* FROM tel_marketing_center t                                                                         " +        " where t.`status` not in (?5)                                                                      " +        " and (((t.trigger_time < NOW() OR t.trigger_time IS NULL) and t.expire_time BETWEEN ?1 and ?2)                             " +        "  or (t.expire_time < NOW() and (DAYOFYEAR(t.trigger_time) < DAYOFYEAR(NOW()+INTERVAL -1 year) OR t.trigger_time IS NULL) " +        "     and DAYOFYEAR(t.expire_time) BETWEEN DAYOFYEAR(?1+INTERVAL -1 year) and DAYOFYEAR(?2+INTERVAL -1 year)))            " +        "     LIMIT ?4 OFFSET ?3                                                                                                  " , nativeQuery = true)    List<TelMarketingCenter> findPushableData(Date startDate, Date endDate, int startIndex, int pageSize, List statusParams);    @Query(value = "select count(*) from tel_marketing_center t where t.trigger_time BETWEEN ?1 AND ?2 and (case when ISNULL(?3) then 1 = 1 else t.operator = ?3 end)", nativeQuery = true)    Integer countByTriggerTimeBetween(Date startDate, Date endDate, Long operator);    @Query(value = "select t.* from tel_marketing_center t where t.trigger_time BETWEEN ?1 AND ?2 and (case when ISNULL(?3) then 1 = 1 else t.operator = ?3 end) order by t.trigger_time desc LIMIT ?4, ?5", nativeQuery = true)    List<TelMarketingCenter> findByTriggerTimeBetween(Date startDate, Date endDate, Long operator, Integer firstResult, Integer maxResult);}interface TelMarketingCenterRepositoryCustom extends  JpaSpecificationExecutor<TelMarketingCenter>{    Page<TelMarketingCenter> queryAllLimit(Specification<TelMarketingCenter> spec, Pageable pageable);}class TelMarketingCenterRepositoryImpl extends SimpleJpaRepository<TelMarketingCenter,Long> implements TelMarketingCenterRepositoryCustom {    public TelMarketingCenterRepositoryImpl(JpaEntityInformation entityInformation, EntityManager entityManager) {        super(entityInformation, entityManager);    }    public TelMarketingCenterRepositoryImpl(Class domainClass, EntityManager em) {        super(domainClass, em);    }    @Autowired    public TelMarketingCenterRepositoryImpl(EntityManager entityManager){        super(TelMarketingCenter.class, entityManager);    }    @Override    public Page<TelMarketingCenter> queryAllLimit(Specification<TelMarketingCenter> spec, Pageable pageable) {        TypedQuery query = super.getQuery(spec, pageable);        return readPage(query, pageable, spec);    }    @Override    protected Page readPage(TypedQuery query, Pageable pageable, Specification spec) {        query.setFirstResult(pageable.getOffset());        query.setMaxResults(pageable.getPageSize());        return new PageImpl(query.getResultList());    }}
阅读全文
0 0