用@Query标注自定义查询语句用原生sql查询符合时间要求的数据与分页等功能

         这个星期在学这开发API接口,其中数据库操作均使用JPA,以下对我遇到的业务逻辑里的一些数据库操作进行小总结,以备参考。

         实例一:查询数据库中满足当前时间的广告(开始时间<=当前时间<=结束时间)

         

package cn.mejor.services.advert_service.dao;

import cn.mejor.services.advert_service.domain.Advert;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

import java.util.List;

/**
 * Created by tl on 2017/1/19.
 */
public interface AdvertRepository extends JpaRepository {
    @Query(value="select * from mfzs_shop_ads a where DATEDIFF(NOW(),starttime)>0 and DATEDIFF(NOW(),endtime)<0",nativeQuery=true)
    List findAvailableAdvs();
}

         实例二:查询数据库中满足后台上传的瓷砖及该用户自己上传的瓷砖并分页显示

        

package cn.mejor.services.color_service.dao;

import cn.mejor.services.color_service.domain.CeramicTile;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;

import java.util.List;


/**
 * Created by tl on 2017/1/16.
 */
public interface CeramicTileRepository extends JpaRepository {

    @Modifying
    @Query(value="select c.* from mfzs_ceramic_tile c where c.type=1 or c.type=2 and c.user_id=?1 limit ?2,?3" ,nativeQuery=true)
    List findByTypeAndUserId(long userId,int page,int pageSize);

    CeramicTile findByImgId(long imgId);

}


         注意:@Query  中 nativeQuery=true 表示为原生Sql不能与Pageable一起使用,所以用sql的limit|来实现分页查询。

        

        

       

你可能感兴趣的:(my,code)