主页 > Java教程 > Java 实体返回VO工具

Java编写的实体返回VO工具

  • 更新时间:
  • 编辑:邴文敏
  • 7037人关注

VO(value object)通常用于业务层之间的数据传递,VO的属性是根据当前业务的不同而不同的,也就是说,它的每一个属性都一一对应当前业务逻辑所需要的数据的名称。本文将介绍如何将实体转换为vo对象,另外这篇文章主要知识点是关于Java、实体返回vo、Java、返回、Java 实体返回VO工具的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子资料:

参考资料
资料:
Java性能调优指南
大小:
42.6MB
类别:
Java调优指南电子资源立即下载

Java编写的实体返回VO工具

今天在网上看到《Java编写的实体返回VO工具》,代码整理的很实用,增加了更多实例内容,为了大家阅读方便。

好久不见 最近些许有点懒惰 程序员嘛 每个月总会有几天的 你懂得

那最近发现好的代码写出来真的会让人有种赏心悦目的存在 相反就会有一种想掐死写代码的那个人

所以我最近写了一个小工具 就是实体转换VO对象的一个小工具 说到这里 如果你的第一反应是 Spring的BeanUtils 那说明你肯定也有遇到过跟我一样的问题

那具体是怎么做? (不考虑性能的情况下) 等下分析

先看下如果正常返回VO我们需要怎么去操作?

现在有一个用户实体

import lombok.Data;

/**
 * 用户实体
 *
 * @author 是小张啊
 * @since 2021-05-06
 */
@Data
public class User {
    /**
     * 用户id
     */
    private String id;

    /**
     * 用户名称(账号)
     */
    private String name;

    /**
     * 密码(不加密)
     */
    private String password;
}

现在需要返回一个VO的对象 即

import lombok.Data;

/**
 * 用户vo对象
 * @author 是小张啊
 * @since 2021-05-06
 */
@Data
public class UserVo {
    /**
     * 用户id
     */
    private String id;

    /**
     * 用户名称(账号)
     */
    private String name;
}

可以这样处理

import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author 是小张啊
 * @since 2021-05-06
 */
@RestController
public class UserController {

    /**
     * 查询用户
     * @return
     */
    @GetMapping("/select")
    public UserVo select() {
        User user = new User();
        user.setId(1);
        user.setName("是小张啊");
        UserVo userVo = new UserVo();
        BeanUtils.copyProperties(user, userVo);
        return userVo;
    }
}

这样是没有问题的 不谈性能 这样做是非常稳的

现在有这样的一个需求 需要返回一个 List<UserVo> 如果你能想到用 java8的lambda表达式的去使用Spring的BeanUtils 那也是不错的
具体实现就是

import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author 是小张啊
 * @since 2021-05-06
 */
@RestController
public class UserController {

    /**
     * 查询用户
     * @return
     */
    public List<UserVo> select() {
        // 初始化数据
        User user1 = new User();
        user1.setId(1);
        user1.setName("是小张啊");
        User user2 = new User();
        user2.setId(1);
        user2.setName("是小张啊");
        List<User> users = new ArrayList<>();
        users.add(user1);
        users.add(user2);

        // List<entity> -> List<vo>
        List<UserVo> userVos = users.stream().map(user -> {
            UserVo userVo = new UserVo();
            BeanUtils.copyProperties(user, userVo);
            return userVo;
        }).collect(Collectors.toList());
        return userVos;
    }

}

这其实也挺不错的 只是每次都这样写 属实不美观 如果能提取公共方法去调用就太舒服了 所以这个方法也是根据 BeanUtils去优化这个工具

import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * Bean 工具类
 * @author 是小张啊
 * @since 2021-05-06
 */
@Slf4j
public class Utils extends BeanUtils {
   
    /**
     * 将实体批量转换成 vo对象
     * 注:当前只针对 List
     *
     * @param source 实体集合
     * @param clazz  需要批量转换成的对象
     * @param <T>
     * @param <S>
     * @return
     */
    @SneakyThrows
    public static <T, S> List<T> conversionVo(List<S> source, Class<T> clazz) {
        return source.stream().map(resources -> {
            T t = null;
            try {
                // 利用反射 创建一个新的实例
                t = clazz.newInstance();
                BeanUtils.copyProperties(resources, t);
            } catch (InstantiationException e) {
                log.info("{}实例化失败", clazz);
            } catch (IllegalAccessException e) {
                log.info("{}不可访问", clazz);
            }
            return t;
        }).collect(Collectors.toList());
    }
}

这样就很方便 只需要去调用即可

import top.lzmvlog.common.Utils;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 是小张啊
 * @since 2021-05-06
 */
@RestController
public class UserController {

    /**
     * 查询用户
     * @return
     */
    public List<UserVo> select() {
        // 初始化数据
        User user1 = new User();
        user1.setId(1);
        user1.setName("是小张啊");
        User user2 = new User();
        user2.setId(1);
        user2.setName("是小张啊");
        List<User> users = new ArrayList<>();
        users.add(user1);
        users.add(user2);
        List<UserVo> userVos = Utils.conversionVo(users, UserVo.class);
        return userVos;
    }

}

BeanUtils 是有局限性的 你必须保证 实体的字段值和返回的VO字段值是一样的

代码写到最后 其实就是一个不断优化的过程 领导来了 不能多说 得继续搬砖去了

以上就是Java编写的实体返回VO工具的详细内容,更多关于Java 实体返回VO工具的资料请关注java学习网其它相关文章!

相关内容

  • Java运行时数据区知识点总结

    Java运行时数据区知识点总结

    这篇文章主要介绍了Java运行时数据区的相关知识,非常不错,具有参考借鉴价值,需要的朋友参考下吧

    05-24

    阅读更多
  • 北京培训机构Java哪家好

    北京的Java发展应该还是比较不错的,就目前的发展而言如果想要在北京进行Java培训,只要是能够学好知识,那么在北京这样的地方吗找一份工作还是比较容易的。这个关于Java培训出来的发展情况大家可以从各个招聘网站看一下Java相关岗位的招聘情况,或者是也可以从网上可以对Java的发展前景,就业方向等方向做一个详细的了解。

    06-19

    阅读更多
  • Java中Spring WebSocket实例讲解

    本篇文章主要通过代码给大家详细分析了Java中Spring WebSocket的用法,需要的读者们参考学习下吧。

    06-21

    阅读更多
  • Java实现一个静态链表的具体做法

    这篇文章主要介绍了用Java实现一个静态链表的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    05-20

    阅读更多
  • Java并发编程中关于本地线程变量的使用

    这篇文章主要介绍了Java并发编程示例(九):本地线程变量的使用,有时,我们更希望能在线程内单独使用,而不和其他使用同一对象启动的线程共享,Java并发接口提供了一种很清晰的机制来满足此需求,该机制称为本地线程变量,需要的朋友可以参考下

    05-25

    阅读更多
  • Java动态循环队列是如何实现的

    今天带大家学习java队列的相关知识,文章围绕着如何实现Java动态循环队列展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下

    07-05

    阅读更多
  • java设计模式中关于适配器模式的知识点分析

    java设计模式中关于适配器模式的知识点分析

    这篇文章主要介绍了java 设计模式之适配器模式的详解的相关资料,需要的朋友可以参考下

    05-20

    阅读更多

知识点补充

小编:蒋寻雪 18小时21分钟前编辑补充

java实现俄罗斯方块游戏

: 本文实例为大家分享了java实现俄罗斯方块游戏的具体代码,供大家参考,具体内容如下 1.功能需求 2.软件功能架构图 3.界面设计 4.程序逻辑图 5.实现代码 创建控制面板并添加按钮 初始化界面 添加事件监听 创建方块 实现对方块操作 游戏主类,实现游戏控制 功能需求 1、在二维平面里面用各种随机产生的方块堆积木,每满一行消去一行,当达到顶部时,游戏结束。 2、玩家通过方向键来控制方块转动,左移,右移和直落。 3、每种类型的方块都有颜色。 4、玩家能够在玩的过程中给出分数,分数是由方块的类型决定的,每堆积一个方块就把分数累加到总分中。 5、游戏有暂停,开始,结束,游戏规则和游……

小编:戈和雅 20小时26分钟前编辑补充

广州Java编程培训费用如何收取

: 广州Java编程培训费用如何收取?首先我们要了解到Java开发的薪资是比较高的,正因如此,Java学习培训价钱也愈来愈高,如今去报名参加广州Java学习培训划得来吗?Java学习培训价钱有优惠吗?多少才算是合理呢? 什么样的Java培训价格对应什么样的培训质量,一般来说,广州Java培训质量越高越好,但这并不是绝对的,具体分析应该基于广州Java培训价格的分类。 一方面,网上培训的价格低于线下Java培训班的价格,线下Java培训对学生的约束力较大。如果你想在短时间内得到老师的充分指导并达到就业水平,线下Java培训的价格是昂贵的,但效果明显更好。 另一方面,由于Java培训模式不同,Java培训价格……