类型转换--MapStruct
程序员文章站
2022-07-15 16:58:35
...
在工作中经验需要用到类型转换–例如将一个对象的值赋给另一个对象。这时候如果采取重复set、get的方法,会造成大量代码冗余,且没有技术含量;写起来枯燥乏味。那么我们可以引入一些第三方框架来做这个事情:MapStruct
先说下背景下:Maven父子项目中,数据库对应的实体类放在server层,查询出来的对象需要返回给前端,但是web层引用不到server层的实体类,这时候需要新建一个对象(属性与实体类一致),并将实体类的属性值赋给该对象
代码如下:
实体类:
@Table(name="table")
@Data
public class GameMessageEntity {
@SeqID(name = "*******")
private Long id;
private String title;
private String mgeAbstract;
private String value;
private String createUser;
private Date createDate;
private Date expireDate;
private Date updateDate;
private String updateUser;
private Integer type;
private Integer sort;
private String releaseDate;
}
对象:
@Data
public class GameMessageVo implements Serializable {
private Long id;
private String title;
private String mgeAbstract;
private String value;
private String createUser;
private Date createDate;
private Date expireDate;
private Date updateDate;
private String updateUser;
private Integer type;
private Integer sort;
private String releaseDate;
}
注意:对象必须序列化
新建一个mapper类:
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
@Mapper
public interface GameMessageMapper {
public static GameMessageMapper INSTANCE = Mappers.getMapper(GameMessageMapper.class);
/**
* 一对一转换
* @param entity
* @return
*/
GameMessageVo MessageEntityToVo(GameMessageEntity entity);
/**
* 多对多转换
* @param entities
* @return
*/
List<GameMessageVo> MessageEntityToVoList(List<GameMessageEntity> entities);
}
具体转换:
public List<GameMessageVo> qryGameMessageByNoExpireDate(Map<String,Object> map){
List<GameMessageEntity> messageEntityList=messageDao.qryGameMessageByNoExpireDate(map);
List<GameMessageVo> list=GameMessageMapper.INSTANCE.MessageEntityToVoList(messageEntityList);
return list;
}
注意:会在target目录下自动生成具体实现:
转换代码写完后,或实体类有增加或修改,需重新编译:Ctrl + Shift + F9
具体可参考:https://segmentfault.com/a/1190000020663215?utm_source=tag-newest
上一篇: 一网打尽各类Java基本数据类型转换
下一篇: 自动化测试框架Appium集成及应用