- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章MapStruct处理Java中实体与模型间不匹配属性转换的方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
摘要: 前面介绍了mapstrut简单用法,mapstrut的最重要的特点就是处理java中实体与模型间不匹配属性的转换.
实体模型 。
有一个user对象:
1
2
3
4
5
6
7
|
public
class
user {
private
integer id;
private
string name;
private
double
account;
private
boolean
married;
// setters, getters, tostring()
}
|
有一个employee 对象:
1
2
3
4
5
6
7
|
public
class
employee {
private
int
id;
private
string ename;
private
string position;
private
string married;
// setters, getters, tostring()
}
|
业务场景 。
分析与实现 。
最愚蠢的方式是自己写一堆的setter方法与getter方法,大量get/set代码堆积,增加了代码长度和阅读代码的难度。利用工具beanutils是可以处理第一个需求的,但第三种需求就无能为力了。这时mapstrut就派上用场了,最简单的配置可以像下面这样:
1
2
3
4
5
6
|
@mapper
public
interface
usermapper {
usermapper instance = mappers.getmapper(usermapper.
class
);
employee usertoemployee(user user);
user employeetouser(employee employee);
}
|
对于第二个需求,可以通过下面方式实现,注解@mapping可以指定需要把哪个字段source转换为哪个字段target.
1
2
3
4
5
6
7
8
9
10
11
12
|
@mapper
public
interface
usermapper {
usermapper instance = mappers.getmapper(usermapper.
class
);
@mappings
({
@mapping
(source=
"name"
, target=
"ename"
)
})
employee usertoemployee(user user);
@mappings
({
@mapping
(source=
"ename"
, target=
"name"
)
})
user employeetouser(employee employee);
}
|
第三个需求有点变态,但是真实发生在我们的项目中,实现起来确实繁琐一些:
首先,自定义转化逻辑,布尔值到字符串,布尔的true对应字符串的y,布尔的false对应字符串的n:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public
class
usertransform {
public
string booleantostring(
boolean
value){
if
(value){
return
"y"
;
}
return
"n"
;
}
public
boolean
strtoboolean(string str){
if
(
"y"
.equals(str)) {
return
true
;
}
return
false
;
}
}
|
使用很简单,在接口的注解mapper添加uses参数,值就是需要刚才的转换逻辑类.
1
2
|
@mapper
(uses = usertransform.
class
)
public
interface
usermapper {...}
|
结果与分析 。
用junit test写两个测试方法,分别测试user 对象转换employee ,employee 对象转换user.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public
class
midtest {
@test
public
void
midtest(){
user user =
new
user();
user.setid(
125
);
user.setname(
"lee"
);
user.setmarried(
true
);
employee e = usermapper.instance.usertoemployee(user);
system.out.println(e);
}
@test
public
void
midtest2(){
employee e =
new
employee();
e.setid(
222
);
e.setename(
"chao"
);
e.setmarried(
"n"
);
user u = usermapper.instance.employeetouser(e);
system.out.println(u);
}
}
|
结果如下:
user [id=222, name=chao, account=0.0, married=false] employee [id=125, ename=lee, position=null, married=y] 。
转换结果符合预期,转化期间不存在的属性,有了默认值(account和position),包装类也能识别(int和integer),从自动生成的usermapperimpl.java中,可以看到, 。
employee.setmarried( usertransform.booleantostring( user.ismarried() ) );,用到了刚才自定义的转换逻辑。第三种需求是很少的,但是遇到了也是很难解决的,mapstruct的自定义函数确实方便不少,不过与其他的转换工具相比,上手难度确实大,配置也稍显繁琐.
项目代码托管在码云.
总结 。
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我的支持。如果你想了解更多相关内容请查看下面相关链接 。
原文链接:https://blog.csdn.net/jiangchao858/article/details/77604469 。
最后此篇关于MapStruct处理Java中实体与模型间不匹配属性转换的方法的文章就讲到这里了,如果你想了解更多关于MapStruct处理Java中实体与模型间不匹配属性转换的方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
你能比较一下属性吗 我想禁用文本框“txtName”。有两种方式 使用javascript,txtName.disabled = true 使用 ASP.NET, 哪种方法更好,为什么? 最佳答案 我
Count 属性 返回一个集合或 Dictionary 对象包含的项目数。只读。 object.Count object 可以是“应用于”列表中列出的任何集合或对
CompareMode 属性 设置并返回在 Dictionary 对象中比较字符串关键字的比较模式。 object.CompareMode[ = compare] 参数
Column 属性 只读属性,返回 TextStream 文件中当前字符位置的列号。 object.Column object 通常是 TextStream 对象的名称。
AvailableSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。 object.AvailableSpace object 应为 Drive 
Attributes 属性 设置或返回文件或文件夹的属性。可读写或只读(与属性有关)。 object.Attributes [= newattributes] 参数 object
AtEndOfStream 属性 如果文件指针位于 TextStream 文件末,则返回 True;否则如果不为只读则返回 False。 object.A
AtEndOfLine 属性 TextStream 文件中,如果文件指针指向行末标记,就返回 True;否则如果不是只读则返回 False。 object.AtEn
RootFolder 属性 返回一个 Folder 对象,表示指定驱动器的根文件夹。只读。 object.RootFolder object 应为 Dr
Path 属性 返回指定文件、文件夹或驱动器的路径。 object.Path object 应为 File、Folder 或 Drive 对象的名称。 说明 对于驱动器,路径不包含根目录。
ParentFolder 属性 返回指定文件或文件夹的父文件夹。只读。 object.ParentFolder object 应为 File 或 Folder 对象的名称。 说明 以下代码
Name 属性 设置或返回指定的文件或文件夹的名称。可读写。 object.Name [= newname] 参数 object 必选项。应为 File 或&
Line 属性 只读属性,返回 TextStream 文件中的当前行号。 object.Line object 通常是 TextStream 对象的名称。 说明 文件刚
Key 属性 在 Dictionary 对象中设置 key。 object.Key(key) = newkey 参数 object 必选项。通常是 Dictionary 
Item 属性 设置或返回 Dictionary 对象中指定的 key 对应的 item,或返回集合中基于指定的 key 的&
IsRootFolder 属性 如果指定的文件夹是根文件夹,返回 True;否则返回 False。 object.IsRootFolder object 应为&n
IsReady 属性 如果指定的驱动器就绪,返回 True;否则返回 False。 object.IsReady object 应为 Drive&nbs
FreeSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。只读。 object.FreeSpace object 应为 Drive 对象的名称。
FileSystem 属性 返回指定的驱动器使用的文件系统的类型。 object.FileSystem object 应为 Drive 对象的名称。 说明 可
Files 属性 返回由指定文件夹中所有 File 对象(包括隐藏文件和系统文件)组成的 Files 集合。 object.Files object&n
我是一名优秀的程序员,十分优秀!