日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

pojo java_Java——POJO总结

發(fā)布時(shí)間:2023/12/20 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pojo java_Java——POJO总结 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一:什么是POJO

“Plain Old Java Object”“簡單java對(duì)象”。POJO的內(nèi)在含義是指那些沒有從任何類繼承、也沒有實(shí)現(xiàn)任何接口,更沒有被其它框架侵入的java對(duì)象。

二:為什么會(huì)有POJO?

主要是Java的開發(fā)者被EJB的繁雜搞怕了,大家經(jīng)過反思,又回歸“純潔老式”的JavaBean,即有無參構(gòu)造函數(shù),每個(gè)字段都有g(shù)etter和setter的java類。

三:POJO的意義

POJO讓開發(fā)者可專注于業(yè)務(wù)邏輯和脫離框架的單元測試。除此之外, 由于POJO并不須要繼承框架的類或?qū)崿F(xiàn)其接口,開發(fā)者能夠極其靈活地搭建繼承結(jié)構(gòu)和建造應(yīng)用。

POJO的意義就在于它的簡單而靈活性,因?yàn)樗暮唵魏挽`活,使得POJO能夠任意擴(kuò)展,從而勝任多個(gè)場合,也就讓一個(gè)模型貫穿多個(gè)層成為現(xiàn)實(shí)。

先寫一個(gè)核心POJO,然后實(shí)現(xiàn)業(yè)務(wù)邏輯接口和持久化接口,就成了Domain Model; UI需要使用時(shí),就實(shí)現(xiàn)數(shù)據(jù)綁定接口,變成VO(View Object)

四:POJO與PO、VO的區(qū)別

PO是指持久對(duì)象(persistant object持久對(duì)象)。

VO是指值對(duì)象或者View對(duì)象(Value Object、View Object)。View Object。

持久對(duì)象實(shí)際上必須對(duì)應(yīng)數(shù)據(jù)庫中的entity(與數(shù)據(jù)庫中的字段一致),實(shí)體類與數(shù)據(jù)庫表中字段不一致時(shí),可以通過如下方法解決:

1. 與數(shù)據(jù)庫表對(duì)應(yīng)的PO.class

@Transient

不是數(shù)據(jù)庫表字段的屬性必須加@Transient注解?(import javax.persistence.Transient)

@Column

數(shù)據(jù)庫表字段與result不一致時(shí)用@Column注解,例如:

@Column(name = "t_schema")

private String schema;

2. 傳入?yún)?shù)與數(shù)據(jù)庫表字段不一致:

@Param

舉個(gè)例子

表字段f_schema與實(shí)體schema不一致 錯(cuò)誤代碼:

public int update(UserExtraInfo info);

表字段f_schema與實(shí)體schema不一致 正確代碼:

public int update(@Param("info") UserExtraInfo info);

所以和POJO有所區(qū)別。比如說POJO是由new創(chuàng)建,由GC回收。但是持久對(duì)象是insert數(shù)據(jù)庫創(chuàng)建,由數(shù)據(jù)庫delete刪除的。基本上持久對(duì)象生命周期和數(shù)據(jù)庫密切相關(guān)。另外持久對(duì)象往往只能存在一個(gè)數(shù)據(jù)庫Connection之中,Connnection關(guān)閉以后,持久對(duì)象就不存在了,而POJO只要不被GC回收,總是存在的。

由于存在諸多差別,因此持久對(duì)象PO(Persistent Object)在代碼上肯定和POJO不同,起碼PO相對(duì)于POJO會(huì)增加一些用來管理數(shù)據(jù)庫entity狀態(tài)的屬性和方法。而ORM追求的目標(biāo)就是要PO在使用上盡量和POJO一致,對(duì)于程序員來說,他們可以把PO當(dāng)做POJO來用,而感覺不到PO的存在。

五: 關(guān)于PO類(持久化類)

PO:Persistent Object 持久化對(duì)象。

持久化對(duì)象,在Hibernate經(jīng)常會(huì)遇見這樣的概念。Hibernate實(shí)體狀態(tài)有三種狀態(tài):瞬時(shí)態(tài),持久態(tài),游離態(tài)。

1)瞬時(shí)態(tài)(暫態(tài)):(Transient)實(shí)體在內(nèi)存中自由存在,它與數(shù)據(jù)庫記錄無關(guān)。po在DB中無記錄(無副本),po和session無關(guān)(手工管理同步)。

eg. Customer customer=New Customer();

customer.setName("eric");這里的Customer對(duì)象與數(shù)據(jù)庫中的數(shù)據(jù)沒有任何關(guān)聯(lián)。

2)持久態(tài)(Persistent):實(shí)體對(duì)象處于Hibernate框架的管理之中。 po在DB中有記錄,po和session有關(guān)(session自動(dòng)管理同步)。

3 ) 游離態(tài)(脫管態(tài)):(Detached)處于Persistent狀態(tài)的實(shí)體對(duì)象,其對(duì)應(yīng)的session實(shí)例關(guān)閉后,那么此時(shí)的實(shí)體對(duì)象處于Detached態(tài)。

po在DB中有記錄,po和session無關(guān)(手工同步管理)

無名態(tài):po處于游離態(tài)時(shí)被垃圾站回收了(垃圾回收機(jī)制),沒有正本,只有DB中的副本。

po處于瞬時(shí)態(tài)時(shí)被垃圾站回收了,則死亡。(唯一可以死亡的狀態(tài))

代碼如下: 需要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{

/**

* 序列號(hào)版本

*/

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;

}

/**

* 設(shè)置 .

*/

public void setUserId(Long userId) {

this.userId = userId;

}

/**

* 獲取 .

*/

@Column(name = "USER_NAME")

public String getUserName() {

return userName;

}

/**

* 設(shè)置 .

*/

public void setUserName(String userName) {

this.userName = userName;

}

}

注釋說明:

1.@Entity //說明此java類是實(shí)體類

2.@org.hibernate.annotations.GenericGenerator(name = "S_USER_ID", strategy = "sequence",parameters

= { @Parameter(name = "sequence", value = "S_USER_ID") }) 導(dǎo)入import org.hibernate.annotations.

Parameter,是自動(dòng)生成oracle序列的方法。調(diào)用創(chuàng)建好的序列:S_USER_ID來自動(dòng)生成。

3.@Id //說明是主鍵(@Id此注解不能省略,不然Hibernate在調(diào)用po進(jìn)行ORM操作的時(shí)候,會(huì)出現(xiàn)錯(cuò)誤,千萬不要

認(rèn)為主鍵不是自增,就不用指定主鍵了) @GeneratedValue(generator = "S_USER_ID") //主鍵的生成方式

4.@Table(name = "USER") //指定數(shù)據(jù)庫對(duì)應(yīng)的表

5.@Column(name = "USER_NAME") //數(shù)據(jù)庫字段和類屬性對(duì)應(yīng)關(guān)系

@Column注解配置項(xiàng)還有很多,具體可以了解javax.persistence的注解說明

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的pojo java_Java——POJO总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。