- Android笔记(十五)ContentProvider源码浅析
jametang25
andorid
ContentProvider作为四大组件之一,由于业务上用到的地方不多,目前业务是系统界面,属于系统应用,最适合使用ContentProvider来进行少量数据存储,我们业务中涉及到的Settings.system和Settings.Secure等数据库,就是通过ContentProvider来封装、用ContentResolver来访问的//通过ContentResolver来访问Settin
- 展开说说Android之Retrofit详解_使用篇
老梁学Android&HarmonyOS
网络编程androidretrofit网络
Retrofit是由Square公司开发的类型安全HTTP客户端框架,借助动态代理在运行时生成接口实现类,将注解转化为OkHttp请求配置;节省成本通过转换器(Gson/Moshi)自动序列化JSON/XML,内部处理网络请求在主线程返回报文。Retrofit直译是封装、翻版。他就是对okhttp做了进一步封装,方便使用,它底层的所有请求默认走的都是Okhttp。所以使用Retrofit必须依赖o
- 探索适用于鸿蒙原生应用的跨平台开发框架
harmonyos
探索适用于鸿蒙原生应用的跨平台开发框架在移动应用开发领域,跨平台开发框架的出现为开发者带来了极大的便利。本文将介绍几种适用于开发鸿蒙原生应用的跨平台应用开发技术框架。Uni-appUni-app是基于Vue.js开发前端应用的框架,它的优势在于一套代码能编译到iOS、Android、Web以及各种小程序等多个平台。在鸿蒙原生应用开发方面,它借助华为开发者联盟的开发工具和SDK来开发鸿蒙应用。对于熟
- 探索未来Android开发:深度解析JetHub项目
宗廷国Kenyon
探索未来Android开发:深度解析JetHub项目JetHubSampleAppwithJetpackcomponents(LiveData,Navigation,ViewModel)+MVVM+coroutine+singleactivity项目地址:https://gitcode.com/gh_mirrors/je/JetHub随着Android技术的不断演进,开发者们总是在寻找那些能够引领
- 探索Android开发新境界:Kotlin协程实战乐园
黎情卉Desired
探索Android开发新境界:Kotlin协程实战乐园AndroidCoroutinesPlaygroundAndroidCoroutinesPlayground项目地址:https://gitcode.com/gh_mirrors/an/AndroidCoroutinesPlayground在快速迭代的移动开发领域,异步处理和代码结构的清晰性至关重要。今天,我们向您隆重推荐一个极佳的开源项目——
- 开发者视角:一键拉起与快速安装的巧妙运用
tongjiwenzhang
携带参数安装信息可视化大数据androidios
Apptrace技术集成方案SDK集成基础Android集成配置//build.gradle(Module)dependencies{implementation'com.apptrace.sdk:core:3.2.1'implementation'com.apptrace.sdk:deeplink:2.0.0'}//AndroidManifest.xmliOS集成配置//Podfilepod'A
- 7个国产操作系统,你都熟悉吗?
wljslmz
网络技术国产系统
在全球科技竞争加剧的背景下,操作系统作为信息产业的核心“灵魂”,其重要性不言而喻。长期以来,Windows、macOS和Android等国外操作系统主导着全球市场,但它们在某些场景下的封闭性和潜在安全风险,让中国开始加速自主操作系统的研发。尤其是2014年WindowsXP停止支持和2020年Windows7停止服务后,国内对自主操作系统的需求进一步凸显。据统计,2025年中国操作系统市场规模预计
- android launcher3,Android Launcher3 基本功能分析
众卡之友
androidlauncher3
AndroidLauncher3基本功能分析1,界面的布局,从上往下分别为:DeleteDropTarget(应用卸载区域,它是一个DropTarget)Workspace(页面容器,一个页面是一个CellLayout)PageIndicator(指示器,指示workspace当前位于第几个页面)Hotseat(底部图标区域)2,Launcher桌面图标的加载:LauncherApplicatio
- Android的Audio子系统
雷古拉斯
移动操作系统之Android
Android边录边播应用AP(ApplicationProcessor主处理器)DSP(Codec)BP(BasebandProcessor基带处理器,猫)一、AudioTrack播放基本流程1.初始化newAudioTrack完成通路创建,也在MixerThread线程中创建Track。getOutput(以及openOutput)frameworks/av/media/libmedia/Au
- android实践:canvas文字图片旋转显示
汤面不加鱼丸
android前端javascript
问题:如何在手机竖屏模式下将文字/图片旋转显示,即类似横屏方向上显示显示效果:实现:1.文字旋转显示canvas.save();//保存状态入栈canvas.translate(getWidth()>>1,getHeight()>>1);//显示中心PainttitlePaint=newPaint();titlePaint.setColor(Color.WHITE);titlePaint.setT
- AndroidStudio 中虚拟机连接宿主机(本机)服务
崎岖Qiu
服务器运维androidstudioandroid网络ip
如果后端服务在本电脑的localhost:8080的ip和端口上,那么直接将该url配置到安卓代码中,连上的是虚拟机的本地,而非宿主机,导致连接不上跑在本机上的服务解决方法打开cmd使用ipconfig查看本机的ip地址:C:\Users\lyh>ipconfigWindowsIP配置无线局域网适配器本地连接*1:媒体状态............:媒体已断开连接连接特定的DNS后缀.......:
- Appcelerator打包ipa有哪些优势
咕噜企业签名分发-大圣
数据仓库
Appcelerator打包ipa的优势主要包括以下几点:一、跨平台开发能力Appcelerator为开发者提供了一种独特的跨平台开发解决方案,允许他们使用统一的JavaScript代码库来构建适用于iOS和Android等多个平台的应用程序。这种开发模式不仅大大简化了开发流程,还显著减少了开发时间和成本。开发者无需为每个平台分别编写和维护代码,从而避免了重复劳动和潜在的错误。此外,跨平台开发还意
- 《深入理解Android 卷I pdf》资源介绍
郭清然
《深入理解Android卷Ipdf》资源介绍【下载地址】深入理解Android卷Ipdf资源介绍《深入理解Android卷I》是一本深度剖析Android系统源代码的专业书籍,全面解读Framework层、Native层和Application层的核心机制。本书以情景分析的方式,深入探讨Android系统的启动流程、进程管理、内存管理、文件系统及网络安全等关键模块,帮助开发者透彻理解系统架构与原理
- 深入理解Android卷Ipdf资源介绍:全面解析Android系统架构与核心原理
深入理解Android卷Ipdf资源介绍:全面解析Android系统架构与核心原理【下载地址】深入理解Android卷Ipdf资源介绍《深入理解Android卷I》是一本深度剖析Android系统源代码的专业书籍,全面解读Framework层、Native层和Application层的核心机制。本书以情景分析的方式,深入探讨Android系统的启动流程、进程管理、内存管理、文件系统及网络安全等关键
- Android跳转到通话记录界面,android 用Intent打开系统程序
weixin_39883670
1.打开设置主界面Intentintent=newIntent(android.provider.Settings.ACTION_SETTINGS);//系统设置startActivityForResult(intent,0);2.打开网络设置界面(其他设置中的界面同理)Intentintent=newIntent(android.provider.Settings.ACTION_WIFI_SET
- Android跳转到手机系统各个设置界面的方法及其列表
枸杞泡水
Android-基础知识android手机系统设置
android调用拨号盘拨打电话publicvoiddialPhoneNumber(StringphoneNumber){Intentintent=newIntent(Intent.ACTION_DIAL);intent.setData(Uri.parse("tel:"+phoneNumber));if(intent.resolveActivity(getPackageManager())!=nu
- android15 修改默认亮度及关闭自动亮度调节
darling_user
Androidandroid
默认亮度1、先把设备亮度手动调整到对应亮度2、通过adb命令获取对应亮度值adbshellsettingsgetsystemscreen_brightness3、代码上修改默认亮度值SYS/frameworks/base/core/res/res/values/config.xml-102+255SYS/frameworks/base/packages/SettingsProvider/res/v
- android15设备不带闪烁指示灯,去掉设置及日历下的指示灯选项
darling_user
Androidandroid
SYS/vendor/sprd/platform/frameworks/base/core/FrameworkResOverlay/res/values/config.xml-true+falseSYS/vendor/sprd/platform/frameworks/base/core/res/res/values/config.xml-true+false</bool
- 告别UI烦恼,效率飙升!Android UI宝藏库深度解析,让你的APP瞬间惊艳
wylee
uiandroid
前言:AndroidUI开发,你的痛点我懂!各位Android开发路上的朋友们,你们是否也曾被UI开发所困扰?重复造轮子?每次新项目,那些经典的加载动画、弹窗、导航栏,是不是都要从头开始写,或者在旧项目中翻箱倒柜?UI丑陋,缺乏美感?辛辛苦苦实现的功能,却因为UI不够精致,导致用户体验大打折扣,甚至被吐槽“像上个世纪的应用”?效率低下?为了实现一个酷炫的动画效果,不得不投入大量时间去学习复杂的动画
- 网络资源模板--基于Android Studio 实现的食谱助手App
编程乐学
Android网络项目模板androidstudioandroid毕业设计安卓大作业食谱助手健康饮食
目录一、项目简介二、项目演示三、部设计详情(部分)登录页面菜谱页面食物页我的页面四、项目源码一、项目简介根据软件设计的需求进行总结,确定本软件各种功能的实现,并通过以下几个模块来满足该软件基本功能,其中功能模块的分别为:用户注册:新用户输入用户名和密码进行账号的注册。用户登录:已注册的用户输入用户名和密码进行登录。食物:查看不同食物的科普和不宜同食的食物。菜谱:对菜谱进进行查看、收藏、取消收藏。我
- Android 13 接入 MediaSession 指南
Code_onepage
android
Android13接入MediaSession指南一、MediaSession概述传统音乐播放应用架构需优先保障音频后台播放,传统方案依赖独立Service异步加载资源并处理播放控制,通过Binder或广播实现界面通信。扩展通知栏控制需额外构建广播接收器,锁屏交互则依赖AIDL等跨进程技术,多终端协同更导致架构复杂化。MediaSession框架通过C/S架构解耦界面与服务层,核心组件包含Medi
- 安卓多屏互动Presentation
Code_onepage
AndroidJavaandroidandroidstudio
安卓多屏互动Presentation设备系统版本开发者模式拟辅助屏幕功能Presentation显示方式Presentation创建搭建Presentation显示环境绑定Presentation服务数据交互多屏显示性能分析CPU占用内存占用副屏不随主屏幕退出补充设备系统版本Android从4.2开始支持双屏显示,请确保minSdkVersion>=17开发者模式进入设备—设置—关于手机—版本号—
- 真实案例出发,再谈retrofit封装
何小Ai同学
android-基础androidretrofit
原文链接:Anthony的简书博客项目代码:CameloeAnthony/Ant前言在使用了一段时间的Retrofit之后,今天终于在这里讲解到了网络的部分。目前开源的HTTP框架有很多,Volley,AndroidAsyncHttp,以及OkHttp+Retrofit等。而我在自己的使用中选择了Retrofit,这里就从基础到原理,再到实例的方式,讲解我对Retrofit做出的一些封装和使用。来
- Android Camera的预览回调接口PreviewCallback使用
Dawson_Jiang
Android知识整理
原文章:https://blog.csdn.net/lb377463323/article/details/53338045首先定义一个类实现Camera.PreviewCallback接口,然后在它的onPreviewFrame(byte[]data,Cameracamera)方法中即可接收到每一帧的预览数据,也就是参数data。然后使用setPreviewCallback()、setOneSh
- DeepSeek R1 Android本地化部署
Dawson_Jiang
大模型deepseekollamaAI大模型手机部署deepseek
1.概述android手机端部署deepseek一般需要安装termux,ollama,deepseek三个大的步骤原因分析:deepseek等大模型需要类似ollama的工具去运行。ollama有macwindow和linux版本,无Android版本;termux是一个模拟linux环境的Androidapp,在此环境中即可安装运行ollamalinux版本,然后再ollama上面部署运行de
- Android 跨进程通信(IPC)深度技术总结
JT-Blink
Androidandroid
1.概述Android系统基于Linux内核,采用多进程架构设计。每个Android应用默认运行在独立的进程中,拥有独立的虚拟机实例和内存空间。进程间的内存隔离机制保证了系统的稳定性和安全性,但同时也带来了进程间通信的挑战。1.1为什么需要跨进程通信系统架构需求:Android系统服务(如ActivityManagerService、WindowManagerService)运行在system_s
- 移动端测试——如何解决iOS端无法打开弹窗式网页(Webkit)
BoAiB
测试实战问题记录webkit前端
目录一、什么是webkit?1.核心定义2.iOS的特殊限制3.弹窗拦截的逻辑二、为什么iOS必须用WebKit?1.苹果的官方理由2.实际后果3.然而……三、如何解决iOS端无法打开弹窗式网页?1.用户1.1safari浏览器1.2夸克浏览器2.开发者#最近加入了实习,开始了针对实际业务的测试。在移动端测试时,我发现一个比较有趣的现象(被测网站采用弹出式窗口):Android端:浏览器提供弹窗权
- 鸿蒙线程池全揭秘:让你的应用快、稳、省资源
harmonyos
摘要在现代应用开发中,多线程已经成为提升程序性能、优化用户体验的关键手段。尤其是在HarmonyOS(鸿蒙系统)这种强调分布式、并发处理的系统架构中,合理使用多线程不仅可以让程序运行更高效,还能帮助我们处理复杂的后台任务,比如文件下载、数据库操作、网络请求等。引言鸿蒙系统作为面向多设备融合的新一代操作系统,其支持的多线程模型与传统Android十分类似。很多Java的线程操作方法在鸿蒙中依然适用。
- 将Python Tkinter程序转换为手机可运行的Web应用 - 详细教程
随机森林404
python智能手机前端
前言作为一名Python开发者,你可能已经使用Tkinter创建了一些桌面GUI应用。但是如何让这些应用也能在手机上运行呢?本教程将详细介绍如何将基于Tkinter的Python程序转换为手机可访问的Web应用,让你的应用随时随地可用!一、为什么需要转换?Tkinter是Python的标准GUI库,但它主要针对桌面环境。移动设备(Android/iOS)上无法直接运行Tkinter程序,主要原因有
- Android Studio flutter项目运行、打包时间太长
小蜜蜂嗡嗡
androidstudioflutterandroid
AndroidStudio:AndroidStudioMeerkatFeatureDrop|2024.3.2Patch1flutterSdk:3.29.3系统:windowsfluttersdk从2.10.5升级到3.29.3,但是Flutter3.16开始新增了使用Gradle声明式plugins{}块,gradle文件配置方式改变了。而国内的阿里云、华为云等镜像仓库的更新并不是与google(
- PHP,安卓,UI,java,linux视频教程合集
cocos2d-x小菜
javaUIPHPandroidlinux
╔-----------------------------------╗┆
- 各表中的列名必须唯一。在表 'dbo.XXX' 中多次指定了列名 'XXX'。
bozch
.net.net mvc
在.net mvc5中,在执行某一操作的时候,出现了如下错误:
各表中的列名必须唯一。在表 'dbo.XXX' 中多次指定了列名 'XXX'。
经查询当前的操作与错误内容无关,经过对错误信息的排查发现,事故出现在数据库迁移上。
回想过去: 在迁移之前已经对数据库进行了添加字段操作,再次进行迁移插入XXX字段的时候,就会提示如上错误。
&
- Java 对象大小的计算
e200702084
java
Java对象的大小
如何计算一个对象的大小呢?
 
- Mybatis Spring
171815164
mybatis
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
CustomerService userService = (CustomerService) ac.getBean("customerService");
Customer cust
- JVM 不稳定参数
g21121
jvm
-XX 参数被称为不稳定参数,之所以这么叫是因为此类参数的设置很容易引起JVM 性能上的差异,使JVM 存在极大的不稳定性。当然这是在非合理设置的前提下,如果此类参数设置合理讲大大提高JVM 的性能及稳定性。 可以说“不稳定参数”
- 用户自动登录网站
永夜-极光
用户
1.目标:实现用户登录后,再次登录就自动登录,无需用户名和密码
2.思路:将用户的信息保存为cookie
每次用户访问网站,通过filter拦截所有请求,在filter中读取所有的cookie,如果找到了保存登录信息的cookie,那么在cookie中读取登录信息,然后直接
- centos7 安装后失去win7的引导记录
程序员是怎么炼成的
操作系统
1.使用root身份(必须)打开 /boot/grub2/grub.cfg 2.找到 ### BEGIN /etc/grub.d/30_os-prober ### 在后面添加 menuentry "Windows 7 (loader) (on /dev/sda1)" { 
- Oracle 10g 官方中文安装帮助文档以及Oracle官方中文教程文档下载
aijuans
oracle
Oracle 10g 官方中文安装帮助文档下载:http://download.csdn.net/tag/Oracle%E4%B8%AD%E6%96%87API%EF%BC%8COracle%E4%B8%AD%E6%96%87%E6%96%87%E6%A1%A3%EF%BC%8Coracle%E5%AD%A6%E4%B9%A0%E6%96%87%E6%A1%A3 Oracle 10g 官方中文教程
- JavaEE开源快速开发平台G4Studio_V3.2发布了
無為子
AOPoraclemysqljavaeeG4Studio
我非常高兴地宣布,今天我们最新的JavaEE开源快速开发平台G4Studio_V3.2版本已经正式发布。大家可以通过如下地址下载。
访问G4Studio网站
http://www.g4it.org
G4Studio_V3.2版本变更日志
功能新增
(1).新增了系统右下角滑出提示窗口功能。
(2).新增了文件资源的Zip压缩和解压缩
- Oracle常用的单行函数应用技巧总结
百合不是茶
日期函数转换函数(核心)数字函数通用函数(核心)字符函数
单行函数; 字符函数,数字函数,日期函数,转换函数(核心),通用函数(核心)
一:字符函数:
.UPPER(字符串) 将字符串转为大写
.LOWER (字符串) 将字符串转为小写
.INITCAP(字符串) 将首字母大写
.LENGTH (字符串) 字符串的长度
.REPLACE(字符串,'A','_') 将字符串字符A转换成_
- Mockito异常测试实例
bijian1013
java单元测试mockito
Mockito异常测试实例:
package com.bijian.study;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.
- GA与量子恒道统计
Bill_chen
JavaScript浏览器百度Google防火墙
前一阵子,统计**网址时,Google Analytics(GA) 和量子恒道统计(也称量子统计),数据有较大的偏差,仔细找相关资料研究了下,总结如下:
为何GA和量子网站统计(量子统计前身为雅虎统计)结果不同?
首先:没有一种网站统计工具能保证百分之百的准确出现该问题可能有以下几个原因:(1)不同的统计分析系统的算法机制不同;(2)统计代码放置的位置和前后
- 【Linux命令三】Top命令
bit1129
linux命令
Linux的Top命令类似于Windows的任务管理器,可以查看当前系统的运行情况,包括CPU、内存的使用情况等。如下是一个Top命令的执行结果:
top - 21:22:04 up 1 day, 23:49, 1 user, load average: 1.10, 1.66, 1.99
Tasks: 202 total, 4 running, 198 sl
- spring四种依赖注入方式
白糖_
spring
平常的java开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的类中。依赖注入的另一种说法是“控制反转”,通俗的理解是:平常我们new一个实例,这个实例的控制权是我
- angular.injector
boyitech
AngularJSAngularJS API
angular.injector
描述: 创建一个injector对象, 调用injector对象的方法可以获得angular的service, 或者用来做依赖注入. 使用方法: angular.injector(modules, [strictDi]) 参数详解: Param Type Details mod
- java-同步访问一个数组Integer[10],生产者不断地往数组放入整数1000,数组满时等待;消费者不断地将数组里面的数置零,数组空时等待
bylijinnan
Integer
public class PC {
/**
* 题目:生产者-消费者。
* 同步访问一个数组Integer[10],生产者不断地往数组放入整数1000,数组满时等待;消费者不断地将数组里面的数置零,数组空时等待。
*/
private static final Integer[] val=new Integer[10];
private static
- 使用Struts2.2.1配置
Chen.H
apachespringWebxmlstruts
Struts2.2.1 需要如下 jar包: commons-fileupload-1.2.1.jar commons-io-1.3.2.jar commons-logging-1.0.4.jar freemarker-2.3.16.jar javassist-3.7.ga.jar ognl-3.0.jar spring.jar
struts2-core-2.2.1.jar struts2-sp
- [职业与教育]青春之歌
comsci
教育
每个人都有自己的青春之歌............但是我要说的却不是青春...
大家如果在自己的职业生涯没有给自己以后创业留一点点机会,仅仅凭学历和人脉关系,是难以在竞争激烈的市场中生存下去的....
&nbs
- oracle连接(join)中使用using关键字
daizj
JOINoraclesqlusing
在oracle连接(join)中使用using关键字
34. View the Exhibit and examine the structure of the ORDERS and ORDER_ITEMS tables.
Evaluate the following SQL statement:
SELECT oi.order_id, product_id, order_date
FRO
- NIO示例
daysinsun
nio
NIO服务端代码:
public class NIOServer {
private Selector selector;
public void startServer(int port) throws IOException {
ServerSocketChannel serverChannel = ServerSocketChannel.open(
- C语言学习homework1
dcj3sjt126com
chomework
0、 课堂练习做完
1、使用sizeof计算出你所知道的所有的类型占用的空间。
int x;
sizeof(x);
sizeof(int);
# include <stdio.h>
int main(void)
{
int x1;
char x2;
double x3;
float x4;
printf(&quo
- select in order by , mysql排序
dcj3sjt126com
mysql
If i select like this:
SELECT id FROM users WHERE id IN(3,4,8,1);
This by default will select users in this order
1,3,4,8,
I would like to select them in the same order that i put IN() values so:
- 页面校验-新建项目
fanxiaolong
页面校验
$(document).ready(
function() {
var flag = true;
$('#changeform').submit(function() {
var projectScValNull = true;
var s ="";
var parent_id = $("#parent_id").v
- Ehcache(02)——ehcache.xml简介
234390216
ehcacheehcache.xml简介
ehcache.xml简介
ehcache.xml文件是用来定义Ehcache的配置信息的,更准确的来说它是定义CacheManager的配置信息的。根据之前我们在《Ehcache简介》一文中对CacheManager的介绍我们知道一切Ehcache的应用都是从CacheManager开始的。在不指定配置信
- junit 4.11中三个新功能
jackyrong
java
junit 4.11中两个新增的功能,首先是注解中可以参数化,比如
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runn
- 国外程序员爱用苹果Mac电脑的10大理由
php教程分享
windowsPHPunixMicrosoftperl
Mac 在国外很受欢迎,尤其是在 设计/web开发/IT 人员圈子里。普通用户喜欢 Mac 可以理解,毕竟 Mac 设计美观,简单好用,没有病毒。那么为什么专业人士也对 Mac 情有独钟呢?从个人使用经验来看我想有下面几个原因:
1、Mac OS X 是基于 Unix 的
这一点太重要了,尤其是对开发人员,至少对于我来说很重要,这意味着Unix 下一堆好用的工具都可以随手捡到。如果你是个 wi
- 位运算、异或的实际应用
wenjinglian
位运算
一. 位操作基础,用一张表描述位操作符的应用规则并详细解释。
二. 常用位操作小技巧,有判断奇偶、交换两数、变换符号、求绝对值。
三. 位操作与空间压缩,针对筛素数进行空间压缩。
&n
- weblogic部署项目出现的一些问题(持续补充中……)
Everyday都不同
weblogic部署失败
好吧,weblogic的问题确实……
问题一:
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: URL [zip:E:/weblogic/user_projects/domains/base_domain/serve
- tomcat7性能调优(01)
toknowme
tomcat7
Tomcat优化: 1、最大连接数最大线程等设置
<Connector port="8082" protocol="HTTP/1.1"
useBodyEncodingForURI="t
- PO VO DAO DTO BO TO概念与区别
xp9802
javaDAO设计模式bean领域模型
O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写。通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据。在O/R Mapping的世界里,有两个基本的也是重要的东东需要了解,即VO,PO。
它们的关系应该是相互独立的,一个VO可以只是PO的部分,也可以是多个PO构成,同样也可以等同于一个PO(指的是他们的属性)。这样,PO独立出来,数据持