Dozer依赖:
<!--类转换依赖-->
<dependency>
<groupId>com.github.dozermapper</groupId>
<artifactId>dozer-spring-boot-starter</artifactId>
<version>6.2.0</version>
</dependency>
实体类:
VO:
package com.baise.model; import com.baise.bean.ArticleCategory; import com.baise.bean.BaseBean; import com.fasterxml.jackson.annotation.JsonInclude; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import org.dozer.Mapping; import java.util.Date; /** * @author wjn * @version 1.0 * @date 2021/4/15 16:24 */ @Setter @Getter @JsonInclude(JsonInclude.Include.NON_NULL) @AllArgsConstructor @NoArgsConstructor public class ArticlePageViewModel{ private Long id;//文章id private String title;//文章标题 private String keyword;//关键词 private String describe;//描述 private String content;//文章内容 private String imgUrl;//缩略图 private Integer type;//文章类别:1表示文章列表、2表示专题列表、3表示banana图 private String author;//作者 private Integer categoryId;//分类id @Mapping("articleCategory.articleCategoryName") private String articleCategoryName;//分类名称 private Date createTime;//创建时间 }
Entity:
package com.baise.bean; import com.fasterxml.jackson.annotation.JsonInclude; import lombok.*; import org.dozer.Mapping; /** * @author wjn * @version 1.0 * @date 2021/4/15 9:56 */ @Setter @Getter @JsonInclude(JsonInclude.Include.NON_NULL) @AllArgsConstructor @NoArgsConstructor public class Article extends BaseBean{ private String title;//文章标题 private String keyword;//关键词 private String describe;//描述 private Integer categoryId;//文章分类id private Integer state;//是否发布:true表示发布、false表示不发布 private String content;//文章内容 private String imgUrl;//缩略图 private Integer type;//文章类别:1表示文章列表、2表示专题列表、3表示banana图 private String author;//作者 private ArticleCategory articleCategory;//文章分类id private Integer timeState;//1表示一天内、2表示一周内、3表示一月内、4表示一年内 }
mybatis查询语句:
<select id="selectArticleListPageView" resultType="com.baise.bean.Article"> SELECT a.id AS "id", a.title AS "title", a.author AS "author", b.NAME AS "articleCategory.articleCategoryName", a.update_time AS "createTime", a.img_url AS "imgUrl", a.keyword AS "keyword", a.DESCRIBE AS "describe", a.type AS "type", a.content AS "content", b.id AS "categoryId" FROM article a INNER JOIN article_category b ON a.category_id = b.id WHERE a.not_delete = 1 AND a.id = #{id} AND a.state =1 </select>
Service层类转换代码:
@Override public PageModel selectAdminArticleList(Integer pageNum, Integer pageSize, Article article) { Page<AdminArticleListModel> pageInfo = PageHelper.startPage(pageNum, pageSize, true) .doSelectPage(() -> Dozer.convert(articleMapper.selectAdminArticleList(article),AdminArticleListModel.class)); return new PageModel(pageInfo.getPages(), pageSize, pageInfo.getTotal(), pageInfo); }
Dozer工具类:
package com.baise.utils; /*import com.github.dozermapper.core.Mapper;*/ import org.dozer.Mapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.lang.NonNull; import org.springframework.lang.Nullable; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import java.util.Collections; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; /** * * dozer转换类 * * */ @Component public class Dozer { /** * dozer转换的核心mapper对象 */ private static Mapper dozerMapper; @Autowired private Mapper mapper; @PostConstruct private void construct() { Dozer.setDozerMapper(mapper); } private static void setDozerMapper(Mapper dozerMapper) { Dozer.dozerMapper = dozerMapper; } /** * 转换实体为另一个指定的实体 * 任意一个参数为NULL时 会抛出NPE * {@link }//com.github.dozermapper.core.util.MappingValidator#validateMappingRequest * * @param source 源实体 不能为NULL * @param clazz 目标实体 不能为NULL * @param <T> 泛型 * @return 转换后的结果 */ @NonNull public static <T> T convert(@NonNull Object source, @NonNull Class<T> clazz) { return dozerMapper.map(source, clazz); } /** * 转换List实体为另一个指定的实体 * source如果为NULL 会使用空集合 * 在目标实体为NULL时 会抛出NPE * {@link }//com.github.dozermapper.core.util.MappingValidator#validateMappingRequest * * @param source 源集合 可以为NULL * @param clazz 目标实体 不能为NULL * @param <T> 泛型 * @return 转换后的结果 */ @Nullable public static <T> List<T> convert(@Nullable List<?> source, @NonNull Class<T> clazz) { return Optional.ofNullable(source) .orElse(Collections.emptyList()) .stream() .map(bean -> dozerMapper.map(bean, clazz)) .collect(Collectors.toList()); } }