SpringBoot中Bean拷貝及工具類封裝的實(shí)現(xiàn)
在我們SpringBoot 項(xiàng)目的開發(fā)中,經(jīng)常需要做對(duì)象的拷貝和轉(zhuǎn)化,例如我們需要把前端傳給我們的DTO對(duì)象轉(zhuǎn)化為POJO對(duì)象存到數(shù)據(jù)庫,返回前端數(shù)據(jù)時(shí)需要把POJO對(duì)象轉(zhuǎn)換為VO,這篇文章就講講SpringBoot中對(duì)象的拷貝及其工具類的封裝。
一、使用Spring BeanUtils
在Spring或SpringBoot項(xiàng)目中有為我們提供一個(gè)BeanUtils工具類。
使用方法如下,第一個(gè)參數(shù)是源對(duì)象,第二個(gè)參數(shù)是目標(biāo)對(duì)象:
BeanUtils.copyProperties(Object source, Object target);
還可以繼續(xù)傳入?yún)?shù)進(jìn)行忽略參數(shù)拷貝:
BeanUtils.copyProperties(Object source, Object target, String... ignoreProperties);
使用示例:
這里我們創(chuàng)建一個(gè)UserDto,User實(shí)體類,來實(shí)現(xiàn)前端傳入Dto對(duì)象轉(zhuǎn)為實(shí)體類對(duì)象
domain.entity.User:
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Long id;
private String username;
private Integer age;
private Date createTime;
private Date updateTime;
private Integer deleted;
}domain.dto.AddUserDto:
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class AddUserDto {
private String username;
private Integer age;
}實(shí)現(xiàn)Bean拷貝:
public ResponseResult addUser(AddUserDto addUserDto) {
// 先新建一個(gè)user對(duì)象
User user = new User();
// 實(shí)現(xiàn)把a(bǔ)ddUserDto拷貝到user對(duì)象
BeanUtils.copyProperties(addUserDto, user);
userMapper.insert(user);
return ResponseResult.okResult();
}二、Bean 拷貝工具類封裝
因?yàn)榛A(chǔ)的BeanUtils在使用時(shí)拷貝非常不方便,還需要我們自己去創(chuàng)建新的User拷貝,對(duì)List集合的拷貝還需要我們自己去遍歷,這里我們封裝工具類來實(shí)現(xiàn)這些功能
import org.springframework.beans.BeanUtils;
import java.util.List;
import java.util.stream.Collectors;
public class BeanCopyUtils {
private BeanCopyUtils() {
}
public static <V> V copyBean(Object source, Class<V> clazz) {
// 創(chuàng)建目標(biāo)對(duì)象
V result = null;
try {
result = clazz.newInstance();
// 實(shí)現(xiàn)屬性拷貝
BeanUtils.copyProperties(source, result);
} catch (Exception e) {
e.printStackTrace();
}
//返回
return result;
}
public static <O, V> List<V> copyBeanList(List<O> list, Class<V> clazz) {
return list.stream()
.map(o -> copyBean(o, clazz))
.collect(Collectors.toList());
}
}使用示例
- 普通
Bean對(duì)象拷貝
public ResponseResult addUser(AddUserDto addUserDto) {
User user = BeanCopyUtils.copyBean(addUserDto, User.class);
userMapper.insert(user);
return ResponseResult.okResult();
}List拷貝
public ResponseResult getUser(Integer pageNum, Integer pageSize) {
Page<User> userPage = new Page<>(pageNum, pageSize);
userMapper.selectPage(userPage, null);
List<UserVo> userVos = BeanCopyUtils.copyBeanList(userPage.getRecords(), UserVo.class);
PageVo pageVo = new PageVo(userVos, userPage.getTotal());
return ResponseResult.okResult(pageVo);
}到此這篇關(guān)于SpringBoot中Bean拷貝及工具類封裝的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)SpringBoot Bean拷貝內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot如何讀取war包jar包和Resource資源
這篇文章主要介紹了SpringBoot如何讀取war包jar包和Resource資源,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01
javaweb中ajax請(qǐng)求后臺(tái)servlet(實(shí)例)
下面小編就為大家?guī)硪黄猨avaweb中ajax請(qǐng)求后臺(tái)servlet(實(shí)例)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06
springboot使用之多個(gè)filter的執(zhí)行順序以及配置方式
這篇文章主要介紹了springboot使用之多個(gè)filter的執(zhí)行順序以及配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
Spring Security如何優(yōu)雅的增加OAuth2協(xié)議授權(quán)模式
這篇文章主要介紹了Spring Security如何優(yōu)雅的增加OAuth2協(xié)議授權(quán)模式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
WIN10系統(tǒng)中添加bat腳本重啟jar服務(wù)
在bat腳本中執(zhí)行java服務(wù),命令與cmd中類似,下面這篇文章主要給大家介紹了關(guān)于WIN10系統(tǒng)中添加bat腳本重啟jar服務(wù)的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12
SpringBoot部署到Linux讀取resources下的文件及遇到的坑
本文主要給大家介紹SpringBoot部署到Linux讀取resources下的文件,在平時(shí)業(yè)務(wù)開發(fā)過程中,很多朋友在獲取到文件內(nèi)容亂碼或者文件讀取不到的問題,今天給大家分享小編遇到的坑及處理方案,感興趣的朋友跟隨小編一起看看吧2021-06-06

