3.2Adding custom methods to mappers(在映射器中添加自定义方法)

有些情况下,我们需要实现一些MapStruct无法直接自动生成的复杂类型间映射。一种方式是复用其他已实现的映射。或者,在使用java8或者更高版本的时候,可以直接在映射器接口中实现自定义方法作为默认方法,如果参数和返回类型匹配, 生成的代码将调用默认方法。

举个例子,加入我们要把Person映射成PersonDto,因为涉及到一些特殊的逻辑,MapStruct无法直接将映射代码生成,您可以从前面的示例中定义映射器, 如下所示:

Example 8. Mapper which defines a custom mapping with a default method

@Mapper
public interface CarMapper { @Mappings({...})
CarDto carToCarDto(Car car); default PersonDto personToPersonDto(Person person) {
//hand-written mapping logic
}
}

由 MapStruct 生成的实现方法 carToCarDto (),在映射【司机】属性时, carToCarDto () 中生成的代码将调用手动实现的 personToPersonDto () 方法。

映射程序还可以以抽象类的形式而不是接口来定义, 并直接在该映射器类中实现自定义方法。在这种情况下, MapStruct 将生成具有所有抽象方法实现的抽象类的扩展。此方法在声明默认方法方面的优点是可以在映射器类中声明其他字段。

前面的示例中, 从Person到 PersonDto 的映射需要一些特殊的逻辑, 同样可以这样定义:

Example 9. Mapper defined by an abstract class

@Mapper
public abstract class CarMapper { @Mappings(...)
public abstract CarDto carToCarDto(Car car); public PersonDto personToPersonDto(Person person) {
//hand-written mapping logic
}
}

MapStruct 将生成 CarMapper 的子类, 并在声明为抽象的情况下实现 carToCarDto () 方法。在映射【司机】属性时, carToCarDto () 中生成的代码将调用手动实现的 personToPersonDto () 方法。

3.2Adding custom methods to mappers(在映射器中添加自定义方法)的更多相关文章

  1. 在mapper.xml映射文件中添加中文注释报错

    问题描述: 在写mapper.xml文件时,想给操作数据库语句添加一些中文注释,添加后运行报如下错误: 思考 可能是写了中文注释,编译器在解析xml文件时,未能成功转码,从而导致乱码.但是文件开头也采 ...

  2. mybatis 映射器(mappers) 配置说明 加载映射文件方式

    映射器(mappers) 既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要定义 SQL 映射语句了.但是首先我们需要告诉 MyBatis 到哪里去找到这些语句. Java 在自动查找这 ...

  3. 深入浅出mybatis之映射器

    目录 概述 XML映射器 定义xml映射器 配置xml映射器 使用xml映射器 接口映射器 定义接口映射器 配置接口映射器 使用接口映射器 总结与对比 概述 映射器是MyBatis中最核心的组件之一, ...

  4. MyBatis 3 使用注解配置SQL映射器

    l 在映射器Mapper接口上使用注解 l 映射语句 @Insert,@Update,@Delete,@SeelctStatements l 结果映射 一对一映射 一对多映射 l 动态SQL @Sel ...

  5. 使用注解配置SQL映射器

    在上一章,我们看到了我们是怎样在映射器Mapper XML配置文件中配置映射语句的.MyBatis也支持使用注解来配置映射语句.当我们使用基于注解的映射器接口时,我们不再需要在XML配置文件中配置了. ...

  6. MyBatis 3(中文版) 第四章 使用注解配置SQL映射器

    本章将涵盖以下话题: l 在映射器Mapper接口上使用注解 l 映射语句 @Insert,@Update,@Delete,@SeelctStatements l 结果映射 一对一映射 一对多映射 l ...

  7. MyBatis02 MyBatis基础知识之Mapper映射器

    1 Mapper映射器是什么 是符合映射文件要求的接口 接口要求 a. 方法名要与sql的id一致. b. 方法的参数类型要与parameterType一致. c. 方法的返回类型要与resultTy ...

  8. SQL映射器Mapper接口(MyBatis)

    SQL映射器Mapper接口 MyBatis基于代理机制,可以让我们无需再写Dao的实现.直接把以前的dao接口定义成符合规则的Mapper. 注意事项: 1.接口必须以Mapper结尾,名字是Dom ...

  9. 【长文】Spring学习笔记(七):Mybatis映射器+动态SQL

    1 概述 本文主要讲述了如何使用MyBatis中的映射器以及动态SQL的配置. 2 MyBatis配置文件概览 MyBatis配置文件主要属性如下: <settings>:相关设置,键值对 ...

随机推荐

  1. Vue 前后台交互,插件

    目录 Vuex 插件 前端存储数据汇总 前后台交互方式(重点) axios 插件 同源策略-跨域问题 前后台分离项目交互流程 异步请求细节 Element-ui 插件 jQ + Bs插件 Django ...

  2. Django:验证码相关问题

    http://blog.csdn.net/csapr1987/article/details/7728315 https://zhidao.baidu.com/question/13837387222 ...

  3. 移动硬盘在MAC找不着了

    原因: 移动硬盘,还没有推出的时候,我就直接拔了,导致文件被损坏了. 在MAC系统下,试了很多命令,一不小心加载上了. 但是只读模式,此时我想应该是有损坏了,系统也提示要重新格式化,这个代价太大了,里 ...

  4. 防火墙、WAF、IPS、IDS都是什么

    防火墙 (Firewall) 别名防护墙,于1993发明并引入国际互联网. 他是一项信息安全的防护系统,依照特定的规则,允许或是限制传输的数据通过.在网络中,所谓的防火墙是指一种将内网和外网分开的方法 ...

  5. 小程序父子组件onLoad和Created之间的问题

    今天开发日历插件时,遇到了以下问题: 因为需要在父组件的onLoad里加载接口从而得到每一天的房间数据,然后将数据存进小程序缓存. 接着在子组件里 获取小程序缓存来得到父组件传来的房间数据,在子组件里 ...

  6. python2.x 脚本 中文乱码 解决方法

    在python脚本起始位置添加如下代码 # -*- coding: UTF-8 -*

  7. PHP7 源码整体框架

    一.PHP7语言执行原理 常用的高级语言有很多种,根据运行的方式不同,大体分为两种:编译型语言和解释型语言. 编译是指在应用源程序执行之前,就将程序源代码“翻译”成汇编语言,然后进一步根据软硬件环境编 ...

  8. LVS负载均衡基本原理

    负载均衡基本原理与lvs 基本介绍 1.1 负载均衡的由来 在业务初期,我们一般会先使用单台服务器对外提供服务.随着业务流量越来越大,单台服务器无论如何优化,无论采用多好的硬件,总会有性能天花板,当单 ...

  9. Linux ---- 查看当前TCP连接数

    一.查看哪些IP连接本机 netstat -an 二.查看TCP连接数 1)统计80端口连接数netstat -nat|grep -i "80"|wc -l 2)统计httpd协议 ...

  10. P1062 最简分数

    P1062 最简分数 转跳点: