gpt4 book ai didi

java - 如何在另一个映射器中重用MyBatis的映射器?

转载 作者:行者123 更新时间:2023-12-01 19:50:01 24 4
gpt4 key购买 nike

我有表eventmessage,它们具有一对一的关系并由类表示:

public class Event {
private Long id;
private Message message;
}

public class Message {
private Long id;
}

并且有两个映射器:EventMapperMessageMapper:

public interface EventMapper {

@Select("SELECT * FROM event WHERE date BETWEEN #{from} AND #{to}")
@Results({
@Result(property = "id", column = "id"),
@Result(property = "message", column = "message_id",
javaType = Message.class, one = @One(select = "getMessage"))
})
List<Event> selectInInterval(@Param("from") Date from, @Param("to") Date to);

@Select("SELECT * FROM message WHERE id = #{id}")
Message getMessage(@Param("id") Long id);
}


public interface MessageMapper {

@Select("SELECT * FROM message WHERE id = #{id}")
@Results({
@Result(property = "id", column = "id"),
@Result(property = "text", column = "text")
})
List<Event> selectById(@Param("id") Long id);
}

EventMapper 选择事件并通过注释映射它们,使用 getMessage 选择和映射事件的消息。但是我在 MessageMapper 中已经有相同的方法 selectById,那么可以重用它吗?

最佳答案

为了使用其他映射器的任何定义(包括语句或 ResultMap),您应该将映射器的命名空间(完全限定名称)包含到该实体的标识符中。

在您的示例中,假设 MessageMapper 位于 com.company.app.mappers 包中,则为:

public interface EventMapper {

@Select("SELECT * FROM event WHERE date BETWEEN #{from} AND #{to}")
@Results({
@Result(property = "id", column = "id"),
@Result(property = "message", column = "message_id",
javaType = Message.class,
one = @One(select = "com.company.app.mappers.MessageMapper.getMessage"))
})
List<Event> selectInInterval(@Param("from") Date from, @Param("to") Date to);
}

关于java - 如何在另一个映射器中重用MyBatis的映射器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51693138/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com