@Subselect映射,子查询,视图.

package com.cheshangma.merchant.entity;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.Id;

import org.hibernate.annotations.Immutable;
import org.hibernate.annotations.Subselect;
import org.hibernate.annotations.Synchronize;


/**
 * 订单视图实体
 * @author yhy
 *
 */
@Entity//注明这是一个实体类(必须的东西)
@Immutable//(网上的说法是注明这个类是不可变的.不过在使用中没有试验过删除了会不会报错,有闲心的可以试试)
@Synchronize({"my_order"})//网上的说法是用来注明查询的表,如果表里面的变动了,再次查询就会更新这个视图的数据
@Subselect(value=" SELECT COUNT(c.id) wait_pay_order,COUNT(d.id) all_order "
    + " FROM (SELECT id FROM my_order WHERE create_date >= DATE_FORMAT(NOW(),'%Y-%m-%d') "
    + " AND create_date <= DATE_FORMAT(DATE_SUB(NOW(),INTERVAL - 1 DAY),'%Y-%m-%d') "
    + " AND order_status = 1) c RIGHT JOIN (SELECT id FROM my_order "
    + " WHERE create_date >= DATE_FORMAT(NOW(),'%Y-%m-%d') AND "
    + " create_date <= DATE_FORMAT(DATE_SUB(NOW(),INTERVAL - 1 DAY),'%Y-%m-%d')) d ON c.id = d.id ")//这个就不用说了.sql语句
public class OrderViewEntity implements Serializable{

  /**
   * 
   */
  private static final long serialVersionUID = 4821069947331419615L;
  @Id//这个东西是必须的,不然启动会报错.至于网上的有些说法是要重新定义一个id,亲测不用,随便给查询出来的一个字段加上这个都行(ps:因为我查出来的数据就是一行.所以随便加在哪个字段都行,但其他的不知道,自己去实验吧)
  private String waitPayOrder;
  @Column(name="all_order")
  private String allOrder;
  //这里有一个坑,注意sql里面的查询结果的别名..一定要注意,经过多次实验报错得出的结论,字段名如果使用了驼峰命名
  //(allOrder),这里的sql查询结果别名就一定要用all_order或者字段名就直接写all_order;如果觉得别扭.可以使用
  //@Column(name="all_order")(其实使用驼峰命名后,不需要使用@Cloumn来指明,因为数据库默认就是按照all_order这
  //种格式来拆分驼峰命名的字段的)如:allOrder字段;当然,字段名和sql结果别名都是全小写(大写)就不会有这个问题了.
  public String getWaitPayOrder() {
    return waitPayOrder;
  }
  public void setWaitPayOrder(String waitPayOrder) {
    this.waitPayOrder = waitPayOrder;
  }
  public String getAllOrder() {
    return allOrder;
  }
  public void setAllOrder(String allOrder) {
    this.allOrder = allOrder;
  }

}

视图类就建好了
接下来就是建repository接口类

package com.cheshangma.merchant.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;

import com.cheshangma.merchant.entity.OrderViewEntity;

/**
 * 订单视图repository
 * @author yhy
 *
 */
@Repository("orderViewRrpository")
public interface OrderViewRrpository
    extends
      JpaRepository<OrderViewEntity, String>,
      JpaSpecificationExecutor<OrderViewEntity> {

}

查询视图就直接调用 OrderViewRepository.findAll();

  @Override
  @Transactional
  @Cacheable(value = "com.cheshangma.merchant.service.internal.OrderServiceImpl.searchByDate()")
  public List<OrderViewEntity> searchByDate() {
    return orderRepository.findAll();
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值