在開發(fā)中有些規(guī)范,比如DTO、DO、VO等等,之間,如果我們需要轉(zhuǎn)換,單純的我們要一個(gè)一個(gè)的 set 值,真是一項(xiàng)苦B的活,在我以前接觸的項(xiàng)目中發(fā)現(xiàn)很多代碼是使用get/set來進(jìn)行轉(zhuǎn)換的,大量的這種冗余代碼,看著頭都大??!
專注于為中小企業(yè)提供網(wǎng)站制作、網(wǎng)站設(shè)計(jì)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)涇源免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千余家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。BeanUtilsjava bean對象的相關(guān)轉(zhuǎn)化,這里介紹兩個(gè) ,一個(gè)是大家都非常熟悉的 BeanUtils,還有一個(gè)就是平常在開發(fā)中經(jīng)常使用的 MapStruct。
MapStruct 和 BeanUtils 最常用的莫過于對象的的拷貝了 。 不過面對需要深拷貝的對象大家要注意了,這里并不推薦大家使用BeanUtils工具去實(shí)現(xiàn)
@Test
public void test01() {
SysUser sysUser = new SysUser();
sysUser.setUserId(1L);
sysUser.setUserName("張三");
sysUser.setCreateTime(new Date());
User user = new User();
BeanUtils.copyProperties(sysUser,user);
}
MapStruct下面重點(diǎn)說一下 MapStruct 這個(gè)轉(zhuǎn)化,相對比的話BeanUtils 就是一個(gè)大老粗,只能同屬性映射,或者在屬性相同的情況下,允許被映射的對象屬性少。
但當(dāng)遇到被映射的屬性數(shù)據(jù)類型被修改或者被映射的字段名被修改,則會導(dǎo)致映射失敗。而 mapstruct 就是一個(gè)巧媳婦兒了。
她心思細(xì)膩,把我們可能會遇到的情況都給考慮到了(要是我也能找一個(gè)這樣的媳婦兒該多好,內(nèi)心笑出了豬聲)
首先啥都不想果斷導(dǎo)入Jar包org.mapstruct mapstruct-jdk81.2.0.Final org.mapstruct mapstruct-processor1.2.0.Final
定義兩個(gè)相同字段的對象public class SysUser {
private Long userId;
private String account;
忽略get、set....
}
public class User {
private Long userId;
private String account;
忽略get、set....
}
接下來定義一個(gè)接口,但是注意不需要實(shí)現(xiàn),他就呢能夠幫我們轉(zhuǎn)化很神奇的
//注意Mapper引入路徑是:import org.mapstruct.Mapper;
@Mapper
public interface BeanConvert {
BeanConvert COPY_PROPERTIES = Mappers.getMapper(BeanConvert.class);
User sysUserDtoToUser(SysUser sysUser);
}
最后一步:在代碼中調(diào)用,聰明的小伙伴看下面代碼,一下就明白了,就是這么簡單,搜易賊@Test
public void test01() {
SysUser sysUser = new SysUser();
sysUser.setUserId(1L);
sysUser.setAccount("一個(gè)肥鲇魚");
User user = BeanConvert.COPY_PROPERTIES.sysUserDtoToUser(sysUser);
System.out.println(user); // User{userId=1, account='一個(gè)肥鲇魚'}
}
兩個(gè)對象字段不相同的情況完全兩個(gè)類字段相同的情況是很容易的,那么,更加令我們頭疼的?有多個(gè)字段名字不同但是有對應(yīng)關(guān)系應(yīng)該怎么搞呢?
小栗子public class SysUser {
private Long userId;
private String account;
忽略get、set....
}
public class User {
private Long userId;
private String userName;
忽略get、set....
}
將SysUser中account字段的值,賦值到User中userName
@Mapper
public interface BeanConvert {
BeanConvert COPY_PROPERTIES = Mappers.getMapper(BeanConvert.class);
@Mapping(source = "account", target = "userName")
User sysUserDtoToUser(SysUser sysUser);
// 多字段情況
// @Mappings({
// @Mapping(source = "userName", target = "account"),
// @Mapping(source = "userId", target = "id"),
// @Mapping(source = "createTime", target = "time")
// })
}
@Test
public void test01() {
SysUser sysUser = new SysUser();
sysUser.setUserId(1L);
sysUser.setAccount("一個(gè)肥鲇魚");
User user = BeanConvert.COPY_PROPERTIES.sysUserDtoToUser(sysUser);
System.out.println(user);// User{userId=1, userName='一個(gè)肥鲇魚'}
}
搞定,是不是很絲滑~
但是這么簡單的兩個(gè)小例子可包含不了?MapStruct這么強(qiáng)大的功能,不管是日期格式化、還是表達(dá)式解析、還是深拷貝,都能一一搞定。
拋磚引玉!
剩下的就交給聰明的小伙伴了!
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
新聞名稱:JAVABean對象轉(zhuǎn)換工具-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://jinyejixie.com/article48/dijghp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、全網(wǎng)營銷推廣、網(wǎng)站建設(shè)、動態(tài)網(wǎng)站、網(wǎng)站導(dǎo)航、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容