小编Das*_*Boy的帖子

使用 Java 8 谓词的 JPA 存储库过滤器

我在使用 Spring Boot 的一次面试测试中有一个要求,我必须创建一个端点,该端点接受一堆可选的请求参数,然后根据这些参数返回汽车列表,例如汽车型号、车牌、发动机类型、制造商,司机,公司等。汽车,司机和制造商都是独立的实体。

我在 JPARepository 中使用单个 JPQL 查询实现了这个功能,该查询实现了 LEFT JOINS 并在 where 子句中过滤,如 licensePlate = licensePlateParameter OR licensePlatParameter is null 等。

该解决方案有效,但面试官表示该解决方案具有可扩展性和可维护性。我应该使用谓词来实现它。有人可以向我展示一个示例,我如何使用更易于维护的谓词来实现此类功能?一些带有代码的示例将不胜感激。

我认为我很聪明,通过检查参数是否为空来满足可选参数和在单个调用中找到的记录。我想到的另一个与此相关的问题是,从 DB 获取所有记录然后使用谓词对其进行过滤真的是一个好习惯吗?还有当我们涉及多个对象/实体时如何过滤,可以为单个类型创建谓词。

@Query("SELECT d FROM Driver d LEFT JOIN d.car c WHERE (d.name = :name OR :name is null) "
            + "and (c.licensePlate = :licensePlate OR :licensePlate is null) "
            + "and (c.rating = :rating OR :rating is null) " and so on

    List<Driver> findByAttributes(@Param("name") String name, 
            @Param("licensePlate") String licensePlate,
            @Param("rating") Integer rating,
            and so on);
Run Code Online (Sandbox Code Playgroud)

java predicate spring-data-jpa spring-boot

5
推荐指数
1
解决办法
1万
查看次数

在 PostgreSQL 中更新一个非常大的表而不加锁

我有一个非常大的表,有 100M 行,我想在其中更新一列的值,该值基于另一列。下面给出了显示我想要执行的操作的示例查询:

UPDATE mytable SET col2 = 'ABCD'
WHERE col1 is not null
Run Code Online (Sandbox Code Playgroud)

这是具有多个从属的实时环境中的主数据库,我想在不锁定表或影响实时环境性能的情况下更新它。最有效的方法是什么?我正在考虑制作一个程序,使用 limit 之类的方法批量更新 1000 或 10000 行的行,但不太确定如何做到这一点,因为我不太熟悉 Postgres 及其陷阱。哦,两列都没有任何索引,但表有其他列有。

我希望有一个示例程序代码。

谢谢。

postgresql large-data sql-update

1
推荐指数
1
解决办法
7098
查看次数

如何将Javascript数组转换为函数数组?

我在采访中遇到一个问题,他们要求我将数组转换为如下所示的函数数组:

var a = ["a", 24, { foo: "bar" }];
var b = transform(a);

console.log(a[1]); // 24
console.log(b[1]()); // 24
Run Code Online (Sandbox Code Playgroud)

我尝试了很多组合,但我不能真正做他们要求的.有人能告诉我如何实现转换功能吗?

javascript arrays function

-2
推荐指数
1
解决办法
144
查看次数