SpringDataJPA笔记(5)-子查询

本文介绍了如何在SpringDataJPA中使用子查询创建视图类,并通过@Subselect注解、@Synchronize同步表及@Immutable标注不可修改属性。通过构建repository接口和简单测试方法,展示了子查询的使用流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpringDataJPA-子查询

子查询也是一种视图查询

在数据库实际使用的时候,为了一些业务的设计,有些时候我们需要映射视图到实体,这个时候就可以使用Subselect注解来标注一个视图类

STEP1 构建视图类
@Data
@Entity
@Subselect("select d.id as id, d.name as dog_name, c.name as cat_name from dog_tb d left join cat_tb c on d.id=c.id")
@Synchronize({"dog_tb", "cat_tb"})
public class SubSelectEntity implements Serializable {

    private static final long serialVersionUID = -3795682088296075408L;
    @Id
    private Long id;

    private String dogName;

    private String catName;
}

@Subselect

子查询的注解,里面是原生的sql语句

@Synchronize

需要同步的表,如果表变动了,查询视图会更新这个数据

备注:可以使用@Immutable 来标注这个类不可以修改,因为视图是可读不可写的,修改数据需要修改对应表的数据

STEP2 构建repository接口

和普通的实体类构建repository接口一样

public interface SubSelectRepository extends JpaRepository<SubSelectEntity, Long>, JpaSpecificationExecutor<SubSelectEntity>, Serializable {
}
STEP3 使用

使用也和普通的实体类的使用方法一致,就不详细写了,写两个方法测试一下

@Slf4j
@RestController
@RequestMapping("/chapter/five")
public class ChapterFiveController {

    @Autowired
    private SubSelectRepository subSelectRepository;

    @ApiOperation(value = "findAll", httpMethod = "GET")
    @GetMapping("/find")
    public List<SubSelectEntity> findAll() {
        return subSelectRepository.findAll();
    }

    @ApiOperation(value = "findPage", httpMethod = "GET")
    @GetMapping("/page")
    public Page<SubSelectEntity> findPage(@RequestParam int pageSize, @RequestParam int pageNum) {
        Pageable pageable = PageRequest.of(pageNum, pageSize);
        return subSelectRepository.findAll(pageable);
    }
}

源码参考 GITHUB
欢迎关注微信交流
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值