为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕盖茨4494581 2021-06-22 17:00:35
我有表event和message,它们具有一对一的关系并由类表示:public class Event {    private Long id;    private Message message;}public class Message {    private Long id;}并且有两个映射器:EventMapper和MessageMapper: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用于选择和映射事件的消息。但是我已经有相同的方法selectById在MessageMapper,所以是有可能重新使用它?
查看完整描述

1 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

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


在您的示例中,假设它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);

}


查看完整回答
反对 回复 2021-06-30
  • 1 回答
  • 0 关注
  • 145 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号