当前位置: 首页 > 面试题库 >

如何在没有域类的querydsl中构造查询

殳经略
2023-03-14
问题内容

在寻找Java库以数据库不可知的方式构建查询时,我遇到了许多信息,包括iciql,querydsl,jooq,joist,hibernate等。

我想要一些不需要配置文件并且可以使用动态架构的东西。对于我的应用程序,我在运行时了解数据库和架构,因此我没有架构的任何配置文件或域类。

这似乎是querydsl的核心目标之一,但仔细阅读querydsl的文档,我看到了很多使用域类构建动态查询的示例,但是我没有遇到任何解释如何仅使用有关架构的动态信息。

Jooq提供了这样的功能(请参阅:http :
//www.jooq.org/doc/3.2/manual/getting-started/use-cases/jooq-as-a-standalone-
sql-builder/
),但如果有,则具有限制性许可我想将重点扩展到Oracle或MS
SQL(我可能不喜欢但需要支持)。

有querydsl经验的人可以让我知道用querydsl这样的事情是否可能,如果可以的话,如何做。

如果有人也知道任何其他满足我要求的东西,将不胜感激。


问题答案:

一个非常简单的SQL查询,例如:

@Transactional
public User findById(Long id) {
    return new SQLQuery(getConnection(), getConfiguration())
      .from(user)
      .where(user.id.eq(id))
      .singleResult(user);
}

…可以像这样动态创建(不添加任何糖):

@Transactional
public User findById(Long id) {
    Path<Object> userPath = new PathImpl<Object>(Object.class, "user");
    NumberPath<Long> idPath = Expressions.numberPath(Long.class, userPath, "id");
    StringPath usernamePath = Expressions.stringPath(userPath, "username");
    Tuple tuple = new SQLQuery(getConnection(), getConfiguration())
      .from(userPath)
      .where(idPath.eq(id))
      .singleResult(idPath, usernamePath);
    return new User(tuple.get(idPath), tuple.get(usernamePath));
}


 类似资料:
  • 我有一个Employee实体类,它有许多列。我想从这个类中获取一些列,因此我使用了DTO。我创建了一个新的BaseEmployee类,并在EmployeeRepository中编写了查询。但当我尝试运行应用程序时,我会遇到这样的错误:“类中没有合适的构造函数错误”。 我的dto类: Jpa仓库: 错误:

  • 问题内容: Oracle Java教程站点的这一段使我感到困惑: 所有类都有至少一个构造函数。如果一个类未显式声明任何类,则Java编译器会自动提供一个无参数的构造函数,称为默认构造函数。此默认构造函数调用类父级的无参数构造函数,如果该类没有其他父级,则调用Object构造函数。如果父级没有构造函数(对象确实有一个构造函数),则编译器将拒绝该程序。 如果所有对象都直接或间接继承自Object,那么

  • 问题内容: 我试图将数据插入到具有表列 (名称,值) 与 并得到以下异常: 另外,我也不能使用本机查询插入记录: 抛出另一个异常: 问题是: 查询字符串有什么问题? 非常感谢。 问题答案: 我解决了这个问题。 根据此, JPA中没有INSERT语句。 但是我可以用本机查询解决这个问题:我错误地放置了一个多余的;在查询末尾,因此可以通过将其删除来解决问题。

  • 我可能是错的,但是在rethinkdb驱动程序中,lambda不知怎么地被编译成ast语法,这些语法被转换成js并发送到数据库。我相信我需要以某种方式显式地创建一个lambda。http://www.retinkdb.com/blog/lambda-functions/那么这个问题是如何在Clojure中将lambda实现为一个名为“lambda”的函数的呢?只显示如何使用函数,而不是lambda

  • CodeIgniter 提供了查询构造器类,查询构造器允许你使用较少的代码来在数据库中 获取、新增或更新数据。有时只需要一两行代码就能完成数据库操作。CodeIgniter 并不需要为每个数据表提供一个类,而是使用了一种更简单的接口。 除了简单,使用查询构造器的另一个好处是可以让你创建数据库独立的应用程序, 这是因为查询语句是由每个独立的数据库适配器生成的。另外,由于系统会自动对数据 进行转义,所