Java JBDI如何获取受影响的行和生成的id与查询上重复的键更新mysql

9udxz4iz  于 12个月前  发布在  Java
关注(0)|答案(1)|浏览(113)

我试图找出如何在插入时返回受影响的行,并从同一个查询中获取生成的键id;
我有个疑问

@SqlUpdate("""
            INSERT INTO table_name (
                account, 
                state,
                lock,
                external_id
)
            VALUES (
                :account,
                :state,
                :lock,
                :external_id)
            """)
    @GetGeneratedKeys("id")
    Long insert(@BindBean ExampleBean exampleBean);

字符串
所以当我发现一个重复的条目时,我想将它更新为这样的内容

@SqlUpdate("""
            INSERT INTO table_name (
                account, 
                state,
                lock,
                external_id
)
            VALUES (
                :account,
                :state,
                :lock,
                :external_id)
                ON DUPLICATE KEY
                UPDATE
                external_id = :external_id
                lock = :lock
            """)
    @GetGeneratedKeys("id")
    idRows insert(@BindBean ExampleBean exampleBean);  

 public record idRows(Long id, int rowsAffected) {}


被称为做

try (Handle handle = jdbi.open()) {
        return handle.attach(ExampleBean.class).upsert(exampleBean));
        } catch (Exception e) {
            log(example);
            return null;
        }


在我的Hikari数据库上,我设置了"useAffectedRows", true
我可以同时将受影响的行和生成的IDMap到我的记录,任何想法都将受到欢迎!

velaa5lx

velaa5lx1#

@SqlUpdate("""
    INSERT INTO table_name (
        account, 
        state,
        lock,
        external_id
    )
    VALUES (
        :account,
        :state,
        :lock,
        :external_id)
    ON DUPLICATE KEY UPDATE
        external_id = :external_id,
        lock = :lock
""")
@GetGeneratedKeys({"id", "rowsAffected"})
idRows upsert(@BindBean ExampleBean exampleBean);

字符串

您的ID记录应该如下所示:

public record idRows(Long id, int rowsAffected) {}


这样,当您调用upsert方法时,它应该返回一个identifier示例,其中包含生成的ID和受影响的行数。

相关问题