Как обновить и увеличить счетчик в postgresql и mybatis - PullRequest
0 голосов
/ 29 мая 2020

Я использую spring-mybatis, и я делаю это update.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.test.Article">

    <update resultType="java.lang.Long"  id="updateClickCount" flushCache="true">
        UPDATE "article"
        SET "click_count" = "click_count" + 1
        WHERE "id" = #{id,jdbcType=NUMERIC}
        RETURNING "click_count";
    </update>

</mapper>

Я ожидаю, что смогу прочитать count в том же запросе, что и тот, который increment count.

Вместо этого он дает мне эту ошибку:

Caused by: org.apache.ibatis.builder.BuilderException: Error creating document instance.  Cause: org.xml.sax.SAXParseException; lineNumber: 6; columnNumber: 81; Attribute "resultType" must be declared for element type "update".

Как я могу прочитать значение счетчика обновлений в postgr sql и mybatis?

1 Ответ

0 голосов
/ 30 мая 2020

Я считаю, что оператор UPDATE ... RETURNING возвращает значения в ResultSet. MyBatis декодирует ResultSets только в операторах <select>. Таким образом, вам нужно будет написать свое заявление как <select>. Это будет выглядеть странно, но сработает отлично. Различные теги XML не проверяют, действительно ли включенный SQL соответствует тегу.

Еще одна вещь, о которой вам нужно подумать, это то, что операторы <select> не фиксируются автоматически MyBatis - поэтому вам может потребоваться выполнить фиксацию вручную после выполнения инструкции, в зависимости от того, как вы настроили свой диспетчер транзакций.

...