Java web引导篇(一):完全理解javabean、entity、VO、POJO、PO、DTO 、DO 和 BO、DAO

(1)Javabean

   为什么先说javabean呢?因为最开始学java web的时候,很多人都是从JSP学起的,从而开始认识 这种特殊的类:只包含私有属性,和set、get方法的类。而这种类,就是本篇所讲的重点。

ps:博主会尽量减少概念性的话语,多用白话文来解释,篇幅可能较长,但理解起来很容易

javabean是特殊的Java类,它与其它Java类相比而言独一无二的特征:
 ⚪ 提供一个默认的无参构造函数。
 ⚪ 需要被序列化并且实现了Serializable接口。
 ⚪ 可能有一系列可读写属性。
 ⚪ 可能有一系列的"getter"或"setter"方法。

(2)entity

entity:实体类。
  我们都是知道java是很接近人类语言的一门“编程语言”,需要什么东西,去new一个对象就好了。但是真正去用的时候,往往需要一个实体,比如说创建一个学生对象,如果没有实体,将会是这样:

Object student = new Object();

这明明就是一个任意对象,只是给它起了一个 “student”的名字,没有姓名,没有年龄,什么都不是。
(如果不知道什么是Object,建议先去了解一下java中的Object)

所以说,要先定义一个实体:

public class Student {
    private String name;
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

有了这个实体以后,再可以创建一个学生对象:

Student student = new Student();

这个实体中有"姓名"和"年龄"的属性,你才可以给实体对象设置姓名年龄。

而“Student”这个java类,就是一个实体类
(实质是一个简化的javabean → 只有私有属性加 set、get方法)


(3)VO、POJO、PO、DTO、DO

   有了javabean和entity的认识,再认识vo、pojo……就方便多了,它们都是通过这种“特殊的java类”演化而来,只是其中有细微的个别差异。

VO:表现对象 ---- value object
  通常是Web向模板渲染引擎层传输的对象。再说白一点就是前端与后端交互的对象。
举个栗子,vo的两种用法:
   后端返回前端:有时前端给后端传一个属性,后端要返回一堆的东西,这一堆东西又分布在很多张表里面,这时可以把需要返回的属性封装成一个vo类,返回给前端就可以了
   前端请求后端:前端请求后端接口,可能会传很多属性,比如注册页,多的有十几个属性,后端如果每个都单独接收,就太麻烦了,这时就把属性封装成一个vo类,所有的属性都在vo里面,后端只需要接收这个vo就可以了

POJO:简单java对象 ---- plain ordinary java object
  只包含private修饰的属性和与之对应的set、get方法。没有继承,没有接口,没有注解,没有被其它java框架入侵。(有时会直接做为与数据表一一对应的映射类)

PO:持久化对象 ---- Persistent Object
  一般与数据库中,表结构形成一一对应的映射关系。

DTO:数据传输对象 ---- data transfer object
  数据传输对象,Service向外传输的对象

DO:领域对象 ---- Domain Object
  从现实世界中抽象出来的有形或无形的业务实体
(自黑时刻:什么场景使用本人其实也不知道,甚至这概念都不太懂,查了不少资料就他么这一句话!)

自我总结一波:这5种叫法实质内容都差不多,只是不同的业务场景使用不同的名字,能使整个项目更加清晰。

(4)BO、DAO

BO:业务对象 ---- business object
由Service层输出的封装业务逻辑的对象,没啥好解释的,说到底就是解耦吧。

DAO:数据访问对象 ---- data access object
持久化的操作,数据库的增删改查,一般以接口的形式存在。


博客推荐:
DAO,Service,BO的关系 我用的ssm架构就是这篇博客中所说的模式1
阿里巴巴Java开发手册中的DO、DTO、BO、AO、VO、POJO定义


如有错误的地方,麻烦指出,谢谢!?

<think>好的,我现在需要回答用户关于Java开发中DAO、Bean、POJOEntity在IntelliJ IDEA中的区别的问题。首先,我得确保自己对这些术语有清晰的理解,然后结合IDEA的环境来解释它们的实际应用。 首先,DAO,即数据访问对象。记得DAO模式主要是用来封装对数据库的操作,比如增删改查。在项目中,DAO层通常包含接口实现类,用于分离业务逻辑数据存取逻辑。在IDEA中,可能会用JPA或者MyBatis这样的框架,这时候DAO类通常会使用注解如@Repository,或者通过Mapper接口来定义。 接下来是Bean。Bean在Java中通常指符合特定规范的Java类,比如有无参构造、属性私有化、通过gettersetter访问。不过在Spring框架中,Bean的范围更广,被IoC容器管理的对象都称为Bean,不管是Service、Component还是Repository。在IDEA里,用@Component、@Service等注解的类都会被Spring管理为Bean,可以通过依赖注入使用。 然后是POJO,即简单的Java对象,没有继承特定的类或实现特定的接口,通常用来承载数据。POJO不依赖于任何框架,比如个User类,只有属性对应的getter、setter。在IDEA中,POJO可能被放在model或domain包下,作为数据传输的对象。 Entity般指与数据库表映射的类,比如JPA中的@Entity注解标记的类。Entity通常ORM框架相关,每个实例对应数据库中的行。在IDEA中使用JPA时,Entity类会有@Entity、@Table、@Id等注解,定义与数据库表的结构对应。 现在需要区分这些概念在项目中的位置用途。比如,Entity属于数据模型层,与数据库表直接对应;DAO属于数据访问层,处理数据库操作;POJO是普通的Java对象,可能用于各层数据传输;而Bean是Spring管理的对象,可能涵盖Service、DAO等。 在IntelliJ IDEA中,这些组件会有不同的目录结构。比如,Entity可能放在entity或model包下,DAO放在repository或dao包,POJO可能放在dto或model里,而Bean根据功能放在不同的包如service、component等。IDEA的框架支持,比如Spring插件,能够自动识别这些注解,并提供代码提示依赖注入的支持。 用户可能混淆这些概念,特别是在Spring项目中,因为Entity也可能被作为Bean管理,但它们的职责不同。需要明确每个术语的设计目的使用场景。例如,Entity关注数据持久化结构,DAO关注数据访问逻辑,POJO是简单的数据传输载体,Bean是Spring容器管理的组件。 可能还需要举例说明,比如个用户管理系统:UserEntity对应数据库表,UserDao或UserRepository处理数据库操作,User作为POJO在业务层传输数据,而UserService作为Bean处理业务逻辑。在IDEA中,这些类会被组织在不同的包,利用不同的注解框架功能。 最后,检查是否有遗漏或错误。比如,确认POJOBean的区别,是否所有Bean都是POJO?不定,Bean需要符合Spring的规范,而POJO更简单。同时,Entity通常是POJO种,但带有ORM注解。需要明确这些关系,避免用户混淆。</think>在Java开发中,DAO、Bean、POJOEntity是不同设计模式技术场景下的核心概念。以下是它们在IntelliJ IDEA中的区别应用场景: --- ### 1. **POJO (Plain Old Java Object)** - **定义**:简单的Java对象,不依赖任何框架或接口,仅包含属性对应的getter/setter方法。 - **用途**:作为数据传输对象(DTO)或领域模型。 - **IDEA中的表现**:通常位于`model`或`dto`包中,无特殊注解。 - **示例**: ```java public class User { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } ``` --- ### 2. **Entity** - **定义**:与数据库表结构映射的Java类,通常通过ORM框架(如JPA/Hibernate)实现持久化。 - **用途**:表示数据库中的实体,每个实例对应表中的行。 - **IDEA中的表现**:位于`entity`包,使用`@Entity`、`@Table`、`@Id`等注解。 - **示例**: ```java @Entity @Table(name = "users") public class UserEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; // getter/setter } ``` --- ### 3. **DAO (Data Access Object)** - **定义**:封装数据库操作的接口或类,隔离业务逻辑与数据存取逻辑。 - **用途**:执行CRUD操作,如查询、插入、更新。 - **IDEA中的表现**:位于`dao`或`repository`包,使用`@Repository`注解(Spring)或`@Mapper`(MyBatis)。 - **示例**(Spring Data JPA): ```java @Repository public interface UserRepository extends JpaRepository<UserEntity, Long> { UserEntity findByName(String name); } ``` --- ### 4. **Bean** - **定义**:由Spring IoC容器管理的对象,需符合JavaBean规范(无参构造、属性私有化、通过getter/setter访问)。 - **用途**:作为组件(如Service、Controller)或配置类。 - **IDEA中的表现**:使用`@Component`、`@Service`、`@Controller`等注解,位于`service`、`controller`等包。 - **示例**: ```java @Service public class UserService { @Autowired private UserRepository userRepository; public UserEntity getUser(String name) { return userRepository.findByName(name); } } ``` --- ### 关键区别总结 | 概念 | 职责 | 依赖框架 | IDEA中的典型位置 | |---------|---------------------|----------------|----------------------| | POJO | 数据传输/领域模型 | 无 | `model`, `dto` | | Entity | 数据库表映射 | JPA/Hibernate | `entity` | | DAO | 数据操作 | Spring/MyBatis | `dao`, `repository` | | Bean | 组件管理 | Spring | `service`, `config` | --- ### IntelliJ IDEA中的实践 1. **Entity**:通过JPA插件自动生成表结构或逆向工程。 2. **DAO**:利用Spring Data JPA或MyBatis插件简化接口实现。 3. **Bean**:依赖注入(`@Autowired`)AOP功能通过IDEA的Spring支持实现[^1]。 4. **POJO**:可通过Lombok插件简化getter/setter代码。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值