Mybatis如何实现多表查询(一对一,一对多)

一、标签

        在sqlmapper配置文件中使用多表联查:

        一对一:在resultMap标签中使用association标签,语法:

<resultMap type = "需要映射的实体类名" id = "别名">
    <result column = "表中的字段名" property = "实体类中的属性名" />
    <association property = "表联查时在实体类对应的属性名">
        <result column = "联查的表中的字段名" property = "联查的实体类中的属性名">
    </association>
</resultMap>
<select id = "接口类中的方法名" resultMap = "resultMap中起的别名(即id的值)">
    对应的sql语句
</select>

<!-- 表联查时,要将两个表所有的字段都要分别做映射关系处理,无论是否与属性名相同 -->

        一对多:在resultMap标签中使用collection标签,语法:

<resultMap type = "需要映射的实体类名" id = "别名">
    <result column = "表中的字段名" property = "实体类中的属性名" />
    <collection property = "表联查时实体类中对应的属性名" ofType = "表联查对应的实体类名">
        <result column = "表联查中的字段名" property = "表联查对应实体类中的属性名" />
    </collection>
<select id = "接口类中的方法名" resultMap = "resultMap中起的别名(即id的值)">
    对应的sql语句
</select>

<!-- 表联查时,要将两个表所有的字段都要分别做映射关系处理,无论是否与属性名相同 -->

二、注解

        在@Results注解里使用@Result注解

        一对一:在@Result注解中使用@One注解

//  若想在联查时显示传走的字段名对应的值,需要写对应映射
@Result({
    @Result(column = "字段名",property = "属性名"),
    @Result(column = "表联查需要的传输的字段名",property = "表联查时当前实体类对应的属性名",
        one = @One(select = "在表联查对应的接口类中对应方法的完整路径,不用写(参数)"))
})
@select("全查的sql语句")

// 写注解的时候不需要映射的字段可以不写映射,在表联查的时候尽量写全查

        一对多:在@Result注解中使用@Many注解

// 若想在联查时显示传走的字段名对应的值,需要写对应映射
@Result({
    @Result(column = "字段名",property = "属性名"),
    @Result(column = "表联查需要的传输的字段名",property = "表联查时当前实体类对应的属性名",
        many= @Many(select = "在表联查对应的接口类中对应方法的完整路径,不用写(参数)"))
})
@select("全查的sql语句")

//    写注解的时候不需要映射的字段可以不写映射,在表联查的时候尽量写全查 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值