BeanUtils

Mybatis ResultMap多表映射DTO

旧城冷巷雨未停 提交于 2020-10-24 12:26:37
步骤: 1:构建DT package com.steak.system.pojo.dto; public class ApplyDTO { private Integer applyId; //申请书的ID 属于申请表(sys_apply) private String selfIntroduction; //自我介绍 属于申请表(sys_apply) private String applyTime; //申请时间 属于申请表(sys_apply) private String userName; //申请人,属于用户表(sys_user) private String collegeName; //二级学院名称,属于二级学院表(sys_college) private String recruitName; //招聘书标题 , 属于招聘表(sys_recruit) private String status; //申请状态 属于申请表(sys_apply } 2:创建mybatis Mapper.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3

java 深克隆(深拷贝)与浅克隆(拷贝)详解

空扰寡人 提交于 2020-10-16 08:26:50
java深克隆和浅克隆 基本概念 浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所拷贝的对象,而不复制它所引用的对象。 深复制(深克隆) 被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深复制把要复制的对象所引用的对象都复制了一遍。 实现java深复制和浅复制的最关键的就是 要实现Object中的clone()方法 。 如何使用clone()方法 首先我们来看一下Cloneable接口: 官方解释: 1:实现此接口则可以使用java.lang.Object 的clone()方法,否则会抛出CloneNotSupportedException 异常 2:实现此接口的类应该使用公共方法覆盖clone方法 3:此接口并不包含clone 方法,所以实现此接口并不能克隆对象,这只是一个前提,还需覆盖上面所讲的clone方法。 public interface Cloneable { } 看看Object里面的Clone()方法: clone()方法返回的是Object类型,所以必须强制转换得到克隆后的类型 clone()方法是一个native方法,而native的效率远远高于非native方法,

BeanUtils 是用 Spring 的还是 Apache 的好?

江枫思渺然 提交于 2020-09-29 05:12:52
来源 | urlify.cn/vUfIry 前言 在我们实际项目开发过程中,我们经常需要将不同的两个对象实例进行属性复制,从而基于源对象的属性信息进行后续操作,而不改变源对象的属性信息,比如DTO数据传输对象和数据对象DO,我们需要将DO对象进行属性复制到DTO,但是对象格式又不一样,所以我们需要编写映射代码将对象中的属性值从一种类型转换成另一种类型。 这种转换最原始的方式就是手动编写大量的 get/set 代码,当然这是我们开发过程不愿意去做的,因为它确实显得很繁琐。为了解决这一痛点,就诞生了一些方便的类库,常用的有 apache的 BeanUtils ,spring的 BeanUtils , Dozer , Orika 等拷贝工具。这篇文章主要介绍 Apache的BeanUtils 与 Spring 的BeanUtils,其他框架后续文章再做介绍 对象拷贝 在具体介绍两种 BeanUtils之前,先来补充一些基础知识。它们两种工具本质上就是对象拷贝工具,而对象拷贝又分为深拷贝和浅拷贝,下面进行详细解释。 什么是浅拷贝和深拷贝 在Java中,除了 基本数据类型 之外,还存在 类的实例对象 这个引用数据类型,而一般使用 “=”号做赋值操作的时候,对于基本数据类型,实际上是拷贝的它的值,但是对于对象而言,其实赋值的只是这个对象的引用,将原对象的引用传递过去

全新出击!《Java开发手册(嵩山版)》解读手册升级下载

岁酱吖の 提交于 2020-08-19 13:02:44
简介: 《〈Java开发手册(嵩山版)〉灵魂15问》重磅来袭!“一线大厂如何用Java”解读再升级,千万阅读量博主深究Java规约背后的原理。规范学好Java还不来看一看? 《Java开发手册(嵩山版)》解读版升级下载 随着 《Java开发手册(嵩山版)》 的发布,解读再升级!灵魂13问随新版JAVA开发手册重磅回归,一线大厂怎么用JAVA?千万阅读量技术博主15问为你全面剖析。 精彩导读 一、为什么禁止使用Apache Beanutils进行属性的copy? 市面上有很多类似的属性拷贝工具类,比较常用的有 1、Spring BeanUtils 2、Cglib BeanCopier 3、Apache BeanUtils 4、Apache PropertyUtils 5、Dozer 那么,我们到底应该选择哪种工具类更加合适呢?为什么Java开发手册中提到禁止使用Apache BeanUtils呢? 接下来就聚焦于对比这几个类库的性能问题来分析。 二、为什么要求日期格式化时必须有使用y表示年,而不能用Y? 在Java中进行日期处理大家一定都不陌生,我们经常会需要在代码中进行日期的转换、日期的格式化等操作。 而一般我们进行日期格式化的时候都会使用SimpleDateFormat工具,之前我们有一篇文章介绍过SimpleDateFormat的线程安全问题

Java实现浏览器端大文件分片上传实例

左心房为你撑大大i 提交于 2020-08-19 03:31:25
javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求 1. 通过form表单向后端发送请求 <form id="postForm" action="${pageContext.request.contextPath}/UploadServlet" method="post" enctype="multipart/form-data"> <div class="bbxx wrap"> <input type="text" id="side-profile-name" name="username" class="form-control"> <input type="file" id="example-file-input" name="avatar"> <button type="submit" class="btn btn-effect-ripple btn-primary">Save</button> </div> </form> 改进后的代码不需要form标签,直接由控件来实现。开发人员只需要关注业务逻辑即可。JS中已经帮我们封闭好了 通过监控工具可以看到控件提交的数据,非常的清晰,调试也非常的简单。 2. 通过ajax向后端发送请求 1. $.ajax({ url : "${pageContext

好用到爆的 Java 技巧

余生颓废 提交于 2020-08-17 07:59:32
本文不是一个吹嘘的文章,不会讲很多高深的架构,相反,会讲解很多基础的问题和写法问题,如果读者自认为基础问题和写法问题都是不是问题,那请忽略这篇文章,节省出时间去做一些有意义的事情。 开发工具 不知道有多少 “老” 程序员还在使用 Eclipse,这些程序员们要不就是因循守旧,要不就是根本就不知道其他好的开发工具的存在,Eclipse 吃内存卡顿的现象,以及各种偶然莫名异常的出现,都告知我们是时候寻找新的开发工具了。 更换 IDE 根本就不想多解释要换什么样的 IDE,如果你想成为一个优秀的 Java 程序员,请更换 IntelliJ IDEA。使用 IDEA 的好处,请搜索谷歌。 别告诉我快捷键不好用 更换 IDE 不在我本文的重点内容中,所以不想用太多的篇幅去写为什么更换 IDE。在这里,我只能告诉你,更换 IDE 只为了更好、更快的写好 Java 代码。原因略。 别告诉我快捷键不好用,请尝试新事物。 Bean Bean 使我们使用最多的模型之一,我将以大篇幅去讲解 Bean,希望读者好好体会。 Domain 包名 根据很多 Java 程序员的” 经验” 来看,一个数据库表则对应着一个 Domain 对象,所以很多程序员在写代码时,包名则使用:com.xxx.domain ,这样写好像已经成为了行业的一种约束,数据库映射对象就应该是 Domain。但是你错了,Domain

丢弃掉那些BeanUtils工具类吧,MapStruct真香!!!

我只是一个虾纸丫 提交于 2020-08-15 13:30:31
在前几天的文章《 为什么阿里巴巴禁止使用Apache Beanutils进行属性的copy? 》中,我曾经对几款属性拷贝的工具类进行了对比。 然后在评论区有些读者反馈说MapStruct才是真的香,于是我就抽时间了解了一下MapStruct。结果我发现,这真的是一个神仙框架,炒鸡香。 这一篇文章就来简单介绍下MapStruct的用法,并且再和其他几个工具类进行一下对比。 为什么需要MapStruct ? 首先,我们先说一下MapStruct这类框架适用于什么样的场景,为什么市面上会有这么多的类似的框架。 在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。很多人都对三层架构、四层架构等并不陌生。 甚至有人说: "计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决,如果不行,那就加两层。" 但是,随着软件架构分层越来越多,那么各个层次之间的数据模型就要面临着相互转换的问题,典型的就是我们可以在代码中见到各种O,如DO、DTO、VO等。 一般情况下,同样一个数据模型,我们在不同的层次要使用不同的数据模型。 如在数据存储层,我们使用DO来抽象一个业务实体;在业务逻辑层,我们使用DTO来表示数据传输对象;到了展示层,我们又把对象封装成VO来与前端进行交互。 那么,数据的从前端透传到数据持久化层(从持久层透传到前端),就需要进行对象之间的互相转化

(转)java 深克隆(深拷贝)与浅克隆(浅拷贝)详解

ぐ巨炮叔叔 提交于 2020-08-14 11:05:44
java深克隆和浅克隆 基本概念 浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所拷贝的对象,而不复制它所引用的对象。 深复制(深克隆) 被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深复制把要复制的对象所引用的对象都复制了一遍。 实现java深复制和浅复制的最关键的就是要实现Cloneable接口中的clone()方法。 如何使用clone()方法 首先我们来看一下Cloneable接口: 官方解释: 1:实现此接口则可以使用java.lang.Object 的clone()方法,否则会抛出CloneNotSupportedException 异常 2:实现此接口的类应该使用公共方法覆盖clone方法 3:此接口并不包含clone 方法,所以实现此接口并不能克隆对象,这只是一个前提,还需覆盖上面所讲的clone方法。 public interface Cloneable { } 1 2 看看Object里面的Clone()方法: clone()方法返回的是Object类型,所以必须强制转换得到克隆后的类型 clone()方法是一个native方法

浅谈微服务体系中的分层设计和领域划分

泪湿孤枕 提交于 2020-08-14 09:34:57
K8s已经成为一线大厂分布式平台的标配技术。你是不是还在惆怅怎么掌握它?来这里,大型互联网公司一线工程师亲授,不来虚的,直接上手实战,3天时间带你搭建K8s平台,快速学会K8s,点击下方图片可了解培训详情。 引言 本文获得阿里巴巴《第二届研发效能征文》优秀文章奖,并在阿里第二届能效峰会上展出。 看标题感觉这个东西很理论,比起“高并发、多线程”、“分布式CAP、一致性、Paxos”、“高可用SLA”等具体的干货技术点,软件体系知识显得很“湿”,似乎人人都有自己的认识,但又很少有人能说完整,有一点可以确定的是,如果你未来需要独立设计一个复杂的系统中台,并使之未来能快速应对各种需求变化的话,科学合理的领域划分和边界界定需要我们“处女座级”的坚持下去,这对防止人力失控、减少项目烂尾很有帮助。合理的界定了边界后,即便某个微服务很糟糕,也可以就输入输出以很少的人力投入进行重构,相反的就是牵一发而动全身,加上业务需求频繁而来,很容易烂尾或是达不到如期的效果。 其实很多技术大神都是某一个技术点的好手,但可能在整体软件体系上思考并不多,每个人都有自己的设计方法,大部分容易想到的设计方法处理一般的系统已经够了,后面发生问题慢慢打补丁就行了,当我们面对各种需求变化陷入开发困境的时候我们就该想想了,咱们系统的体系设计上是否出了问题?本文不打算涉及领域建模和设计模式等代码级别的详述

SpringBoot WebUploader 分块上传

时光总嘲笑我的痴心妄想 提交于 2020-08-14 04:01:36
javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求 1. 通过form表单向后端发送请求 <form id="postForm" action="${pageContext.request.contextPath}/UploadServlet" method="post" enctype="multipart/form-data"> <div class="bbxx wrap"> <input type="text" id="side-profile-name" name="username" class="form-control"> <input type="file" id="example-file-input" name="avatar"> <button type="submit" class="btn btn-effect-ripple btn-primary">Save</button> </div> </form> 改进后的代码不需要form标签,直接由控件来实现。开发人员只需要关注业务逻辑即可。JS中已经帮我们封闭好了 通过监控工具可以看到控件提交的数据,非常的清晰,调试也非常的简单。 2. 通过ajax向后端发送请求 1. $.ajax({ url : "${pageContext