2

如何将结果映射到 mybatis 映射器中的 protobuf 类?protobuf 类中没有 set 方法。我应该使用 newBuilder 和 build 方法生成实体类吗?

4

2 回答 2

0

有个窍门。假设您定义了以下 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_andcode_被用来代替idand code

于 2019-09-21T08:26:50.367 回答
0

是的,这是可能的。在您从 proto 文件生成模型类时,它们中的每一个都有一个 Builder(扩展 GeneratedMessageV3.Builder)。因此,在您的模型定义中,您可以添加它,如下例所示:

@ResultType(MyProto.Builder.class)

当您使用 ResultHandler 时,这可以正常工作,因此您可以调用 build 方法,例如:

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

    // do something with myproto

}
于 2018-05-11T13:07:07.113 回答