Spring boot多字段模糊查询和外键投影查询

在后端开发中,要实现多字段模糊查询和外键的投影映射,必须重新写查询接口,才能实现模糊查询和外键映射兼得。
如下所示是多字段模糊查询的抽象类,接口只要继承就可以。

/**
 * 多字段模糊化搜索抽象类
 *
 * @param <T> 需要模糊化搜索的实体类
 */
public abstract class FuzzySearchController<T> {

    // 根据实体类声明其数据库操作接口
    @Autowired
    protected JpaRepository<T, Long> repository;

    // 匹配规则
    protected final ExampleMatcher defaultExampleMatcher =
        ExampleMatcher.matching().
            withIgnoreCase(). // 忽略大小写
            withIgnorePaths("id"). // 忽略 id(因为有 id 会变成单个查询)
            withIgnoreNullValues(). // 忽略 null 值
            withIgnorePaths("learnNumbers").
            withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING); // 字符串匹配规则为包含

    @GetMapping("/fuzzy")
    public ResponseEntity<PagedResources> fuzzySearch(T x, Pageable pageable) {
        Page<T> data = repository.findAll(Example.of(x, defaultExampleMatcher),pageable);
        PagedResources.PageMetadata pageMetadata =
            new PagedResources.PageMetadata(
                data.getSize(), // 每页大小
                data.getNumber(), // 当前页数(从 0 开始)
                data.getTotalElements(), // 总记录条数
                data.getTotalPages() // 总页数
            );
        return ResponseEntity.ok(wrap(data, pageMetadata));
    }
}

要两个都实现必须添加投影配置类,如下所示:

@Configuration
public class ProjectionConfiguration {

    @Bean
    public SpelAwareProxyProjectionFactory projectionFactory() {
        return new SpelAwareProxyProjectionFactory();
    }
}

然后重写接口:

 @GetMapping("/fuzzy-projection")
    public ResponseEntity<PagedResources> fuzzyCourseListsesProjection(CourseLists courseLists,Pageable pageable){
        Page<CourseLists> data=repository.findAll(Example.of(courseLists,defaultExampleMatcher),pageable);
        Page<CourseListInline> projectionData=data.map(
                courseLists1 -> projectionFactory.createProjection(CourseListInline.class,courseLists1));
        PagedResources.PageMetadata pageMetadata =
                new PagedResources.PageMetadata(
                        data.getSize(),
                        data.getNumber(),
                        data.getTotalElements(),
                        data.getTotalPages());
        return ResponseEntity.ok(wrap(projectionData, pageMetadata));
    }

这样就实现了对字段模糊查询和投影外键。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值