mybatis映射protobuf生成的类

时间:2017-06-11 12:35:42

标签: protocol-buffers mybatis

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

2 个答案:

答案 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