gpt4 book ai didi

java - Spring Boot 扩展 CrudRepository

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:32:29 25 4
gpt4 key购买 nike

我在 Spring Boot 应用程序中使用 Hibernate。我正在为我的所有模型对象创建一个新的 CrudRepository,以执行基本的 CRUD 任务。它们看起来像这样:

@Repository
public interface FoobarCrudRepo extends CrudRepository<Foobar, Long> {
}

但之后我总是需要做一些额外的事情,比如带有不等式的自定义搜索查询等。我遵循这样的模式:

@Repository
public class FoobarDao {

@PersistenceContext
EntityManager em;

public List<Foobar> findFoobarsByDate(Date date) {
String sql = "select fb from Foobar fb where createdDate > :date";
...
return query.getResultList();
}
}

我的问题是,我可以将这两个概念合并到一个类中吗?我试着把它变成一个抽象类,像这样:

@Repository
public abstract class FoobarCrudRepo extends CrudRepository<Foobar, Long> {

@PersistenceContext
EntityManager em;

public List<Foobar> findFoobarsByDate(Date date) {
String sql = "select fb from Foobar fb where createdDate > :date";
...
return query.getResultList();
}

}

但是 Spring 没有为它创建 bean。

我怎样才能做到这一点?

谢谢!

最佳答案

您可以通过多种方式实现这一目标。如果你真的需要绝对控制试试这个

interface FoobarRepositoryCustom{
List<Foobar> findFoobarsByDate(Date date);
}

interface FoobarRepository extends CrudRepository<Foobar, Long>, FoobarRepositoryCustom

public class FoobarRespoitoryImpl implements FoobarRepositoryCustom{
@PersistenceContext private EntityManager em;


public List<Foobar> findFoobarsByDate(Date date) {
String sql = "select fb from Foobar fb where createdDate > :date";
...
return query.getResultList();
}
}

还有一种可能是走更简单的路线,可以根据方法名称自动生成查询。在您的示例中,您可以将其添加到您的 FoobarCrudRepo 中,Spring 应该完成剩下的工作,假设 Foobar 具有名为 CreatedDate 的属性

List<Foobar> findByCreatedDateGreaterThan(Date date);

有关 Spring 如何根据方法名称生成查询的引用,请参阅 http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods.query-creation

关于java - Spring Boot 扩展 CrudRepository,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30880927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com