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使用Hibernate攔截器實(shí)現(xiàn)時(shí)間自動(dòng)注入的操作代碼
這篇文章主要介紹了SpringBoot使用Hibernate攔截器實(shí)現(xiàn)時(shí)間自動(dòng)注入的操作代碼,主要包括hibernate攔截器的相關(guān)知識(shí),結(jié)合實(shí)例代碼給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-10-10Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(42)
下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你2021-07-07IntelliJ IDEA 無法正常使用SVN的問題和完美解決辦法
這篇文章主要介紹了IntelliJ IDEA 無法正常使用SVN的問題和解決辦法,本文給大家分享完美解決方案,通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08java客戶端Etcd官方倉庫jetcd中KeepAlive接口實(shí)現(xiàn)
這篇文章主要為大家介紹了java客戶端Etcd官方倉庫jetcd中KeepAlive接口實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,多多加薪2022-02-02SpringBoot集成Spring Security的方法
Spring security,是一個(gè)強(qiáng)大的和高度可定制的身份驗(yàn)證和訪問控制框架。這篇文章主要介紹了SpringBoot集成Spring Security的操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07springMVC+jersey實(shí)現(xiàn)跨服務(wù)器文件上傳
這篇文章主要介紹了springMVC+jersey實(shí)現(xiàn)跨服務(wù)器文件上傳,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08貨拉拉大數(shù)據(jù)對(duì)BitMap的探索實(shí)踐詳解
這篇文章主要為大家介紹了貨拉拉大數(shù)據(jù)對(duì)BitMap的探索實(shí)踐詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09Java8簡單了解Lambda表達(dá)式與函數(shù)式接口
這篇文章主要介紹了Java8簡單了解Lambda表達(dá)式與函數(shù)式接口,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11