微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SpringBoot mybatis多对一查询、多对多查询

查询用户列表,并查询每个用户下面最新的一个订单,和每个用户下面的所有订单。

package com.yutangzongcai.demo.mapper;

import com.yutangzongcai.demo.entity.DingdanEntity;
import com.yutangzongcai.demo.entity.UsersEntity;
import org.apache.ibatis.annotations.*;

import java.util.List;

public interface UsersMapper {

    /**
     * 查询用户列表
     * 同时多对一 【查询用户最新1个订单】
     * 同时多对多 【查询用户所有订单】
     * @return
     */
    @Select("select id,name,age from users order by id asc")
    @Results(id = "empMap", value = {
            @Result(column = "id", property = "id", id = true),
            @Result(column = "name2", property = "name"),
            @Result(column = "id", property = "dingdanOne", one = @One(select = "com.yutangzongcai.demo.mapper.UsersMapper.dingdanOne")),
            @Result(column = "id", property = "dingdanMany", many = @Many(select = "com.yutangzongcai.demo.mapper.UsersMapper.dingdanMany"))
    })
    List<UsersEntity> all();

    /**
     * 查询用户最新1个订单
     * @param userId
     * @return
     */
    @Select("select * from dingdan where userId=#{userId} order by id desc limit 0,1")
    DingdanEntity dingdanOne(@Param("userId") Integer userId);

    /**
     * 查询用户所有订单(按最新排序)
     * @param userId
     * @return
     */
    @Select("select * from dingdan where userId=#{userId} order by id desc")
    List<DingdanEntity> dingdanMany(@Param("userId") Integer userId);

}

在使用@Result注解进行one对一关联或many对多关联时,必须设置主键,只有设置了主键,才能通过主键传入参数,进行子查询

关联查询时,被关联的方法入参userId,是由@Result设置中的主键所决定的,这里mybatis已经进行了自动传入。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐