JOOQ如何概括数据库操作
我正在编写insert、updates方法,并尝试使用泛型参数作为方法参数。下面是我迄今为止在锡兰编写的代码,它编译得很好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).
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();
我同意这看起来是使用站点差异的一个非常合理的案例。