mybatis, отображающий класс, который генерирует protobuf

Как я могу отобразить результат на класс protobuf в mybatis mapper? В классе protobuf нет метода set, я должен сгенерировать класс сущности, используя newBuilder и метод build.

1 ответ

Да, это возможно. В Когда вы генерируете классы модели из вашего файла прото, у каждого из них есть Builder (который расширяет GeneratedMessageV3.Builder). Таким образом, в определении модели вы можете добавить это, как в следующем примере:

@ResultType(MyProto.Builder.class)

Это хорошо работает, когда вы используете ResultHandler, поэтому вы можете вызвать метод сборки, например:

@Override
public void handleResult(ResultContext<? extends GeneratedMessageV3.Builder> resultContext) {
    GeneratedMessageV3 proto = resultContext.getResultObject().build(); 
    MyProto myproto = (MyProto)proto;

    // do something with myproto

}

Есть уловка. Допустим, вы определили следующий protobuf,

package com.example.protobuf;

message HelloMessage {
  string id;
  uint32 code;
}

Вы можете получить свой HelloMapper как это,

<resultMap id="helloMessageMap" type="com.example.protobuf.HelloMessage">
  <result column="id" property="id_"/>
  <result column="code" property="code_"/>
</resultMap>

<select id="selectHelloMessage" resultMap="helloMessageMap">
  select id, code from example
</select>

Обратите внимание, что id_ а также code_ используются вместо id а также code.

Другие вопросы по тегам