mybatis po对象是啥意

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis po对象是啥意相关的知识,希望对你有一定的参考价值。

PO是持久化对象。它是对物理数据实体的一种对象表示,它的使用可以简化我们对于物理实体的了解和耦合,简单地讲,就是可以简化对象的数据转换为物理数据的编程。PO的全称是:持久对象(persistant object)。最形象的理解就是一个PO就是数据库中的一条记录。好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象。PO是由一组属性和属性的get和set方法组成。

po(persistent object)就是在Object/Relation Mapping框架中的Entity,po的每个属性基本上都对应数据库表里面的某个字段。完全是一个符合Java Bean规范的纯Java对象,没有增加别的属性和方法。持久对象是由insert数据库创建,由数据库delete删除的。基本上持久对象生命周期和数据库密切相关。

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)
参考技术A 一、PO:persistant object 持久对象,可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作。

二、VO:value object值对象。通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要.个人觉得同DTO(数据传输对象),在web上传递。

三、DAO:data access object 数据访问对象,此对象用于访问数据库。通常和PO结合使用,DAO中包含了各种数据库的操作方法。通过它的方法,结合PO对数据库进行相关的操作。

四、BO:business object 业务对象,封装业务逻辑的java对象,通过调用DAO方法,结合PO,VO进行业务操作。

五、POJO:plain ordinary java object 简单无规则java对象,我个人觉得它和其他不是一个层面上的东西,VO和PO应该都属于它。

O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写。通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据。在O/R Mapping的世界里,有两个基本的也是重要的东东需要了解,即VO,PO。

  VO,值对象(Value Object),PO,持久对象(Persisent Object),它们是由一组属性和属性的get和set方法组成。从结构上看,它们并没有什么不同的地方。但从其意义和本质上来看是完全不同的。

1.VO是用new关键字创建,由GC回收的。

  PO则是向数据库中添加新数据时创建,删除数据库中数据时削除的。并且它只能存活在一个数据库连接中,断开连接即被销毁。

2.VO是值对象,精确点讲它是业务对象,是存活在业务层的,是业务逻辑使用的,它存活的目的就是为数据提供一个生存的地方。

  PO则是有状态的,每个属性代表其当前的状态。它是物理数据的对象表示。使用它,可以使我们的程序与物理数据解耦,并且可以简化对象数据与物理数据之间的转换。

3.VO的属性是根据当前业务的不同而不同的,也就是说,它的每一个属性都一一对应当前业务逻辑所需要的数据的名称。

  PO的属性是跟数据库表的字段一一对应的。

PO对象需要实现序列化接口。

当我在 lldb 中“po”核心数据对象时,x-coredata 路径是啥意思?

【中文标题】当我在 lldb 中“po”核心数据对象时,x-coredata 路径是啥意思?【英文标题】:What does the x-coredata path mean when I 'po' the core data object in lldb?当我在 lldb 中“po”核心数据对象时,x-coredata 路径是什么意思? 【发布时间】:2014-01-10 08:53:49 【问题描述】:

当我在 lldb 中打印核心数据对象的对象描述时,有时会得到以下对象描述:

(lldb) po my_challenge_object (实体:挑战;ID:0x170433460 x-coredata:///Challenge/t52BD558C-A8FE-4064-A8BE-217A837521E52>;数据:...)

如果我稍后打印同一个对象,我有时会看到“x-coredata”路径发生变化。

(实体:挑战;id:0x170433460 x-coredata://50232AB5-7372-4628-9F00-51BDB1A5C96D/Challenge/t52BD558C-A8FE-4064-A8BE-217A837521E52>;数据: ...)

我的问题是,这条路径是什么意思,为什么会发生变化?在这种情况下,添加“50232AB5-7372-4628-9F00-51BDB1A5C96D”可以告诉我关于我的对象的什么信息?

【问题讨论】:

【参考方案1】:

当您第一次打印对象时,它还没有被分配到持久存储区:

(lldb) po my_challenge_object
<Challenge: 0x1700da1d0> (entity: Challenge; id: 0x170433460 <x-coredata:///Challenge/t52BD558C-A8FE-4064-A8BE-217A837521E52> ; data: ...)

这就是托管对象 ID 中冒号后面有三个斜线的原因。

在第二个实例中,它已分配给标识符为“50232AB5-7372-4628-9F00-51BDB1A5C96D”的持久存储。

<Challenge: 0x1700da1d0> (entity: Challenge; id: 0x170433460 <**x-coredata://50232AB5-7372-4628-9F00-51BDB1A5C96D/Challenge/t52BD558C-A8FE-4064-A8BE-217A837521E52**> ; data: ...)

一个托管对象ID URI的结构一般如下:

x-coredata://[Store UUID]/[Entity Name]/[Primary Key]

注意: [Primary Key] 部分是特定于存储的,可能指的是 sqlite 行的 pk 或 XML 或二进制存储中的某些其他标识符。

商店的 UUID 可从商店的元数据字典中获得,或者通过向 NSPersistentStore 的实例询问其标识符来获得:

NSLog(@"Store Identifier: %@", [store identifier]);

【讨论】:

您知道任何深入研究这些数据的技术吗?【参考方案2】:

每个NSManagedObject 都有一个objectID。 您在对象描述中看到的是

[[object objectID] URIRepresentation]

来自objectID的文档:

重要提示:如果尚未保存接收者,则对象 ID 为 保存对象时将更改的临时值。

并来自“核心数据编程指南”:

NSManagedObjectID 对象是托管对象的通用标识符 对象,并为核心数据框架中的唯一性提供基础。一种 托管对象 ID 唯一标识同一托管对象 在单个应用程序中的托管对象上下文之间,以及在 多个应用程序(如在分布式系统中)。和初级一样 数据库中的键,标识符包含所需的信息 准确描述持久存储中的对象,尽管 详细信息不公开。框架完全 封装“外部”信息并呈现干净的对象 面向界面。

您真正需要托管对象 ID 的一种情况是在传递 托管对象从一个托管对象上下文到不同的上下文。

【讨论】:

所以,听起来如果我还没有保存对象,则 URIRepresentation 不应该改变。如果是这样的话,我对 URIRepresentation 发生变化的原因感到困惑。 @kross:这是个好问题。再次查看您的问题,两个对象 ID 看起来都像 临时 ID(比较 ***.com/questions/15354485/… 以分析永久 ID),但实际上我还没有看到像第二个这样的 ID。中间的对象“发生”了什么?你使用嵌套上下文吗? - 另一方面,确切的表示应该无关紧要,也没有记录。

以上是关于mybatis po对象是啥意的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis笔记 - SQL映射类型

mybatis入门截图三

Mybatis 配置resultMap一对多关联映射

mybatis 动态Sql

MyBatis 入门开发 —-输入,输出参数

MyBatis -- generator 逆向工程