​Java中比较实用实体转换工具介绍

文中源码地址

大家一般编码过程中,经常会遇到DO对象转化为DTO对象,对象和对象之间转换一般需要用到转换工具,毕竟使用getter/setter太过麻烦

DO:Domain Object领域对象,一般从现实世界或业务逻辑中抽离出的业务实体,对内使用
DTO:Data Transfer Object数据传输对象,用于展示层与服务层之间的数据传输对象,对外使用

MapStruct介绍

官方介绍:

MapStruct is a Java annotation processor for the generation of type-safe bean mapping classes.

大意为MapStruct是一个以注解的方式,生成类型安全的一个实体映射类。

其中关键字是:注解和类型安全,注解好理解,怎么理解类型安全呢?

可以这么理解:类型转化中必须指定具体的类型(不能使用泛性,因为MapStruct是在编译期生成实现,类似lombok),Java编译器会针对任何表达式推断出一个明显类型(Apparent Type),Java编译器可以基于明显类型进行类型检查

cglib介绍

是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Java接口。Hibernate支持它来实现PO(Persistent Object 持久化对象)字节码的动态生成。在实现内部,CGLIB库使用了ASM这一个轻量但高性能的字节码操作框架来转化字节码,产生新类。

相关资料

Spring BeanUtils介绍

Spring BeanUtils提供对Java反射和自省API的包装。其主要目的是利用反射机制对

JavaBean的属性进行处理

性能对比

可以看到,上面当复制对象大于10000时,各个性能表现MapStruct > cglib > BeanUtils,而且MapStruct表现情况最为稳定;本文中只测试了转换java bean的个数,严谨上存在欠缺。

从上面介绍中可以知道,cglib和Spring BeanUtils是在运行时进行转换,而MapStruct是在编译时进行转换。

编译时和运行时

编译时

就是编译器将源代码翻译成机器能识别的代码,比如Java只有JVM识别的字节码,C#中只有CLR能识别的MSIL。

编译器就像老师一样,会帮学生进行词法分析,语法分析,有没有错别字和病句,如果有错误就会显示的指明error或warnning。这个就是Java中编译时检查或者静态检查

运行时

将代码装载到内存中,先运行起来,然后再去类型检查或者错误(比如1/0)

java 实体属性个数_?Java中比较实用实体转换工具介绍相关推荐

  1. 初学者也能看懂的 Vue2 源码中那些实用的基础工具函数

    1. 前言 大家好,我是若川.最近组织了源码共读活动,感兴趣的可以加我微信 ruochuan12 想学源码,极力推荐之前我写的<学习源码整体架构系列>jQuery.underscore.l ...

  2. MySQL数据库中导入导出方法以及工具介绍

    MySQL数据库中导入导出方法以及工具介绍 1.MySQLimport的语法介绍: mysqlimport位于mysql/bin目录中,是mysql的一个载入(或者说导入)数据的一个非常有效的工具.这 ...

  3. 用React实现一个HTML中上标、下标转换工具

    用React实现一个HTML中上标.下标转换工具 前言 HTML中的sub.sup标签 在React中的使用 前言 最近的项目中有个需求,需要能够在html中实现化学元素的表示,比如上标:SO2.O3 ...

  4. java 注解 属性 类型_收藏!你一定要知道的Java8中的注解

    全文共3002字,预计学习时长6分钟 海中有大量的注解! JavaSE 1.5中首次引入了注解.Java注解的目的是允许程序员编写关于其程序的元数据.在OracleDocs中,注解的定义是:" ...

  5. java识别汉字个数_统计字符串中汉字的个数

    字符串可以包括数字.字母.汉字或者其他字符.使用Charater类的isDigit()方法可以判断字符串中的某个字符是否为数字, 使用Character类的isLetter()方法可以判断字符串中的某 ...

  6. Java 计算字母个数_统计字符串中每个字母的个数

    最近整理之前自己学习Java时的一些代码笔记,可能都是一些比较基础的Java知识,在这里只是给需要的人参考一下. 统计一个字符串中的每个字母的个数 现有字符串:dludsstytrwtrjahtksd ...

  7. java 注解 属性 类型_跟光磊学Java开发-Java注解

    注解概述 注解(Annotation)相当于一种标记,在程序中加入注解就等于为程序打上某种标记以后,java编译器.开发工具或者其他的框架就可以通过反射来获取类以及类的成员上的注解,然后通过作相应的处 ...

  8. java 基础面试 英文_[Java面试] 面试java基础总结大全

    原标题:[Java面试] 面试java基础总结大全 基础知识: 1.JVM.JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. ...

  9. java实现计算器框架_[Java小程序] 实现简单计算器

    这学期没事学了一点点Java,想写个程序练手,因为只学了一点点,所以暂时只能先写个实现简单功能的计算器练练.感觉写完后不是很好,如果路过的哪位高手给点建议,小弟万分感激啊. 由于期末来了,没太多时间, ...

最新文章

  1. 来字节才发现,31岁程序员已经是大团队里最老的了!才发现自己从未真的努力,虽然每天加班到十二点,但只怀着赶紧干完的抱怨!...
  2. R语言构建仿真列联表并进行卡方检验(chisq.test):检验两个分类变量是否独立、输出期望的列联表
  3. android高德地图显示多点标记,高德地图多点标记自定义地图
  4. mysql实验总结存在问题_mysql表分区实验总结
  5. C#与C++之间dll的二维(多维)数组传递
  6. Backpropagation Through Time:What it Does and How to Do it论文解读
  7. 数据结构实验之二叉树四:还原二叉树
  8. 快手基于 Apache Flink 的优化实践
  9. azure db 设置时区_使用Azure Cosmos DB开始您的旅程
  10. 网络信息安全实验 — 网络攻击技术实验(Kali系统,John、lc7、arpspoof、ettercap、SQL注入...)
  11. img 显示默认图片,及动态赋值
  12. 护士如何预防职业病:下肢静脉曲张-健康小常识
  13. 堆内存和栈内存的区别
  14. Cookie 的 SameSite 属性
  15. 计算机网络 之 局域网
  16. 在检查计算机更新时发现错误,修复在 Acrobat Reader 更新期间出现的 Windows 错误...
  17. 信度和效度经典例子_(完整版)心理学中的各种信度和效度
  18. 通达信上涨回调选股公式,选出二次走强的标的
  19. 如何查看存储过程内容
  20. 高中科幻作文关于计算机,高中科幻作文(精选5篇)

热门文章

  1. NET Core微服务之路:自己动手实现Rpc服务框架,基于DotEasy.Rpc服务框架的介绍和集成...
  2. C++井字棋游戏,DOS界面版
  3. iOS逆向之iOSOpenDev
  4. cordova 强制竖屏
  5. 写底部样式一定要加的属性
  6. Centos 76分布式lamp平台
  7. 【css】怎么让Chrome支持小于12px 的文字
  8. dedecms上传图片不自动改名,以利于seo图片优化
  9. 为DEDE织梦添加XMl网站地图
  10. C# 线程手册 第三章 使用线程