S-mall-ssm 关联查询实战:@ManyToOne/@OneToMany 注解如何自动填充一对多、多对一数据?

发布时间:2026/10/20 11:14:41
S-mall-ssm 关联查询实战:@ManyToOne/@OneToMany 注解如何自动填充一对多、多对一数据? S-mall-ssm 关联查询实战ManyToOne/OneToMany 注解如何自动填充一对多、多对一数据【免费下载链接】S-mall-ssm小小商城系统JavaWEB项目基于SSM仿天猫页面功能齐全实现了自动处理关联查询的通用Mapper、抽象 BaseService 类、注解鉴权、参数注解校验等项目地址: https://gitcode.com/gh_mirrors/smal/S-mall-ssm一次查询自动带出所有关联数据刚接触 SSM 商城开发的朋友最头疼的莫过于关联查询查一个商品要拼 SQL 连分类表查一个分类又要手动查询它下面所有商品代码又臭又长还容易漏字段。而S-mall-ssm基于 SSM 框架的仿天猫 JavaWEB 商城项目给出了一套优雅解法用ManyToOne、OneToMany、JoinColumn三个注解 通用 Mapper自动完成一对多、多对一数据的填充。下面我们就来拆解这套轻量 ORM 关联查询机制看看它是如何查询一个对象自动带出全部关联数据的。什么是 S-mall-ssm 的通用 MapperS-mall-ssm 项目实现了一个通用 Mapper它通过静态代理 反射对 MyBatis 生成的 Mapper 做了二次封装让开发者无需再手写复杂的关联 SQL。Mapper.java对外提供selectByPrimaryKey、selectByExample、insert、updateByPrimaryKey等方法内部会调用fillOnReading读取时填充与fillOnWriting写入时填充。MapperFactory.java给 Service 层提供通用 Mapper 实例的工厂类。三个注解一次看懂关联关系关联查询的核心就是 tmall/annotation/ORMAnnotation/ 目录下的一组 ORM 注解注解作用用法ManyToOne处理多对一、一对一加在Object类型字段上OneToMany处理一对多加在ListObject类型字段上JoinColumn指定外键字段名与上面两个注解搭配如JoinColumn(name cid)它们就像给实体类贴上的关系标签通用 Mapper 读取到这些标签后会自动执行填充逻辑不需要你写任何关联 SQL。多对一实战商品自动带出分类以商品和分类为例。在 ProductExtension.java 中category字段加ManyToOneJoinColumn(name cid)表示商品表通过cid外键关联到分类表查询商品时通用 Mapper 会读取cid的值自动查出对应的Category对象并 set 回category字段。对应的底层逻辑在 Mapper4ORM.java 的fillManyToOneOnReading方法里先反射拿到外键值再按主键查 One 端对象递归填充后回写。一对多实战分类自动带出商品列表反过来在 CategoryExtension.java 中products字段加OneToManyJoinColumn(name cid)表示分类的id是商品表的外键查询分类时通用 Mapper 会用当前分类的id查出product表中所有cid相等的商品组装成ListProduct回写。这就是fillOneToManyOnReading方法做的事通过反射拿到List泛型类型找到目标 Mapper再用 example 条件查询批量填充。底层原理反射 递归遍历深度整套机制的核心都在 Mapper4ORM.java 中原理可归纳为三步读取时填充fillOnReading依次调用多对一、一对多、枚举填充逻辑并支持递归遍历深度控制Mapper默认遍历深度为 2防止对象互相引用导致无限递归写入时反向填充fillOnWriting会把 One 端对象的 id 反写回外键字段保证 insert / update 时数据完整。项目还通过 MBG 插件 POJOExtendsPlugin.java让 MyBatis Generator 自动生成的 POJO 继承扩展类并实现POJOMapperM接口从而无缝接入这套机制。写在最后S-mall-ssm 用不到几百行的通用 Mapper就实现了轻量级 ORM 的关联查询能力非常适合学习 SSM 整合、自定义注解、反射与 AOP 思想的同学。如果你想快速上手建议直接阅读 Mapper4ORM.java 和 ProductExtension.java模仿商品与分类的写法为订单、评论等实体添加你自己的关联关系很快就能体会一个注解省掉十行 SQL的快乐。【免费下载链接】S-mall-ssm小小商城系统JavaWEB项目基于SSM仿天猫页面功能齐全实现了自动处理关联查询的通用Mapper、抽象 BaseService 类、注解鉴权、参数注解校验等项目地址: https://gitcode.com/gh_mirrors/smal/S-mall-ssm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询