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

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


person Dawn    schedule 11.06.2017    source источник


Ответы (2)


Да, это возможно. Когда вы генерируете классы модели из своего прото-файла, каждый из них имеет 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

}
person Antal Attila    schedule 11.05.2018

Есть уловка. Допустим, вы определили следующий 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.

person wizawu    schedule 21.09.2019