如何将结果与mybatis映射器中的protobuf类进行匹配?protobuf类中没有set方法,我应该使用newBuilder和build方法生成实体类。
答案 0 :(得分:0)
是的,这是可能的。在从proto文件生成模型类时,每个模型类都有一个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
}
答案 1 :(得分:0)
有一个窍门。假设您已经定义了以下protobuf,
const ConversationSchema = new Schema({
type: {type: String, enum: ['private', 'group'], default: 'private'},
creator: {type: Schema.Types.ObjectId, ref: 'User', index: true, required: true}, // creator
// for group,
title: String,
picture: String,
description: String,
users: [
{
user: { type: Schema.Types.ObjectId, index: true, reuqired: true, unique: true },
role: { type: String, enum: ['admin', 'member'], default: 'member' },
mute: { type: Boolean, default: false },
type: {type: String, enum: ['private', 'group'], default: 'private'},
}
],
}, { timestamps: true });
您可以这样设置您的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
。