当前位置: 首页 > news >正文

Spring Boot 集成 Orika 对象映射框架完整指南

1. 概述

Orika 是一个高效、轻量级的 Java Bean 映射框架,能够自动处理对象之间的属性复制和转换。本文将详细介绍如何在 Spring Boot 项目中集成和使用 Orika。

2. 环境准备

2.1 导入依赖

在项目的 pom.xml 文件中添加 Orika 依赖:

<dependency> <groupId>ma.glasnost.orika</groupId> <artifactId>orika-core</artifactId> <version>1.5.2</version> </dependency>

3. Spring Boot 配置

3.1 创建 MapperFactory 配置类

编写容器注入的类,将 Orika 的 MapperFactory 配置为 Spring Bean:

package com.kingboy.springboot.config; import ma.glasnost.orika.MapperFactory; import ma.glasnost.orika.impl.DefaultMapperFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MapperFacotoryAutoWire { @Bean public MapperFactory getFactory(){ return new DefaultMapperFactory.Builder().build(); } }
import ma.glasnost.orika.MapperFactory; import ma.glasnost.orika.impl.DefaultMapperFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class OrikaConfig { @Bean public MapperFactory mapperFactory() { MapperFactory factory = new DefaultMapperFactory.Builder().build(); // 全局注册映射规则 factory.classMap(Person.class, Student.class) .field("dateTime", "birth") // 映射不同名的字段 .byDefault() // 其他同名字段自动映射 .register(); return factory; } }

4. 使用示例

4.1 单元测试示例

以下是一个完整的单元测试示例,展示如何使用 Orika 进行对象映射:

import ma.glasnost.orika.MapperFactory; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import java.util.ArrayList; import java.util.Date; import java.util.List; import static org.junit.Assert.*; @RunWith(SpringRunner.class) @SpringBootTest(classes = KingBoyApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class MapperFactoryTest { @Autowired private MapperFactory mapperFactory; /** * 测试单个对象映射 */ @Test public void copyBeanToBean() { // 1. 准备数据 Person person = new Person("king", 123, new Date()); // 2. 执行映射 (无需再次注册,配置类已处理) Student student = mapperFactory.getMapperFacade().map(person, Student.class); // 3. 验证结果 assertNotNull(student); assertEquals("king", student.getName()); assertEquals(Integer.valueOf(123), student.getAge()); assertEquals(person.getDateTime(), student.getBirth()); System.out.println("Single Object Mapping: " + student); } /** * 测试列表映射 */ @Test public void copyListToList() { // 1. 准备数据 List<Person> personList = getPersonList(); // 2. 执行列表映射 List<Student> students = mapperFactory.getMapperFacade().mapAsList(personList, Student.class); // 3. 验证结果 assertNotNull(students); assertEquals(personList.size(), students.size()); // 简单校验第一个元素 Student firstStudent = students.get(0); assertEquals("lucy1", firstStudent.getName()); assertEquals(Integer.valueOf(1), firstStudent.getAge()); // 打印结果 students.forEach(System.out::println); } private List<Person> getPersonList() { List<Person> list = new ArrayList<>(5); Date now = new Date(); for (int i = 1; i <= 5; i++) { list.add(new Person("lucy" + i, i, now)); } return list; } }

5. 实体类定义

5.1 Person 类

源对象 Person 类的定义:

package com.kingboy.springboot.domain; import java.time.LocalDateTime; import java.util.Date; public class Person { public Person() { } public Person(String name, Integer age, Date dateTime) { this.name = name; this.age = age; this.dateTime = dateTime; } private String name; private Integer age; private Date dateTime; public String getName() { return name; } public Person setName(String name) { this.name = name; return this; } public Integer getAge() { return age; } public Person setAge(Integer age) { this.age = age; return this; } public Date getDateTime() { return dateTime; } public Person setDateTime(Date dateTime) { this.dateTime = dateTime; return this; } @Override public String toString() { return "Person{" + "name='" + name + ''' + ", age=" + age + ", dateTime=" + dateTime + '}'; } }

5.2 Student 类

目标对象 Student 类的定义:

package com.kingboy.springboot.domain; import java.time.LocalDateTime; import java.util.Date; public class Student { private String name; private String grade; private Integer age; private Date birth; public Date getBirth() { return birth; } public Student setBirth(Date birth) { this.birth = birth; return this; } public String getName() { return name; } public Student setName(String name) { this.name = name; return this; } public String getGrade() { return grade; } public Student setGrade(String grade) { this.grade = grade; return this; } public Integer getAge() { return age; } public Student setAge(Integer age) { this.age = age; return this; } @Override public String toString() { return "Student{" + "name='" + name + ''' + ", grade='" + grade + ''' + ", age=" + age + ", birth=" + birth + '}'; } }

6. 总结

通过以上步骤,我们成功在 Spring Boot 项目中集成了 Orika 对象映射框架。Orika 提供了灵活的字段映射配置,支持单个对象和集合对象的映射,能够大大简化 Java Bean 之间的属性复制工作。

http://www.jsqmd.com/news/1393835/

相关文章:

  • PostgreSQL 日报|PostgreSQL 全版本安全更新(8 月 14 日)
  • [Xmas Contest 2022] Happy Game
  • 从零搭建 AI 智能体陪练系统:基于 FastAPI + DeepSeek-V3 的题库生成 MVP 全记录
  • 桌面整理工具 NoFences 上手指南:把桌面图标装进“隐形收纳盒“
  • 不为效率所困:AI时代的人文设计觉醒
  • Burpsuite下载CA证书及安装教程
  • 一文读懂NVIDIA-Nemotron-3.5-Lightning:从3B活跃参数到1M上下文窗口的终极技术解析
  • 2026年如皋市GEO服务商代理加盟靠谱推荐:国内GEO加盟合作选型指南 - 科技快讯
  • 禹州恒达滨河府专业户型设计公司推荐 - 猜不透的vv
  • 大三下学习笔记(2)java入门(JDK等概念)
  • 电动车托运专线哪个最便宜?2026打工人换城搬家必看攻略 - 快递物流资讯
  • 小于电商开放平台-获取商品列表
  • 从源码到实践:npm-g_nosudo shell脚本核心逻辑全解析
  • 第10章:权限控制与图像报表-02-图形报表(全)
  • AI科技热点日报 | 2026年8月14日
  • 从0到1掌握DOM Distiller:Chrome阅读器模式核心技术完全指南
  • SealSui-Auto-Bot开发者指南:贡献代码与功能扩展教程
  • drawsvg与Jupyter完美结合:打造交互式SVG绘图体验的实用指南
  • 市面上正规的超声C扫描系统供应商检测案例,水浸超声C扫描系统/碳纤维超声C扫描系统,超声C扫描系统制造商哪家** - 企业权威推荐大使
  • klogg日志分析终极指南:如何快速检索10GB级日志文件(安装、搜索与实时监控全攻略)
  • 2026年南通海门区GEO服务商代理加盟怎么选?本地服务商与企业的AI获客指南 - 子柔传媒
  • SDT与代码生成:becoming-a-compiler-engineer项目中的语义分析实战
  • 2026年南通启东GEO服务商代理加盟怎么选?GEO城市合伙人模式推荐 - 企业新闻快传
  • 知漫剧分集剧本时长调整教程:短视频适配与节奏优化
  • PyTorch 分布式工具选型,要比较数值与通信路径
  • corvu:SolidJS终极UI原语库——解锁无障碍设计与高度定制化开发新体验
  • Verbalized Sampling CLI工具使用教程:3步完成创意写作与对话模拟
  • FanControl风扇控制终极指南:从安装到进阶,轻松打造个性化PC散热方案
  • PDF补丁丁实战全攻略:8个免费技巧,解决书签、解锁、合并与页面统一难题
  • GEO 培训选哪家:【沐晞甄选】砺学求真 - 松梢月冷