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

📅 2026/8/21 18:19:34
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),仅供参考