@Subselect映射,子查询,视图.
2017-08-25 18:37
148 查看
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(); }
相关文章推荐
- MySQL命令篇之库、表、索引、用户、视图及SELECT查询
- 关于sql视图--定义视图的查询不能包含order by子句,除非在select 语句的选择列表中还有top子句---问题解决
- hibernate 通过子查询预抓取集合 fetch subselect join (最后遗留疑问)
- linux下mysql Select查询命令及视图
- 在SELECT语句的FROM子句中最多可以指定多少个表或视图,相互之间要用什么分隔,当所查询的表不在当前数据库时,可用什么格式来指出表或视图对象?
- 关于Hibernate映射视图后数据查询的方法
- mysql 创建视图时提示View's SELECT contains a subquery in the FROM clause
- mysql 创建视图出现1349 View's SELECT contains a subquery in the FROM clause解决办法
- 数据检索-子查询(subselect)
- 在视图或者子查询中查询rowid出错提示cannot select ROWID from a join view without a key-preserved table
- MyBatis学习笔记(1)—— XML映射文件の查询(select)
- mysql创建视图 :View's SELECT contains a subquery in the FROM clause
- thinkphp5里面 使用where('id',$id)->select()查询一条记录,在视图页面出错
- Mysql创建视图 :View's SELECT contains a subquery in the FROM clause
- Hibernate中子查询(subselect)的使用
- 第三十天 MySQL语句DDL、DDL语句索引的策略、Select查询语句、子查询视图
- 关于hibernate查询视图时,相同主键的两条记录映射问题【已解决】
- 关于hibernate查询视图时,相同主键的两条记录映射问题【已解决】
- 授予用户select另一个用户所有表和视图的权限
- Select语句的子查询和多表操作.六