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已经进行了自动传入。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 三行代码完成国际化适配,妙~啊~
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
2016-12-18 jquery “做页面滚动到某屏时改变状态标题” 所用知识点记录
2016-12-18 jquery 监听所有锚点链接实现平滑移动