pojo java_Java——POJO总结

一:什么是POJO

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

二:为什么会有POJO?

主要是Java的开发者被EJB的繁杂搞怕了,大家经过反思,又回归“纯洁老式”的JavaBean,即有无参构造函数,每个字段都有getter和setter的java类。

三:POJO的意义

POJO让开发者可专注于业务逻辑和脱离框架的单元测试。除此之外, 由于POJO并不须要继承框架的类或实现其接口,开发者能够极其灵活地搭建继承结构和建造应用。

POJO的意义就在于它的简单而灵活性,因为它的简单和灵活,使得POJO能够任意扩展,从而胜任多个场合,也就让一个模型贯穿多个层成为现实。

先写一个核心POJO,然后实现业务逻辑接口和持久化接口,就成了Domain Model; UI需要使用时,就实现数据绑定接口,变成VO(View Object)

四:POJO与PO、VO的区别

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

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

持久对象实际上必须对应数据库中的entity(与数据库中的字段一致),实体类与数据库表中字段不一致时,可以通过如下方法解决:

1. 与数据库表对应的PO.class

@Transient

不是数据库表字段的属性必须加@Transient注解​(import javax.persistence.Transient)

@Column

数据库表字段与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类(持久化类)

PO:Persistent Object 持久化对象。

持久化对象,在Hibernate经常会遇见这样的概念。Hibernate实体状态有三种状态:瞬时态,持久态,游离态。

1)瞬时态(暂态):(Transient)实体在内存中自由存在,它与数据库记录无关。po在DB中无记录(无副本),po和session无关(手工管理同步)。

eg. Customer customer=New Customer();

customer.setName("eric");这里的Customer对象与数据库中的数据没有任何关联。

2)持久态(Persistent):实体对象处于Hibernate框架的管理之中。 po在DB中有记录,po和session有关(session自动管理同步)。

3 ) 游离态(脱管态):(Detached)处于Persistent状态的实体对象,其对应的session实例关闭后,那么此时的实体对象处于Detached态。

po在DB中有记录,po和session无关(手工同步管理)

无名态:po处于游离态时被垃圾站回收了(垃圾回收机制),没有正本,只有DB中的副本。

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的注解说明

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

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

相关文章

MATLAB调用C/C++函数的方法

http://item.taobao.com/item.htm?spma1z10.5-c.w4002-9510581626.24.ZO6sko&id43401674106 精通MATLAB混合编程视频讲解 MATLAB各类函数视频讲解 基于MATLAB的高等数学问题求解 MATLAB函数速查视频讲解 面向对象C视频教程 精通MATLAB混编编程demo及PDF QQ&#xff1a…

迁云架构实践

本文着笔介绍IT互联网化为传统企业带来的技术挑战,并对上云架构最佳实践进行了深入介绍,首发于阿里云&《程序员》联合出品的《凌云》杂志。 作者: 王宇德,张文生 云计算作为信息技术领域的一种创新应用模式,自其诞…

最短路最新心得

如果,上面的图,如果用dij算法,那么dist[4] 4, 是得不到正确的结果的, 这个因为dist[3]先被确定是最小,然后用来更新dist[4] 但是存在负权,使得dist[3]更小,但是我们已经把结点3标记为不可用了…

java canvas 缩放图片_java-GWT:放大和缩小画布绘图

我想应用放大和缩小,并在画布上重新绘制对象,以便在最大和最小缩放级别都能获得清晰的视图.我获得了如何执行操作的参考here,因此我已将画布传递给可缩放图像构造函数而不是图像,并按照所有步骤进行操作.我再次在“ mainDraw”方法中重画对象,但没有得到正确的结果.我知道我缺少…

MATLAB中MEX文件的编写与调试

*************************************************** 更多精彩,欢迎进入:http://shop115376623.taobao.com http://item.taobao.com/item.htm?spma1z10.5-c.w4002-9510581626.24.ZO6sko&id43401674106 精通MATLAB混合编程视频讲解 MATLAB各类函数…

数据库设计思考

一:没有完美的数据库设计,只有符合业务的数据库设计! 二:我们的数据库设计,在遵守标准(三大范式)的同时也要考虑客户的体验! 有用户才有天下! 三:数据库设计时…

performSegueWithIdentifier:sender里边的sender是啥意思

performSegueWithIdentifier:sender里边的sender是啥意思啊?怎样用啊? [self performSegueWithIdentifier:"pushSign" sender:self]; [self performSegueWithIdentifier:"pushSign" sender:sender]; [self performSegueWithIdent…

java wrapper怎么运行_如何从智能合约中生成Java Wrapper

在本文中,我们将了解如何直接从智能合约生成Java Wrapper类以与Java中的智能合约进行交互。从智能合约生成Java Wrapper类有不同的方法:1. Web3j命令行工具和solc2. Web3j命令行工具和Truffle构建生成的工件3. web3j-maven-plugin4. web3j-gradle-plugin…

Hive 1.2.1SparkSqoop安装指南

目录 目录 1 1. 前言 1 2. 约定 2 3. 服务端口 2 4. 安装MySQL 2 4.1. 安装MySQL 2 4.2. 创建Hive元数据库 4 5. 安装步骤 5 5.1. 下载Hive 1.2.1二进制安装包 5 5.2. 安装Hive 5 5.3. 安装MySQL-Connector 5 5.4. 修改配置 5 5.4.1. 修改/etc/profile或~/.profile 5 5.4.2. 修…

Matlab与C/C++混合编程调用OpenCV

*************************************************** 更多精彩,欢迎进入:http://shop115376623.taobao.com http://item.taobao.com/item.htm?spma1z10.5-c.w4002-9510581626.24.ZO6sko&id43401674106 精通MATLAB混合编程视频讲解 MATLAB各类函数…

STL--排序与检索

题目 现有N个大理石,每个大理石上写了一个非负整数。首先把各数从小到大排序,然后回答Q个问题。每个问题是否有一个大理石写着某个整数x,如果是,还要回答哪个大理石写着x。排序后的大理石从左到右编写为1-N。(样例中,…

体验LESS CSS 框架

LESS基于NODE.JS的一种框架性语言,它可以更好更快捷的来搭建网站框架结构; 而后LESS 将 CSS 赋予了动态语言的特性,如 变量, 继承,运算, 函数. LESS 既可以在 客户端 上运行 (支持IE 6, Webkit, Firefox)&a…

java添加按钮点击事件_如何为odoo 10中的按钮点击事件添加一个java脚本处理程序?...

我想使用java脚本为header中的按钮创建一个处理程序。下面我视图模型给出:如何为odoo 10中的按钮点击事件添加一个java脚本处理程序?inherit_id"web.assets_backend">rel"stylesheet">my_pet_store_formpetstore.messageformc…

LeetCode(53):Maximum Subarray

Maximum Subarray: Find the contiguous subarray within an array (containing at least one number) which has the largest sum.For example, given the array [−2,1,−3,4,−1,2,1,−5,4],the contiguous subarray [4,−1,2,1] has the largest sum 6. 题意:找…

孩子教育

看了一圈学区房,基本上把浦东各个一流二流学校全看一遍了,大体下来觉得未必非要到一流学校附近买学区房,主要是家庭经济条件不允许,再者我和老公希望孩子在小学培养读书的习惯,而不是天天做试卷。所以一流学校和二流学…

python 程序打包 vscode_使用VScode编写python程序并打包成.exe文件

听说Visual Studio Code(VS Code)的诸多好处,了解了一下果真很喜欢,我喜欢它的缘由主要有3个,一是VS Code开源且跨平台,二是由于其界面很是酷,三是能够知足个人大所属代码需求,除此以外固然还有强大的好奇心…

使用命名空间、头文件和实现文件

*************************************************** 更多精彩,欢迎进入:http://shop115376623.taobao.com *************************************************** 2.3 使用命名空间、头文件和实现文件 使新的throttle类满足程序的需求将是非常…

Permissions for id_rsa are too open

为什么80%的码农都做不了架构师?>>> Last week I was lucky enough to have my laptop upgraded (yay SSD) which meant I needed to configure a new install of OSX Lion. Most of my files are stored online (email, documents, code, etc) but I m…

java看图_看图吧,Java

package salary;import java.awt.*;import javax.swing.*;import java.awt.event.*;import java.text.NumberFormat;public class Salary extends JFrame{//声明标签private JLabel numl;private JLabel basel;private JLabel salel;//声明文本框private JTextField numf;priva…

解决端口占用

tomcat启动时报错: 这说明8080端口已被其他程序占用,先用命令提示符 "netstat -ano" 显示端口,再在结果中找到端口,然后根据其PID再输入"tasklist"命令,在结果中查找其对应程序,就可知…