Java JOOQ:查询相似的表
我有一种情况,我有两个几乎相同的表。一个表格用于查看和编辑数据,然后发布数据。当数据发布时,它进入另一个表。基本上是小部件和发布的小部件 我已经为一个表实现了各种自定义搜索、排序、过滤和分页查询,现在我必须为另一个表实现它。我正试图找到一种方法,我可以把它抽象出来并使用TableLike 例如:Java JOOQ:查询相似的表,java,sql,jooq,Java,Sql,Jooq,我有一种情况,我有两个几乎相同的表。一个表格用于查看和编辑数据,然后发布数据。当数据发布时,它进入另一个表。基本上是小部件和发布的小部件 我已经为一个表实现了各种自定义搜索、排序、过滤和分页查询,现在我必须为另一个表实现它。我正试图找到一种方法,我可以把它抽象出来并使用TableLike 例如: create table widget ( id int not null auto_increment, name varchar(64) not null, lang varcha
create table widget (
id int not null auto_increment,
name varchar(64) not null,
lang varchar(2),
updated_by varchar(64),
updated_on timestamp
//...
);
create table published_widget (
id int not null auto_increment,
name varchar(64) not null,
lang varchar(2),
updated_by varchar(64),
updated_on timestamp
//...
);
我希望能够做到以下几点:
public class WidgetDao {
private final TableLike<CommonWidget> table;
public Widget find(String rsql) {
dslContext.selectFrom(table)
.where(table.ID.eq("...").and(table.NAME.eq("...")
// ...
}
公共类WidgetDao{
私人最终桌状桌;
公共小部件查找(字符串rsql){
dslContext.selectFrom(表)
.其中(table.ID.eq(“…”)和(table.NAME.eq(“…”)
// ...
}
这可能吗?表映射
您可以为此使用。选择一个表作为“基本表”(例如,小部件
),然后使用此设置的派生配置
:
Settings=新设置()
.withRenderMapping(新的RenderMapping()
白雪公主(
new MappedSchema().withInput(“MY_SCHEMA”)
.有桌子吗(
新建MappedTable().withInput(“小部件”)
.withOutput(“发布的小部件”);
然后:
公共小部件查找(字符串rsql){
//或者,将此派生配置存储在DAO中以用于缓存
dslContext.configuration()
.导出(设置)
.dsl()
.selectFrom(小部件)
.where(WIDGET.ID.eq(“…”)和(WIDGET.NAME.eq(“…”)
.fetch();
// ...
}
对于配置
Table.rename()
生成的表上有一个rename()
操作,它允许您在特定的基础上而不是全局地执行所需的操作。根据您的使用情况,这可能更合适。同样,这与别名不同(影响生成的SQL)
同样,您将从一个类似/相同的表中选择一个作为基表,并根据需要对其重命名:
公共小部件查找(字符串rsql){
Widget table=Widget.rename(PUBLISHED_Widget.getQualifiedName());
dslContext.selectFrom(表)
.其中(table.ID.eq(“…”)和(table.NAME.eq(“…”)
.fetch();
// ...
}
此方法当前(jOOQ 3.14)仅存在于生成的表中,而不存在于org.jOOQ.Table
,请参阅:谢谢!Table.rename()非常适合我的用例。