【springmvc】java bean 的区分

news2024/10/6 16:25:59

bean

JavaBean分为两类:

  • 一类称为实体类Bean:专门存储业务数据的,如 Student、User 等
  • 一类称为业务处理 Bean:指 Service 或 Dao 对象,专门用于处理业务逻辑和数据访问。

在一个java的springboot中,一般我们需要用到许多的实体类

一般在一个大型项目中,又会把实体类分成不同使用阶段的类
在这里插入图片描述

PO

POJO全称为:Plain Ordinary Java Object,即简单普通的java对象。一般用在数据层映射到数据库表的类,类的属性与表字段一一对应。

PO全称为:Persistant Object,即持久化对象。可以理解为数据库中的一条数据,也可以理解为POJO经过持久化后的对象。

DO(Domain Object):领域对象,就是从现实世界中抽象出来的有形或无形的业务实体,一般也和数据库对应

BO

全称为:Business Object,即业务对象。一般用在业务层,当业务比较复杂,用到比较多的业务对象时,可用BO类组合封装所有的对象一并传递。
一般是处理多个对象的工具类或者service

VO

全称为:Value Object,有的也称为View Object,即值对象或页面对象。一般用于web层向view层封装并提供需要展现的数据

DTO

全称为:Data Transfer Object,即数据传输对象。一般用于向数据层外围提供仅需的数据,如查询一个表有50个字段,界面或服务只需要用到其中的某些字段,DTO就包装出去的对象。可用于隐藏数据层字段定义,也可以提高系统性能,减少不必要字段的传输损耗。

总结

VO,BO,PO,DTO这样分层还是很有意义的。尤其在团队成员较多的情况下,结构更加一目了然,同时也能很大程度避免多端系统数据所需不一致时,有人修改属性影响其他页面。但也完全没有必要教条主义,把这些全部用上,需要根据所开发的业务复杂度来取舍,如果本身业务逻辑不负责,照搬全上反而让开发变的更复杂。

命名规范

• 数据对象:xxxPO,xxx即为数据表名。(也可DO)
• 数据传输对象:xxxDTO,xxx为业务领域相关的名称。
• 展示对象:xxxVO,xxx一般为网页名称。
• 业务对象:xxxBO,xxx是业务名称。

分层使用和转换

controller层

接受前端的VO,DTO
接受service层BO
向前端发送VO,DTO

service层

接受controller层VO,DTO,BO,PO
接受dao层的PO
向controller层返回BO,PO

dao层

接受service层的VO,DTO,BO,PO
从数据库查询PO
向service层返回PO

转换方法

  1. Set和Get方法

a.手动操作较为麻烦
b.容易出错

  1. BeanUtils.copyProperties(source,target);

a.要求属性名相同
b.性能差

  1. 使用插件,例如MapStruct,Simple Object Copy,dozer等

a.MapStruct参考资料

  • https://mapstruct.org/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/391023.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

day59-day60【代码随想录】二刷数组

文章目录前言一、移动零(力扣283)【双指针】二、轮转数组(力扣189)三、寻找数组的中心下标(力扣728)四、和为 K 的子数组(力扣560)五、按奇偶排序数组 II(力扣922&#x…

【SPSS】多因素方差分析详细操作教程(附案例实战)

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

【微信小程序-原生开发】实用教程14 - 列表的分页加载,触底加载更多(含无更多数据的提醒和显示,自定义组件)

此页可在动态列表的基础上完善,也可以单独学习 【微信小程序-原生开发】实用教程10 - 动态列表的新增、修改、删除 https://blog.csdn.net/weixin_41192489/article/details/128835069 效果预览 核心技术 列表的分页加载 skip 跳跃到指定下标开始查询limit 限制返…

Vulnhub系列:SickOS1.1

靶机地址:SickOS1.1渗透思路:信息收集对于目标靶机进行扫描,可以利用nmap或arp-scan -l进行查询,查询到靶机后,探测其开放的端口,常见的端口21、22、80、3306、445等等,对于不同的端口进行不同的…

博途PLC开放式以太网通信之TRCV_C指令编程应用

博途PLC开放式以太网通信TSENG_C指令应用,请参看下面的文章链接: 博途PLC 1200/1500PLC开放式以太网通信TSEND_C通信(UDP)_plc的udp通信_RXXW_Dor的博客-CSDN博客开放式TSEND_C通信支持TCP 、UDP等,关于TSEND_C的TCP通信可以参看下面这篇文章:博途PLC 1200/1500PLC开放式…

存储器分类

存储器(Memory)包括: RAM(Random Access Memory)(计算机运行内存、CPU的L1/L2 Cache等)、 ROM(Read Only Memory)(用于BIOS等固化程序/数据的存储)和 Flash(可用于机械硬盘等)。 存储器&#x…

现代神经网络(VGG),并用VGG16进行实战CIFAR10分类

专栏:神经网络复现目录 本章介绍的是现代神经网络的结构和复现,包括深度卷积神经网络(AlexNet),VGG,NiN,GoogleNet,残差网络(ResNet),稠密连接网络…

Blender Python材质处理入门

本文介绍在 Blender 中如何使用 Python API 获取材质及其属性。 推荐:用 NSDT场景设计器 快速搭建3D场景。 1、如何获取材质 方法1、 获取当前激活的材质 激活材质是当前在材质槽中选择的材料。 如果你选择一个面,则活动材料将更改为分配给选定面的材质…

ceph-ansible部署Ceph Pacific版本集群

文章目录环境规划节点初始化设置ssh免密主机名解析时间同步关闭防火墙部署ceph下载ceph-ansible修改配置文件执行部署验证集群状态扩容mon节点扩容osd节点环境规划 总共9个节点,3个mon节点,6个osd节点,每个osd节点3块50G的osd磁盘 主机名os…

Linux命令系统总结

Linux Linux常用操作_linux基本操作_槑の少年的博客-CSDN博客 help help 命令 :获得 shell 内置命令的帮助信息,常用形式 help cd ls --help 文件夹级 常用参数: cd 绝对路径 :切换路径 cd 相对路径 :切换路径 …

移动web(三)

her~~llo,我是你们的好朋友Lyle,是名梦想成为计算机大佬的男人! 博客是为了记录自我的学习历程,加强记忆方便复习,如有不足之处还望多多包涵!非常欢迎大家的批评指正。 媒体查询 目标:能够根据…

凌恩生物资讯

凌恩生物转录组项目包含范围广,项目经验丰富,人均10年以上项目经验,其中全长转录组测序研究基因结构已经成为发文章的趋势,研究物种包括高粱、玉米、拟南芥、鸡、人和小鼠、毛竹、棉花等。凌恩生物提供专业的全长转录组测序及分析…

【微信小程序】-- 页面导航 -- 编程式导航(二十三)

💌 所属专栏:【微信小程序开发教程】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &…

面向对象的使用

目录1. 类和对象的概念类对象类和对象的关系2. 定义简单的类(只包含方法)3. 创建对象4. self参数5. 类的初始化方法在初始化方法内部定义属性在初始化方法内部接收参数定义属性6. 类的内置方法使用__del__ 方法__str__ 方法7. 身份运算符is 与 区别:8. …

【Copula】考虑风光联合出力和相关性的Copula场景生成(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

文献资源最多的文献下载神器,99.99%的文献都可下载

用对工具事半功倍,查找下载文献用对工具能节约大量的时间和精力去做更多的事情。 文献党下载器(wxdown.org),几乎整合了所有文献数据库资源,涵盖各种文献类型,包含全部学科。文献党下载器整合的资源如&…

Spring-Cloud-Gateway的过滤器的执行顺序问题

过滤器的种类 Spring-Cloud-Gateway中提供了3种类型的过滤器,分别是:路由过滤器、Default过滤器和Global过滤器。 路由过滤器和Default过滤器 路由过滤器和Default过滤器本质上是同一种过滤器,只不过作用范围不一样,路由过滤器…

【水下图像增强】Enhancing Underwater Imagery using Generative Adversarial Networks

原始题目Enhancing Underwater Imagery using Generative Adversarial Networks中文名称使用 GAN 增强水下图像发表时间2018年1月11日平台ICRA 2018来源University of Minnesota, Minneapolis MN文章链接https://arxiv.org/abs/1801.04011开源代码官方:https://gith…

Linux 进程:exec函数簇

目录(1)execl(2)execlp(3)execle(4)execv(5)execvp(6)execve在进程控制中提到,子进程的最大价值在于程序替换,…

Android动态权限获取官方实现之easypermission

Android动态权限获取官方实现之easypermission Android 6.0之后,基于用户隐私和安全考虑,敏感权限都开始采用动态运行时机制获取,于是就出现如果你不向用户申请权限(弹窗,用户选择),有些功能就…