pojo和vo

 1.含义:
“Plain Old Java Object”“简单java对象”。POJO的内在含义是指那些没有从任何类继承、也没有实现任何接口,更没有被其它框架侵入的java对象。

2.意义

POJO让开发者可专注于业务逻辑和脱离框架的单元测试。除此之外, 由于POJO并不须要继承框架的类或实现其接口,开发者能够极其灵活地搭建继承结构和建造应用。
POJO的意义就在于它的简单而灵活性,因为它的简单和灵活,使得POJO能够任意扩展,从而胜任多个场合,也就让一个模型贯穿多个层成为现实。
先写一个核心POJO,然后实现业务逻辑接口和持久化接口,就成了Domain Model; UI需要使用时,就实现数据绑定接口,变成VO(View Object)

3.POVO

PO是指持久对象(persistant object持久对象)。

VO是指值对象或者View对象(Value Object、View Object)。View Object。

po---常用

持久对象实际上必须对应数据库中的entity(与数据库中的字段一致)

1. 与数据库表对应的PO.class
@Transient
不是数据库表字段的属性必须加@Transient注解​

@transient关键字的作用是需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。

@transient 就是在给某个javabean上需要添加个属性,但是这个属性你又不希望给存到数据库中去,仅仅是做个临时变量,用一下。不修改已经存在数据库的数据的数据结构。

数据库表字段与result不一致时用@Column注解,例如
@Column(name = "t_schema")
private String schema;
 

2. 传入参数与数据库表字段不一致:
@Param
举个例子
表字段f_schema与实体schema不一致 错误代码:  
public int update(UserExtraInfo info);
表字段f_schema与实体schema不一致 正确代码:  
public int update(@Param("info") UserExtraInfo info);
所以和POJO有所区别。比如说POJO是由new创建,由GC回收。但是持久对象是insert数据库创建,由数据库delete删除的。基本上持久对象生命周期和数据库密切相关。另外持久对象往往只能存在一个数据库Connection之中,Connnection关闭以后,持久对象就不存在了,而POJO只要不被GC回收,总是存在的。

由于存在诸多差别,因此持久对象PO(Persistent Object)在代码上肯定和POJO不同,起码PO相对于POJO会增加一些用来管理数据库entity状态的属性和方法。而ORM追求的目标就是要PO在使用上尽量和POJO一致,对于程序员来说,他们可以把PO当做POJO来用,而感觉不到PO的存在。

po类实例:

需要jar包:ejb3-persistence.jar

package com.rcoginion.test;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Table;

import org.springframework.data.annotation.Id;

@Entity
@Table(name = "USER")
public class ContractAttachPO  implements Serializable{

    /**
     * 序列号版本
     */
    private static final long serialVersionUID = 1393027357708703114L;
    
    // Fields
    /**
     * 合同id.
     */
    private Long userId;

    /**
     * 用户名.
     */
    private String userName;
    
    /**
     * 获取 .
     */
    @Id
    @GeneratedValue(generator = "S_USER_ID")
    @Column(name = "USER_ID", precision = 16, scale = 0)
    public Long getUserId() {
        return userId;
    }

    /**
     * 设置 .
     */
    public void setUserId(Long userId) {
        this.userId = userId;
    }

    /**
     * 获取 .
     */
    @Column(name = "USER_NAME")
    public String getUserName() {
        return userName;
    }

    /**
     * 设置 .
     */
    public void setUserName(String userName) {
        this.userName = userName;
    }
}
注释说明:
1.@Entity  //说明此java类是实体类 
 2.@org.hibernate.annotations.GenericGenerator(name = "S_USER_ID", strategy = "sequence",parameters
    = { @Parameter(name = "sequence", value = "S_USER_ID") }) 导入import org.hibernate.annotations.
    Parameter,是自动生成oracle序列的方法。调用创建好的序列:S_USER_ID来自动生成。
3.@Id //说明是主键(@Id此注解不能省略,不然Hibernate在调用po进行ORM操作的时候,会出现错误,千万不要
    认为主键不是自增,就不用指定主键了) @GeneratedValue(generator = "S_USER_ID")  //主键的生成方式
 4.@Table(name = "USER")           //指定数据库对应的表
 5.@Column(name = "USER_NAME")     //数据库字段和类属性对应关系 
   @Column注解配置项还有很多,具体可以了解javax.persistence的注解说明
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值