JOOQ如何概括数据库操作

JOOQ如何概括数据库操作,jooq,Jooq,我正在编写insert、updates方法,并尝试使用泛型参数作为方法参数。下面是我迄今为止在锡兰编写的代码,它编译得很好 shared void insert<R>(DSLContext ctx, Table<R&Record> table, Set<TableField<R&Record, Object>> fields, Set<Object> values){ ctx.insertInto(table).

我正在编写insert、updates方法,并尝试使用泛型参数作为方法参数。下面是我迄今为止在锡兰编写的代码,它编译得很好

shared void insert<R>(DSLContext ctx, Table<R&Record> table, Set<TableField<R&Record, Object>> fields, Set<Object> values){
    ctx.insertInto(table).columns(fields).values(values).execute();
}
shared void insert(DSLContext ctx、表格、设置字段、设置值){
insertInto(表).columns(字段).values(值).execute();
}
我希望将字段和值作为方法调用的一部分进行传递。我有一个由JOOQ生成的类:

public class TblGuest extends TableImpl<TblGuestRecord> {
    public final TableField<TblGuestRecord, Integer> id ....
    public final TableField<TblGuestRecord, String> guestName...
}
public类TblGuest扩展了TableImpl{
公共最终表字段id。。。。
公共最终TableField guestName。。。
}
很明显,这些字段对TableField有不同的通用参数,我想知道是否有办法在HashSet中添加这些参数<代码>设置字段=HashSet()


当然,在
TableField
之外添加任何
TableField
都会导致编译异常。但有没有办法做到这一点

我已经能够通过将Set的通用参数更改为
Set字段来实现它。以及在调用者中创建具有相同泛型类型的哈希集。这意味着,为了使用JOOQ编写具有泛型参数的insert/update方法,必须使用在JOOQ表类中创建的唯一字段类型参数化所有类型参数。但是,这是最好的方法/正确的方法吗?

使用通配符比使用大量泛型参数类型更合适。以下代码按预期工作:

shared void insert<R>(DSLContext ctx, Table<R&Record> table, Set<TableField<R&Record, out Object>> fields, Set<Object> values){
            ctx.insertInto(table).columns(fields).values(values).execute();       
}


shared void update<R>(DSLContext ctx, Table<R&Record> table, JMap<TableField<R&Record, out Object>, Object> map){
    ctx.update(table).set(map).execute();
}
shared void insert(DSLContext ctx、表格、设置字段、设置值){
insertInto(表).columns(字段).values(值).execute();
}
共享无效更新(DSLContext ctx、表格、JMap映射){
update(table).set(map.execute();
}
调用者可以有一个HashSet/HashMap实例,如下所示:

JMap<TableField<GuestRecord, out Object>, Object> map = JHashMap<TableField<GuestRecord, out Object>, Object>();

Set<TableField<GuestRecord,out Object>> fields = HashSet<TableField<GuestRecord, out Object>>();
JMap=JHashMap();
Set fields=HashSet();

我同意这看起来是使用站点差异的一个非常合理的案例。