微信扫一扫,移动浏览光盘
简介
Hibernate持久层框架是优秀的解决对象关系不匹配问题的解决方案,
它使得持久层开发人员可以方便地解决对象关系映射问题。另外,
Hibernate在性能上也提供了许多优化策略,接口简单,操作灵活,具有可
扩展性,对JDBC仅做了轻量级封装,而且,多种框架已经显式地对
Hibernate提供了支持的接口。Hibernate已成为当前Java世界最流行的持
久层框架之一。
本书共分16章,内容包括:使用Hibernate的对象关系映射,使用
Hibernate进行对象保存、更新、删除、读取操作,对象检索,事务处理,
二级缓存,查询缓存,事件框架和拦截器的使用;还介绍了Hibernate官方
网站的推荐项目Hibernate Annotations、Hibernate Validators、
Hibernate Tools和Hibernate Search以及与Spring结合使用的方法。本书
循序渐进地指导初学者从入门到较全面地掌握Hibernate的高级特性,以及
结合其他技术使用Hibernate进行项目开发,内容全面,案例清晰,实践性
强。
本书适合Hibernate的入门者学习使用,同时也适合对Hibernate有一
定了解的读者在项目开发时进行查阅。
目录
第1章 为什么使用hibernate . 1
1.1 持久层 2
1.1.1 应用程序的分层结构 2
1.1.2 持久化技术 3
1.2 orm简介 4
1.3 使用jdbc编程 4
1.4 使用jdbc和hibernate的对比 7
1.4.1 carcompany项目分析 7
1.4.2 使用jdbc实现项目与使用hibernate实现项目 9
1.4.3 关联和继承问题 12
1.4.4 数据库表更改问题 16
1.5 hibernate的优点 17
1.6 小结 18
第2章 hibernate入门程序 19
2.1 资源下载和预备环境 19
2.1.1 预备知识 19
2.1.2 资源下载 20
2.1.3 环境预备 21
2.2 basiccar项目 24
2.2.1 basiccar项目描述 24
.2.2.2 建立数据库 24
2.2.3 建立项目 24
2.3 pojo文件 26
2.4 映射文件 27
2.4.1 basiccar.hbm.xml内容 27
2.4.2 映射文件内容介绍 28
2.5 配置文件 29
2.5.1 hibernate.cfg.xml内容 29
2.5.2 配置文件内容介绍 30
2.6 测试项目 31
2.6.1 test.java代码 31
2.6.2 插入、更新、查询和删除 33
2.7 小结 37
第3章 hibernate原理解析 39
3.1 hibernate的常用接口及包 39
3.1.1 hibernate的常用接口 39
3.1.2 hibernate的包 42
3.2 hibernate体系结构和工作原理 43
3.2.1 hibernate体系结构 43
3.2.2 hibernate工作原理 44
3.3 hibernate的依赖技术 46
3.3.1 java反射机制、cglib和javassist 46
3.3.2 xml文件及其解析器dom4j 52
3.3.3 antlr 54
3.4 hibernate的内部实现 58
3.4.1 session.save()的内部实现 58
3.4.2 session.flush()的内部实现 61
3.4.3 session.load()的内部实现 65
3.4.4 query(查询)的内部实现 69
3.5 小结 72
第4章 对象关系映射 73
4.1 hibernate的对象识别方法 73
4.1.1 java和关系数据库的对象识别方法 74
4.1.2 hibernate的对象识别方法 76
4.2 映射代理主键、单个自然主键和复合自然主键 76
4.2.1 映射代理主键 76
4.2.2 映射单个自然主键 78
4.2.3 映射复合自然主键 78
4.3 hibernate的映射类型 85
4.3.1 hibernate内置类型 85
4.3.2 hibernate集合类型和用户自定义类型 88
4.4 继承关系映射 88
4.4.1 每个子类一个数据表 90
4.4.2 每个类一个数据表 92
4.4.3 共享一个数据表 94
4.5 关联关系映射 97
4.5.1 多对一 97
4.5.2 一对一 107
4.5.3 多对多 113
4.6 小结 121
第5章 对数据的简单操作 123
5.1 hibernate数据读写操作 123
5.2 进一步理解session 125
5.2.1 session读操作的实现 126
5.2.2 session写操作的实现 127
5.3 java对象的三种状态 129
5.4 对session的插入、更新、删除、载入 131
5.4.1 对session执行save操作 133
5.4.2 对session执行update操作 137
5.4.3 对session执行delete操作 138
5.4.4 对session执行get、load操作 139
5.5 hql检索方式 139
5.5.1 hibernate 提供多种检索方式 139
5.5.2 hql检索方式 139
5.5.3 query接口 140
5.5.4 hql基本语法 142
5.5.5 在hql语句中绑定参数 148
5.5.6 限制查询返回的数目 152
5.5.7 在映射文件中定义命名hql查询语句 152
5.5.8 sql检索方式 153
5.6 小结 156
第6章 hibernate事务与并发处理 157
6.1 hibernate事务 157
6.1.1 什么是事务 157
6.1.2 hibernate的事务 158
6.1.3 使用hibernate事务 159
6.1.4 transaction接口 162
6.1.5 同步session和数据库 163
6.2 并发带来的问题 164
6.2.1 更新丢失(lost update) 164
6.2.2 脏读(dirty read) 165
6.2.3 不可重复读(unrepeatable read) 166
6.2.4 幻读(phantom read) 166
6.3 避免并发冲突的三种方案 167
6.3.1 设置数据库隔离级别 170
6.3.2 乐观锁 172
6.3.3 悲观锁 177
6.4 小结 179
第7章 高级对象关系映射 181
7.1 使用动态类 181
7.1.1 使用动态类的对象关系映射 181
7.1.2 使用动态类的数据存取 183
7.2 使用组件[component] 185
7.2.1 实体和值的概念 185
7.2.2 组件[component] 185
7.2.3 动态组件[dynamic-component] 188
7.3 映射值类型的集合 190
7.3.1 使用值类型集合的例子 191
7.3.2 各种集合元素 193
7.3.3 映射component类型集合 201
7.3.4 排序 205
7.4 用户自定义数据类型 206
7.4.1 使用usertype接口的例子 206
7.4.2 usertype包的其他接口 211
7.5 一个持久化类对应多张表 212
7.5.1 对象关系映射 212
7.5.2 数据存取 214
7.6 小结 216
第8章 高级数据检索 217
8.1 qbc数据检索 217
8.1.1 qbc查询主要类 219
8.1.2 使用expression类和example类设置查询条件 223
8.1.3 使用qbc各种检索例子 226
8.2 连接查询 231
8.2.1 连接定义 231
8.2.2 hql、criteria对连接的支持 235
8.2.3 使用fetch和不使用fetch的区别 239
8.3 检索策略 240
8.3.1 什么时候载入 240
8.3.2 如何检索 241
8.3.3 类级别的延迟加载 242
8.3.4 关联实体的载入策略 244
8.3.5 关联集合的载入策略 248
8.3.6 batch载入策略 252
8.4 小结 254
第9章 hibernate的二级缓存和查询缓存 255
9.1 二级缓存 256
9.1.1 hibernate的缓存结构.. 256
9.1.2 选择二级缓存策略 257
9.1.3 缓存提供者 258
9.2 使用二级缓存 264
9.2.1 使用二级缓存的步骤 264
9.2.2 对类对象进行缓存 265
9.2.3 对集合进行缓存 268
9.3 查询缓存 272
9.3.1 使用查询缓存 272
9.3.2 使用查询缓存的注意事项 275
9.4 管理二级缓存 277
9.4.1 缓存模式 278
9.4.2 清除缓存对象 278
9.5 hibernate统计机制 279
9.5.1 hibernate统计机制statistics 279
9.5.2 与二级缓存相关的统计信息 281
9.6 小结 283
第10章 hibernate拦截器和事件框架 285
10.1 hibernate拦截器 285
10.1.1 interceptor接口 286
10.1.2 使用interceptor拦截器 289
10.2 hibernate事件框架 300
10.2.1 实现自定义监听器 301
10.2.2 注册监听器 303
10.3 小结 305
第11章 hibernate annotations应用 307
11.1 hibernate annotations简介 307
11.1.1 ejb介绍 308
11.1.2 启用元数据注释 310
11.1.3 jpa介绍 313
11.1.4 hibernate annotations介绍 313
11.2 建立一个hibernate annotation项目 314
11.2.1 环境准备 314
11.2.2 在basiccar项目中使用注释 315
11.3 使用注释映射对象关系 318
11.3.1 映射实体和属性 318
11.3.2 映射类型 319
11.3.3 映射主键 320
11.3.4 继承关系映射 323
11.3.5 关联关系映射 326
11.3.6 映射组件 332
11.3.7 乐观锁 335
11.4 使用注释映射查询 335
11.4.1 映射命名hql查询 335
11.4.2 映射命名sql查询 336
11.4.3 使用过滤器 337
11.5 小结 338
第12章 hibernate验证器 339
12.1 新建一个hibernate 验证器项目 340
12.1.1 环境准备 340
12.1.2 在basiccar项目中使用约束 341
12.2 验证器框架 345
12.2.1 org.hibernate.validator包 345
12.2.2 org.hibernate.validator.event包 346
12.2.3 org.hibernate.validator.interpolator包 347
12.2.4 错误信息资源包 347
12.3 内键约束 347
12.4 错误信息 349
12.4.1 资源绑定 349
12.4.2 自定义错误信息 353
12.5 编写自定义约束 354
12.6 验证关联对象 356
12.7 结合xml映射文件使用约束 358
12.7.1 增加回滚事务处理 358
12.7.2 注册验证器事件监听器 360
12.8 小结 361
第13章 hibernate tools介绍 363
13.1 hibernate tools功能 363
13.2 hibernate tools安装 364
13.3 创建hibernate配置文件 368
13.4 创建hibernate控制台配置 371
13.5 创建hibernate逆向工程文件 373
13.5.1 创建逆向工程文件的步骤 373
13.5.2 hibernate逆向工程文件编辑器 375
13.6 使用逆向工程生成pojo类和映射文件 380
13.6.1 生成pojo类和映射文件的步骤 380
13.6.2 进一步控制逆向工程 385
13.7 控制映射文件生成pojo类 390
13.8 hibernate tools的各个视图 392
13.9 动态执行hql语句 393
13.10 小结 395
第14章 hibernate search 397
14.1 lucene介绍 398
14.1.1 什么是lucene 398
14.1.2 lucene的基本原理 398
14.1.3 lucene的技术实现 400
14.1.4 索引的主要类 403
14.1.5 搜索的主要类 404
14.1.6 一个简单使用lucene的例子 404
14.2 hibernate search介绍 410
14.2.1 hibernate search的优点 410
14.2.2 hibernate search的使用模式 411
14.2.3 hibernate search包 413
14.3 第一个hibernate search项目 415
14.3.1 环境准备 415
14.3.2 basiccar例子 415
14.4 建立实体和索引的映射 422
14.4.1 基本映射 422
14.4.2 嵌入和关联实体映射 424
14.4.3 使用@boost进行加权操作 432
14.4.4 类型转换桥bridge 434
14.5 配置 435
14.5.1 目录配置 435
14.5.2 worker配置 437
14.5.3 reader策略配置 437
14.5.4 启动自动索引 437
14.6 查询 438
14.6.1 setcriteriaquery()设置criteria 438
14.6.2 setindexprojection()对结果进行投影 439
14.6.3 setsort()排序 440
14.6.4 多种query对象的使用 443
14.7 小结 444
第15章 spring和hibernate整合 445
15.1 spring简介 445
15.1.1 应用程序框架的概念 446
15.1.2 spring总体框架 447
15.1.3 ioc控制反转和依赖注入 449
15.1.4 aop 面向方面编程 454
15.2 结合spring和hibernate的例子 460
15.2.1 环境 461
15.2.2 项目代码 461
15.3 主要类解析 466
15.3.1 hibernatetemplate类 466
15.3.2 hibernatedaosupport类 469
15.4 对hibernate进行事务管理 471
15.4.1 spring事务 471
15.4.2 编程式事务 471
15.4.3 声明式事务 473
15.5 小结 478
第16章 使用spring、struts、hibernate的实例 481
16.1 项目介绍 482
16.1.1 项目功能 482
16.1.2 项目技术 485
16.2 整体框架设计 488
16.2.1 系统的总体框架 488
16.2.2 系统的各个包 490
16.3 struts在项目中的运用 491
16.4 使用spring整合项目 495
16.5 业务层的实现 498
16.5.1 生成地图的相关类 498
16.5.2 移动缩放地图操作的相关类 508
16.5.3 查询地图操作的相关类 510
16.5.4 编辑地图操作的相关类 512
16.6 持久层及数据库设计 515
16.6.1 数据库设计 515
16.6.2 持久层设计 517
16.7 持久层的实现 519
16.7.1 hibernate对空间数据类型的支持 519
16.7.2 使用空间数据库函数实现数据的选取 528
16.7.3 dao的实现 531
16.7.4 xml文件 538
16.8 小结 541
附录a hibernate生成器 543
附录b hibernate配置文件... 547
1.1 持久层 2
1.1.1 应用程序的分层结构 2
1.1.2 持久化技术 3
1.2 orm简介 4
1.3 使用jdbc编程 4
1.4 使用jdbc和hibernate的对比 7
1.4.1 carcompany项目分析 7
1.4.2 使用jdbc实现项目与使用hibernate实现项目 9
1.4.3 关联和继承问题 12
1.4.4 数据库表更改问题 16
1.5 hibernate的优点 17
1.6 小结 18
第2章 hibernate入门程序 19
2.1 资源下载和预备环境 19
2.1.1 预备知识 19
2.1.2 资源下载 20
2.1.3 环境预备 21
2.2 basiccar项目 24
2.2.1 basiccar项目描述 24
.2.2.2 建立数据库 24
2.2.3 建立项目 24
2.3 pojo文件 26
2.4 映射文件 27
2.4.1 basiccar.hbm.xml内容 27
2.4.2 映射文件内容介绍 28
2.5 配置文件 29
2.5.1 hibernate.cfg.xml内容 29
2.5.2 配置文件内容介绍 30
2.6 测试项目 31
2.6.1 test.java代码 31
2.6.2 插入、更新、查询和删除 33
2.7 小结 37
第3章 hibernate原理解析 39
3.1 hibernate的常用接口及包 39
3.1.1 hibernate的常用接口 39
3.1.2 hibernate的包 42
3.2 hibernate体系结构和工作原理 43
3.2.1 hibernate体系结构 43
3.2.2 hibernate工作原理 44
3.3 hibernate的依赖技术 46
3.3.1 java反射机制、cglib和javassist 46
3.3.2 xml文件及其解析器dom4j 52
3.3.3 antlr 54
3.4 hibernate的内部实现 58
3.4.1 session.save()的内部实现 58
3.4.2 session.flush()的内部实现 61
3.4.3 session.load()的内部实现 65
3.4.4 query(查询)的内部实现 69
3.5 小结 72
第4章 对象关系映射 73
4.1 hibernate的对象识别方法 73
4.1.1 java和关系数据库的对象识别方法 74
4.1.2 hibernate的对象识别方法 76
4.2 映射代理主键、单个自然主键和复合自然主键 76
4.2.1 映射代理主键 76
4.2.2 映射单个自然主键 78
4.2.3 映射复合自然主键 78
4.3 hibernate的映射类型 85
4.3.1 hibernate内置类型 85
4.3.2 hibernate集合类型和用户自定义类型 88
4.4 继承关系映射 88
4.4.1 每个子类一个数据表 90
4.4.2 每个类一个数据表 92
4.4.3 共享一个数据表 94
4.5 关联关系映射 97
4.5.1 多对一 97
4.5.2 一对一 107
4.5.3 多对多 113
4.6 小结 121
第5章 对数据的简单操作 123
5.1 hibernate数据读写操作 123
5.2 进一步理解session 125
5.2.1 session读操作的实现 126
5.2.2 session写操作的实现 127
5.3 java对象的三种状态 129
5.4 对session的插入、更新、删除、载入 131
5.4.1 对session执行save操作 133
5.4.2 对session执行update操作 137
5.4.3 对session执行delete操作 138
5.4.4 对session执行get、load操作 139
5.5 hql检索方式 139
5.5.1 hibernate 提供多种检索方式 139
5.5.2 hql检索方式 139
5.5.3 query接口 140
5.5.4 hql基本语法 142
5.5.5 在hql语句中绑定参数 148
5.5.6 限制查询返回的数目 152
5.5.7 在映射文件中定义命名hql查询语句 152
5.5.8 sql检索方式 153
5.6 小结 156
第6章 hibernate事务与并发处理 157
6.1 hibernate事务 157
6.1.1 什么是事务 157
6.1.2 hibernate的事务 158
6.1.3 使用hibernate事务 159
6.1.4 transaction接口 162
6.1.5 同步session和数据库 163
6.2 并发带来的问题 164
6.2.1 更新丢失(lost update) 164
6.2.2 脏读(dirty read) 165
6.2.3 不可重复读(unrepeatable read) 166
6.2.4 幻读(phantom read) 166
6.3 避免并发冲突的三种方案 167
6.3.1 设置数据库隔离级别 170
6.3.2 乐观锁 172
6.3.3 悲观锁 177
6.4 小结 179
第7章 高级对象关系映射 181
7.1 使用动态类 181
7.1.1 使用动态类的对象关系映射 181
7.1.2 使用动态类的数据存取 183
7.2 使用组件[component] 185
7.2.1 实体和值的概念 185
7.2.2 组件[component] 185
7.2.3 动态组件[dynamic-component] 188
7.3 映射值类型的集合 190
7.3.1 使用值类型集合的例子 191
7.3.2 各种集合元素 193
7.3.3 映射component类型集合 201
7.3.4 排序 205
7.4 用户自定义数据类型 206
7.4.1 使用usertype接口的例子 206
7.4.2 usertype包的其他接口 211
7.5 一个持久化类对应多张表 212
7.5.1 对象关系映射 212
7.5.2 数据存取 214
7.6 小结 216
第8章 高级数据检索 217
8.1 qbc数据检索 217
8.1.1 qbc查询主要类 219
8.1.2 使用expression类和example类设置查询条件 223
8.1.3 使用qbc各种检索例子 226
8.2 连接查询 231
8.2.1 连接定义 231
8.2.2 hql、criteria对连接的支持 235
8.2.3 使用fetch和不使用fetch的区别 239
8.3 检索策略 240
8.3.1 什么时候载入 240
8.3.2 如何检索 241
8.3.3 类级别的延迟加载 242
8.3.4 关联实体的载入策略 244
8.3.5 关联集合的载入策略 248
8.3.6 batch载入策略 252
8.4 小结 254
第9章 hibernate的二级缓存和查询缓存 255
9.1 二级缓存 256
9.1.1 hibernate的缓存结构.. 256
9.1.2 选择二级缓存策略 257
9.1.3 缓存提供者 258
9.2 使用二级缓存 264
9.2.1 使用二级缓存的步骤 264
9.2.2 对类对象进行缓存 265
9.2.3 对集合进行缓存 268
9.3 查询缓存 272
9.3.1 使用查询缓存 272
9.3.2 使用查询缓存的注意事项 275
9.4 管理二级缓存 277
9.4.1 缓存模式 278
9.4.2 清除缓存对象 278
9.5 hibernate统计机制 279
9.5.1 hibernate统计机制statistics 279
9.5.2 与二级缓存相关的统计信息 281
9.6 小结 283
第10章 hibernate拦截器和事件框架 285
10.1 hibernate拦截器 285
10.1.1 interceptor接口 286
10.1.2 使用interceptor拦截器 289
10.2 hibernate事件框架 300
10.2.1 实现自定义监听器 301
10.2.2 注册监听器 303
10.3 小结 305
第11章 hibernate annotations应用 307
11.1 hibernate annotations简介 307
11.1.1 ejb介绍 308
11.1.2 启用元数据注释 310
11.1.3 jpa介绍 313
11.1.4 hibernate annotations介绍 313
11.2 建立一个hibernate annotation项目 314
11.2.1 环境准备 314
11.2.2 在basiccar项目中使用注释 315
11.3 使用注释映射对象关系 318
11.3.1 映射实体和属性 318
11.3.2 映射类型 319
11.3.3 映射主键 320
11.3.4 继承关系映射 323
11.3.5 关联关系映射 326
11.3.6 映射组件 332
11.3.7 乐观锁 335
11.4 使用注释映射查询 335
11.4.1 映射命名hql查询 335
11.4.2 映射命名sql查询 336
11.4.3 使用过滤器 337
11.5 小结 338
第12章 hibernate验证器 339
12.1 新建一个hibernate 验证器项目 340
12.1.1 环境准备 340
12.1.2 在basiccar项目中使用约束 341
12.2 验证器框架 345
12.2.1 org.hibernate.validator包 345
12.2.2 org.hibernate.validator.event包 346
12.2.3 org.hibernate.validator.interpolator包 347
12.2.4 错误信息资源包 347
12.3 内键约束 347
12.4 错误信息 349
12.4.1 资源绑定 349
12.4.2 自定义错误信息 353
12.5 编写自定义约束 354
12.6 验证关联对象 356
12.7 结合xml映射文件使用约束 358
12.7.1 增加回滚事务处理 358
12.7.2 注册验证器事件监听器 360
12.8 小结 361
第13章 hibernate tools介绍 363
13.1 hibernate tools功能 363
13.2 hibernate tools安装 364
13.3 创建hibernate配置文件 368
13.4 创建hibernate控制台配置 371
13.5 创建hibernate逆向工程文件 373
13.5.1 创建逆向工程文件的步骤 373
13.5.2 hibernate逆向工程文件编辑器 375
13.6 使用逆向工程生成pojo类和映射文件 380
13.6.1 生成pojo类和映射文件的步骤 380
13.6.2 进一步控制逆向工程 385
13.7 控制映射文件生成pojo类 390
13.8 hibernate tools的各个视图 392
13.9 动态执行hql语句 393
13.10 小结 395
第14章 hibernate search 397
14.1 lucene介绍 398
14.1.1 什么是lucene 398
14.1.2 lucene的基本原理 398
14.1.3 lucene的技术实现 400
14.1.4 索引的主要类 403
14.1.5 搜索的主要类 404
14.1.6 一个简单使用lucene的例子 404
14.2 hibernate search介绍 410
14.2.1 hibernate search的优点 410
14.2.2 hibernate search的使用模式 411
14.2.3 hibernate search包 413
14.3 第一个hibernate search项目 415
14.3.1 环境准备 415
14.3.2 basiccar例子 415
14.4 建立实体和索引的映射 422
14.4.1 基本映射 422
14.4.2 嵌入和关联实体映射 424
14.4.3 使用@boost进行加权操作 432
14.4.4 类型转换桥bridge 434
14.5 配置 435
14.5.1 目录配置 435
14.5.2 worker配置 437
14.5.3 reader策略配置 437
14.5.4 启动自动索引 437
14.6 查询 438
14.6.1 setcriteriaquery()设置criteria 438
14.6.2 setindexprojection()对结果进行投影 439
14.6.3 setsort()排序 440
14.6.4 多种query对象的使用 443
14.7 小结 444
第15章 spring和hibernate整合 445
15.1 spring简介 445
15.1.1 应用程序框架的概念 446
15.1.2 spring总体框架 447
15.1.3 ioc控制反转和依赖注入 449
15.1.4 aop 面向方面编程 454
15.2 结合spring和hibernate的例子 460
15.2.1 环境 461
15.2.2 项目代码 461
15.3 主要类解析 466
15.3.1 hibernatetemplate类 466
15.3.2 hibernatedaosupport类 469
15.4 对hibernate进行事务管理 471
15.4.1 spring事务 471
15.4.2 编程式事务 471
15.4.3 声明式事务 473
15.5 小结 478
第16章 使用spring、struts、hibernate的实例 481
16.1 项目介绍 482
16.1.1 项目功能 482
16.1.2 项目技术 485
16.2 整体框架设计 488
16.2.1 系统的总体框架 488
16.2.2 系统的各个包 490
16.3 struts在项目中的运用 491
16.4 使用spring整合项目 495
16.5 业务层的实现 498
16.5.1 生成地图的相关类 498
16.5.2 移动缩放地图操作的相关类 508
16.5.3 查询地图操作的相关类 510
16.5.4 编辑地图操作的相关类 512
16.6 持久层及数据库设计 515
16.6.1 数据库设计 515
16.6.2 持久层设计 517
16.7 持久层的实现 519
16.7.1 hibernate对空间数据类型的支持 519
16.7.2 使用空间数据库函数实现数据的选取 528
16.7.3 dao的实现 531
16.7.4 xml文件 538
16.8 小结 541
附录a hibernate生成器 543
附录b hibernate配置文件... 547
Java数据库持久层开发核心编程
- 名称
- 类型
- 大小
光盘服务联系方式: 020-38250260 客服QQ:4006604884
云图客服:
用户发送的提问,这种方式就需要有位在线客服来回答用户的问题,这种 就属于对话式的,问题是这种提问是否需要用户登录才能提问
Video Player
×
Audio Player
×
pdf Player
×
亲爱的云图用户,
光盘内的文件都可以直接点击浏览哦
无需下载,在线查阅资料!