【问题标题】:How to solve "Mapper method has an unsupported return type"如何解决“Mapper 方法的返回类型不受支持”
【发布时间】:2021-05-20 04:58:19
【问题描述】:

我收到以下错误:

映射器方法“nutri.api.infrastructure.datasource.client.ClientMapper.saveClient”的返回类型不受支持:类 nutri.api.domain.model.Client

我在我的项目中使用 Java 15、PostgreSQL 和 MyBatis。

我只知道我的 Client.java 和 ClinetMapper.java 有问题,但不确定是什么导致了这个错误。任何建议都会有很大帮助。

这是我的代码

客户端.java

import java.util.UUID;

public class Client {

    int id;
    String clientNumber;
    String name;
    String email;
    String healthCondition;


    public Client(int id, String clientNumber, String name, String email, String healthCondition) {
        this.id = id;
        this.clientNumber = UUID.randomUUID().toString();
        this.name = name;
        this.email = email;
        this.healthCondition = healthCondition;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getClientNumber() {
        return clientNumber;
    }

    public void setClientNumber(String clientNumber) {
        this.clientNumber = clientNumber;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getHealthCondition() {
        return healthCondition;
    }

    public void setHealthCondition(String healthCondition) {
        this.healthCondition = healthCondition;
    }

}

ClientMapper.java

@Options(useGeneratedKeys=true, keyProperty="id") Client saveClient(Client client);

ClientMapper.xml(MyBatis 文件)

<mapper namespace="nutri.api.infrastructure.datasource.client.ClientMapper">

<insert id="saveClient" parameterType="nutri.api.domain.model.Client">
        INSERT INTO client.data (
            id,
            client_number,
            name,
            email,
            health_condition
        ) VALUES (
            nextval('client.client_id_seq'),
            #{clientNumber},
            #{name},
            #{email},
            #{healthCondition}
        )
    </insert>

【问题讨论】:

  • 我真的需要帮助解决这个问题。任何建议都会有所帮助!

标签: java postgresql mybatis


【解决方案1】:

对于插入语句,方法返回类型必须为voidint
如果您使用int,则将返回插入的行数(在您的情况下始终为1)。
生成的密钥将设置为参数实例的id 字段。
另外,您应该指定keyColumn

@Options(useGeneratedKeys=true, keyProperty="id", keyColumn="id")
int saveClient(Client client);
Client param = ... // prepare parameter
int count = clientMapper.saveClient(param);
// param.getId() will return the generated key

【讨论】:

    猜你喜欢
    • 2023-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多