JOOQ-如何概括数据库操作

时间:2016-11-09 11:08:43

标签: jooq

我正在编写插入,更新方法并尝试使用泛型参数作为方法参数。以下是我迄今为止在锡兰编写的代码,它汇编得很好。

public class TblGuest extends TableImpl<TblGuestRecord> {
    public final TableField<TblGuestRecord, Integer> id ....
    public final TableField<TblGuestRecord, String> guestName...
}

我想将字段和值作为方法调用的一部分传递。我是由JOOQ生成的一个类:

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

很明显,这些字段对于TableField有不同的Generic参数,我想知道是否有办法在HashSet中添加这些参数... TableField<GuestRecord,????>

当然,除了TableField<GuestRecord,Object>之外添加任何.ui-input-text input, .ui-input-search input{ font-size: 24px !important; height: 60px !important; } .ui-icon-search:after{ font-size: 300px !important; width: 200px !important; } 都会导致编译异常。但有没有办法实现这一目标?

2 个答案:

答案 0 :(得分:1)

使用通配符更合适,而不是放置很多Generic Param类型。以下代码按预期工作:

Time    Gr  Ans Correct
1      g1   A   NA
2      g1   B   NA
3      g1   C   NA
1      g2   A   1
2      g2   B   1
3      g2   B   0
1      g3   C   0
2      g3   B   1
3      g3   C   1
1      g4   A   1
2      g4   C   0
3      g4   B   0

调用者可以将HashSet / HashMap的实例作为:

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();
}

答案 1 :(得分:0)

我已经能够通过将Set的Generic params更改为Set<TableField<R&Record, Object>|TableField<R&Record, JString>|TableField<R&Record, JInteger>> fields来实现它。并在调用者中创建具有相同泛型类型的HashSet。这意味着,为了使用JOOQ编写带有泛型参数的插入/更新方法,必须使用在JOOQ表类中创建的唯一字段类型来参数化所有类型参数。但是,它是最好的方式/正确的方式吗?