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
.