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

来源:互联网 发布:搜狐汽车 大数据 编辑:程序博客网 时间:2024/06/05 09:35
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();  }
原创粉丝点击