如何通过Record对象指定onDuplicateKeyIgnore实现MySQL插入去重
使用jOOQ Record对象实现插入时忽略重复主键记录
单个Record插入
jOOQ的Record对象本身没有直接提供onDuplicateKeyIgnore()方法,无法通过record.store()直接实现忽略重复主键的逻辑。正确的做法是通过DSLContext的insert()方法包裹Record对象,显式指定忽略策略:
// 创建并填充Record var record = dslContext.newRecord(AUTHOR); record.setId(123); // 使用对应字段的setter,或 record.set(AUTHOR.ID, 123) record.setLastName("Koontz"); // 执行插入并忽略重复主键 dslContext.insert(record) .onDuplicateKeyIgnore() .execute();
批量插入一批记录
如果需要批量处理多条Record,同样通过DSLContext.insert()传入Record列表即可:
// 构建待插入的Record列表 List<AuthorRecord> records = new ArrayList<>(); var record1 = dslContext.newRecord(AUTHOR); record1.setId(123); record1.setLastName("Koontz"); records.add(record1); var record2 = dslContext.newRecord(AUTHOR); record2.setId(456); record2.setLastName("King"); records.add(record2); // 批量插入并忽略重复主键 dslContext.insert(records) .onDuplicateKeyIgnore() .execute();
说明
- 避免使用
record.store():该方法默认行为是UPSERT(主键存在则更新,不存在则插入),无法直接修改为忽略重复主键的逻辑。 - 字段赋值注意:示例中使用了实体类的setter方法(如
setId()),也可以通过record.set(AUTHOR.ID, 123)的方式直接指定字段,更符合jOOQ的DSL风格。
内容的提问来源于stack exchange,提问作者Mahdi
相关产品推荐
相关产品推荐

