适读人群:Java开发人员
1.资深Java开发工程师执笔
作者是资深Java开发工程师,活跃于CSDN及开源中国,对MyBatis研究深入,是MyBatis官方推荐的分页插件PageHelper即通用Mapper的作者。
2.示例完整,注释详细
《MyBatis从入门到精通》中的示例代码都非常完整,同时每行核心语句都附有注释,可以帮助读者轻松掌握代码的内容,快速入门,持续深化,举一反三。
2.解读源码,资源丰富
《MyBatis从入门到精通》的特点在于详细解读MyBatis源代码,带领大家深入理解源码核心。另外,作者开源了许多优秀项目(MyBatis官方推荐的扩展组件等),每一位读者都可以获得《MyBatis从入门到精通》的宝贵资源,并与作者交流讨论。
  
《MyBatis从入门到精通》中从一个简单的MyBatis查询入手,搭建起学习MyBatis的基础开发环境。通过全面的示例代码和测试讲解了在MyBatis XML方式和注解方式中进行增、删、改、查操作的基本用法,介绍了动态SQL在不同方面的应用以及在使用过程中的实践方案。针对MyBatis高级映射、存储过程和类型处理器提供了丰富的示例,通过自下而上的方法使读者更好地理解和掌握MyBatis的高级用法,同时针对MyBatis的代码生成器提供了详细的配置介绍。此外,《MyBatis从入门到精通》还提供了缓存配置、插件开发、Spring、Spring Boot集成的详细内容。最后通过介绍Git和GitHub让读者了解MyBatis开源项目,通过对MyBatis源码和测试用例的讲解让读者更好掌握MyBatis。
刘增辉,资深Java工程师,热爱技术研究,乐于分享心得,活跃于CSDN和开源中国网站。对MyBatis源码有着深入研究,同时热衷于开源项目,在GitHub和开源中国网站上发布了多个开源项目,是MyBatis官方推荐的分页插件PageHelper和通用Mapper的作者,所发布项目受到了数千人的关注。
第1章 MyBatis入门 1
1.1 MyBatis简介 2
1.2 创建Maven项目 3
1.3 简单配置让MyBatis跑起来 7
1.3.1 准备数据库 8
1.3.2 配置MyBatis 8
1.3.3 创建实体类和Mapper.xml文件 10
1.3.4 配置Log4j以便查看MyBatis操作数据库的过程 11
1.3.5 编写测试代码让MyBatis跑起来 12
1.4 本章小结 14
第2章 MyBatis XML方式的基本用法 15
2.1 一个简单的权限控制需求 16
2.1.1 创建数据库表 16
2.1.2 创建实体类 19
2.2 使用XML方式 21
2.3 select用法 23
2.4 insert用法 35
2.4.1 简单的insert方法 35
2.4.2 使用JDBC方式返回主键自增的值 38
2.4.3 使用selectKey返回主键的值 40
2.5 update用法 42
2.6 delete用法 45
2.7 多个接口参数的用法 47
2.8 Mapper接口动态代理实现原理 50
2.9 本章小结 51
第3章 MyBatis注解方式的基本用法 53
3.1 @Select注解 54
3.1.1 使用mapUnderscoreToCamelCase配置 55
3.1.2 使用resultMap方式 55
3.2 @Insert注解 58
3.2.1 不需要返回主键 58
3.2.2 返回自增主键 58
3.2.3 返回非自增主键 59
3.3 @Update注解和@Delete注解 59
3.4 Provider注解 60
3.5 本章小结 61
第4章 MyBatis动态SQL 63
4.1 if用法 64
4.1.1 在WHERE条件中使用if 64
4.1.2 在UPDATE更新列中使用if 68
4.1.3 在INSERT动态插入列中使用if 70
4.2 choose用法 72
4.3 where、set、trim用法 75
4.3.1 where用法 75
4.3.2 set用法 76
4.3.3 trim用法 77
4.4 foreach用法 78
4.4.1 foreach实现in集合 78
4.4.2 foreach实现批量插入 81
4.4.3 foreach实现动态UPDATE 84
4.5 bind用法 86
4.6 多数据库支持 86
4.7 OGNL用法 89
4.8 本章小结 90
第5章 Mybatis代码生成器 91
5.1 XML配置详解 92
5.1.1 property标签 95
5.1.2 plugin标签 96
5.1.3 commentGenerator标签 97
5.1.4 jdbcConnection标签 99
5.1.5 javaTypeResolver标签 100
5.1.6 javaModelGenerator标签 101
5.1.7 sqlMapGenerator标签 102
5.1.8 javaClientGenerator标签 103
5.1.9 table标签 104
5.2 一个配置参考示例 109
5.3 运行MyBatis Generator 111
5.3.1 使用Java编写代码运行 111
5.3.2 从命令提示符运行 113
5.3.3 使用Maven Plugin运行 115
5.3.4 使用Eclipse插件运行 117
5.4 Example介绍 119
5.5 本章小结 124
第6章 MyBatis高级查询 125
6.1 高级结果映射 126
6.1.1 一对一映射 126
6.1.2 一对多映射 140
6.1.3 鉴别器映射 156
6.2 存储过程 159
6.2.1 第一个存储过程 162
6.2.2 第二个存储过程 164
6.2.3 第三个和第四个存储过程 166
6.2.4 在Oracle中使用游标参数的存储过程 168
6.3 使用枚举或其他对象 170
6.3.1 使用MyBatis提供的枚举处理器 170
6.3.2 使用自定义的类型处理器 172
6.3.3 对Java 8日期(JSR-310)的支持 175
6.4 本章小结 176
第7章 MyBatis缓存配置 177
7.1 一级缓存 178
7.2 二级缓存 181
7.2.1 配置二级缓存 181
7.2.2 使用二级缓存 184
7.3 集成EhCache缓存 187
7.4 集成Redis缓存 190
7.5 脏数据的产生和避免 191
7.6 二级缓存适用场景 194
7.7 本章小结 194
第8章 MyBatis插件开发 195
8.1 拦截器接口介绍 196
8.2 拦截器签名介绍 198
8.2.1 Executor接口 198
8.2.2 ParameterHandler接口 200
8.2.3 ResultSetHandler接口 201
8.2.4 StatementHandler接口 202
8.3 下画线键值转小写驼峰形式插件 203
8.4 分页插件 206
8.4.1 PageInterceptor拦截器类 207
8.4.2 Dialect接口 212
8.4.3 MySqlDialect实现 216
8.5 本章小结 220
第9章 Spring集成MyBatis 221
9.1 创建基本的Maven Web项目 222
9.2 集成Spring和Spring MVC 227
9.3 集成MyBatis 232
9.4 几个简单实例 234
9.4.1 基本准备 235
9.4.2 开发Mapper层(Dao层) 235
9.4.3 开发业务层(Service层) 238
9.4.4 开发控制层(Controller层) 240
9.4.5 开发视图层(View层) 242
9.4.6 部署和运行应用 245
9.5 本章小结 246
第10章 Spring Boot集成MyBatis 247
10.1 基本的Spring Boot项目 248
10.2 集成MyBatis 251
10.3 MyBatis Starter配置介绍 253
10.4 简单示例 255
10.4.1 引入simple依赖 255
10.4.2 开发业务(Service)层 258
10.4.3 开发控制(Controller)层 259
10.4.4 运行应用查看效果 259
10.5 本章小结 260
第11章 MyBatis开源项目 261
11.1 Git入门 262
11.1.1 初次运行配置 262
11.1.2 初始化和克隆仓库 263
11.1.3 本地操作 265
11.1.4 远程操作 267
11.2 GitHub入门 269
11.2.1 创建并提交到仓库 269
11.2.2 Fork仓库并克隆到本地 272
11.2.3 社交功能 275
11.3 MyBatis源码讲解 278
11.4 MyBatis测试用例 290
11.5 本章小结 293
附录 类型处理器(TypeHandler) 295
分离是为了更好的相聚
2013年,我在开源中国网站上认识了本书作者刘增辉,并和他多次探讨过关于Java开源框架的种种技术问题。那段时间,我正在开源一款名为SmartFramework的轻量级JavaWeb框架,当时我不敢奢望自己开源的框架会有多少人认可,但没想到后来还真有不少朋友们为此框架提出了宝贵建议并做出了巨大贡献。尤其是在数据持久层这块,增辉给了我许多支持与帮助,让我感受到开源带给我的不仅是技术能力上的提升,更多的是让自己感到快乐。
我了解到增辉对MyBatis的研究颇为深入,不仅对MyBatis的内核,甚至对于其扩展都能做到了然于心、游刃有余。他曾经也开源了许多MyBatis核心组件,帮助许多开发者提高了工作效率,而我正是这众多开发者中的一位。
我不想占用这篇推荐序的宝贵篇幅为大家讲解如何来使用MyBatis,因为这本书中对MyBatis的介绍远比我讲的更加详细和深入。现在我只想和大家聊聊架构设计中的一个核心问题:关注点分离。因为这个问题同样也是MyBatis框架需要解决的核心问题。
关注点分离
关注点分离所对应的英文是SeparationofConcerns,简称SOC。它是最经典的架构设计原则之一,在许多架构设计中被广泛使用。关注点分离原则为我们的架构设计提出了三点要求。
1.架构中需要变化的部分,一定要能够非常清晰地被识别出来。
2.若架构中某部分发生变化,则该变化不会影响到其他部分。
3.若架构中某部分需要扩展,则该扩展也不会影响到其他部分。
架构能做到关注点分离,才能做到真正意义上的解耦,这是架构师们需要努力实现的目标。如果大家要问,关注点分离做得最有效的落地实践是什么?我们首先能想到的就是“前后端分离”。
前后端分离
曾经我们开发Web应用程序时,对前端和后端的概念不太清晰,开发者们逐渐认为前端和后端有必要进行分离了,前端需要考虑界面展现与数据展现问题,后端需要考虑业务逻辑与数据逻辑问题。可见,前端和后端所关注的问题是完全不同的,应该在架构上将它们进行分离。此外,在团队协作上也能将前端与后端这两部分的工作进行分离,因此出现了前端工程师与后端工程师这两个不同岗位。这样分工绝不是偶然的,它不仅让架构变得更加解耦,还能显著地提升团队的开发效率。
针对前端工程师而言,需要将界面展现与数据展现相分离;针对后端工程师而言,不仅要清晰地理解业务逻辑,善于将数据进行合理的建模,最终还要做到将业务逻辑与数据逻辑相分离。
业务逻辑与数据逻辑相分离
业务逻辑对于我们而言已经很清楚了,但数据逻辑包括哪些呢?最直接的就是一个个对应于数据库中每张数据表的实体对象,它有一个很好听的名字:数据访问对象,即DataAccessObject,简称DAO。很明显,这一层数据直接和底层数据库打交道,我们将它们从业务逻辑中分离出来,并加以封装。也就是说,没必要为每一个DAO对象初始化的过程去编写大量的代码,这些代码应该封装到一个框架中。我们只需要编写相应的SQL语句,并将这些SQL语句从业务代码中分离出来,最终将执行SQL语句所得到的结果集映射到DAO对象中即可。
不知道大家对我刚刚提到的“关注点分离”有怎样的理解。无论大家理解或深或浅,毫无疑问,这个问题都已成为架构中最核心的部分。
MyBatis就是这样的框架——它能帮助我们将业务逻辑与数据逻辑相分离,让开发应用程序的过程变得更加高效。究竟MyBatis中隐藏着怎样的奥秘?不要急,这本书将为大家揭晓答案。
作者增辉停下开发的脚步,通过深思熟虑和细心总结,把动态的实践静止到了纸张上,为各位读者悉心解读MyBatis的方方面面。相信他创作这本书的过程亦如当初刻苦自学MyBatis并在各大社区开源自己编写的核心组件的过程,倾注了全部的热情和心血。不忘初心,方得始终,希望各位读者能够喜欢这本书,并从中有所收获。
《架构探险》作者、特赞科技CTO,黄勇
2017年5月
自2013年起,我开始带领团队开发项目,公司此前使用的是一套深度集成的Spring、Struts和Hibernate框架,这套重量级框架显然已经不适合用在全新的项目中。当时使用的Hibernate还是较早的版本,在项目的业务层需要拼接大量的SQL和HQL才能进行数据库操作。综合多方面因素,我决定选择其他持久化框架进行项目开发。因为MyBatisSQL和代码分离的方式以及动态SQL的强大功能,加之其在对查询结果进行映射处理等方面具有显著优点,因此,我与MyBatis开始结缘。
为了提高查询效率,通常会采用物理分页,然而MyBatis只能支持内存分页。若想让MyBatis支持物理分页,只能通过基于拦截器的插件来实现。当时,已有的MyBatis分页插件都不适用于公司已经开发了大半的项目,因此我有了自己写一个分页插件的想法。完成后的分页插件(PageHelper)能很方便地实现对MyBatis查询方法的分页。后来,我在CSDN和开源中国的博客中分享了代码,并且详细说明了实现原理。在后续更新插件的一篇博客评论中,红薯(开源中国创始人)说:“应该把代码放到git.oschina.net中,放网盘很不专业哦!”因为这句话,我便踏入了开源的世界。
由于PageHelper分页插件有越来越多人使用,因而有很多网友通过留言、私信、邮件等方式和我讨论MyBatis的相关问题。为了解决网友的问题以及完善分页插件的功能,我深入学习了MyBatis的源码,通过不断的学习,不仅从深层次了解了各种问题的产生原因,对MyBatis的理解也逐渐加深。2014年11月,我利用闲暇时间又开发了一个新的开源项目:MyBatis通用Mapper,它实现了MyBatis单表增、删、改、查的基本方法,能够帮助开发人员节省大量时间。
这几年来,我一直在博客上面和大家分享MyBatis的相关内容,在这期间和网友交流解决的问题有很多是重复的,也有很多都是基础的。现在已有的MyBatis学习途径提供给大家的知识,有一些比较深奥不适合初学者,有一些比较基础却不全面。为了让读者比较容易地全面掌握MyBatis的相关知识,这本书得以诞生,本书将通过全面完整的大量示例,让读者轻松且全面地掌握MyBatis。
阅读准备
在开始学习之前,需要准备好如下的开发环境。
JDK1.6及以上版本。
MyBatis3.3.0版本。
MySQL数据库。
Eclipse4及以上版本。
ApacheMaven构建工具。
本书内容
全书共11章,每一章的具体内容如下。
第1章MyBatis入门
本章先简单介绍了MyBatis的发展历史和特点,然后通过一步步的操作搭建了一个学习MyBatis的基础环境,这个开发环境也是学习后续几个章节的基础。
第2章MyBatisXML方式的基本用法
本章设定了一个简单的权限控制需求,使用MyBatisXML方式实现了数据库中一个表的常规操作。在查询方面,通过根据主键查询和查询全部两个方法让读者在学会使用MyBatis查询方法的同时,还深入了解MyBatis返回值的设置原理。在增、删、改方面提供了大量详细的示例,这些示例覆盖了MyBatis基本用法的方方面面。
第3章MyBatis注解方式的基本用法
虽然XML方式是主流,但是仍然有许多公司选择了注解方式,因此本章非常适合使用注解方式的读者。本章使用注解方式几乎实现了同XML方式类似的全部方法,包含许多常用注解的基本用法。对于初学者来说,即使不使用注解方式,通过本章和第2章的对比也可以对MyBatis有更深的了解。
第4章MyBatis动态SQL
本章详细介绍了MyBatis最强大的动态SQL功能,通过丰富的示例讲解了各种动态SQL的用法,为动态SQL中可能出现的问题提供了最佳实践方案,还提供了动态SQL中常用的OGNL用法。
第5章MyBatis代码生成器
本章介绍的MyBatis代码生成器可以减轻基本用法中最繁重的那部分书写工作带来的压力。通过本章的学习,可以使用代码生成器快速生成大量基础的方法,让大家更专注于业务代码的开发,从枯燥的基础编码中解脱出来。
第6章MyBatis高级查询
本章介绍了MyBatis中的高级结果映射,包括一对一映射、一对多映射和鉴别器映射。通过循序渐进的代码示例让读者轻松地学会使用MyBatis中最高级的结果映射。本章还通过全面的示例讲解了存储过程的用法和类型处理器的用法。
第7章MyBatis缓存配置
本章讲解了MyBatis缓存配置的相关内容,提供了EhCache缓存和Redis缓存的集成方法。虽然二级缓存功能强大,但是使用不当很容易产生脏数据。本章针对脏数据的产生提供了最佳解决方案,并且介绍了二级缓存适用的场景。
第8章MyBatis插件开发
本章介绍了MyBatis强大的扩展能力,利用插件可以很方便地在运行时改变MyBatis的行为。通过两个插件示例让读者初窥门径,结合第11章的内容可以让读者开发出适合自己的插件。
第9章Spring集成MyBatis
本章介绍了最流行的轻量级框架Spring集成MyBatis的方法,通过一步步操作从零开始配置,搭建一个基本的Spring、SpringMVC、MyBatis开发环境。
第10章SpringBoot集成MyBatis
本章介绍了最流行的微服务框架SpringBoot集成MyBatis的方法,通过MyBatis官方提供的Starter可以很方便地进行集成。同时,本章对Starter中的配置做了简单的介绍,可以满足读者对MyBatis各项配置方面的需要。
第11章MyBatis开源项目
本章是一扇通往开源世界的大门,也是一扇通往MyBatis源码学习的大门。从Git入门到GitHub入门,读者可以学会使用最流行的分布式版本控制系统和源代码托管服务。通过一段代码让大家了解MyBatis中的一部分关键类,通过代码包讲解可以了解MyBatis每个包中所含的功能。最后通过MyBatis丰富的测试用例为读者提供更多更有用的学习内容。
致谢
从决定写书,到这本书能够出版,中间经历了很多,因此深感来之不易。在这个过程中,要感谢所有为本书做出过贡献的人。感谢我的父母对我事业的默默支持。感谢我的妻子参与了本书的审校工作,给我提供了许多宝贵意见。感谢我的朋友黄勇、熔岩、杨新伦、悠然在百忙之中抽出时间为我的新书作序推荐。感谢博文视点的策划编辑孙奇俏的持续跟进和大力协助,同时感谢电子工业出版社和博文视点的其他老师给予本书的专业意见。最后,感谢每一位阅读本书的读者,希望本书能给您带来帮助。衷心感谢大家。
联系作者
由衷地感谢大家购买此书,希望大家会喜欢,也希望这本书能够为各位读者带来所希望获得的知识。虽然我已经非常细心地检查书中所提到的所有内容,但仍有可能存在疏漏,若大家在阅读过程中发现错误,在此我先表示歉意。欢迎各位读者对本书的内容和相关源代码发表意见和评论。大家可以通过我的个人邮箱abel533@gmail.com与我取得联系,我会一一解答每个人的疑惑。
我是一名在校的计算机专业学生,学校课程虽然涉及数据库,但对于MyBatis这种ORM框架的讲解比较浅显。在一次偶然的机会,我发现了《MyBatis从入门到精通》这本书。这本书的内容对我来说,简直是“及时雨”。它从最基础的数据库连接配置开始,逐步深入到MyBatis的核心概念,比如SQL映射文件、Mapper接口、以及结果集映射。书中对动态SQL的讲解非常精彩,让我理解了如何根据不同的条件生成不同的SQL语句,这在实际开发中非常重要。而且,书中对MyBatis的各个组件之间的关系讲解得非常透彻,例如Mapper接口是如何与XML映射文件或者注解关联起来的,这让我对MyBatis的内部工作原理有了更清晰的认识。我还特别喜欢书中关于MyBatis的日志输出和调试技巧的介绍,这对于我排查问题非常有帮助。这本书的语言风格也很亲切,让我感觉不像是在阅读一本技术书籍,更像是在和一位经验丰富的开发者交流。
评分这本书实在是太令人惊喜了!我是一名刚接触Java开发的初学者,对于ORM框架一直觉得是个高深莫测的概念,光听名字就有点打怵。但《MyBatis从入门到精通》这本书,从一开始就非常友好地把我带进了MyBatis的世界。开篇并没有直接抛出复杂的概念和代码,而是从数据库操作的痛点出发,比如繁琐的JDBC代码、SQL注入的风险等,让我一下子就理解了MyBatis存在的意义和价值。然后,它循序渐进地介绍了XML映射和注解两种方式,并且用大量清晰易懂的代码示例来演示如何配置数据库连接、如何编写SQL语句、如何映射结果集。最让我赞赏的是,书中不仅仅停留在“怎么用”,更在一些关键的地方深入讲解了“为什么这么用”,比如为什么要有Mapper接口,Mapper接口和XML/注解是怎样工作的,这些深层次的原理让我对MyBatis的理解不再是停留在表面。即使遇到一些我不理解的地方,书中的解释也总是那么到位,仿佛作者就在我旁边手把手教学一样。我感觉自己真的从零开始,一步一步地掌握了MyBatis的核心功能,为后续更深入的学习打下了坚实的基础。
评分作为一名在大型企业中负责技术选型的架构师,《MyBatis从入门到精通》这本书的内容让我耳目一新。在评估MyBatis作为我们新项目ORM框架的可能性时,我仔细阅读了这本书。它不仅详尽地介绍了MyBatis的基本用法,更深入地探讨了MyBatis在企业级应用中的实践。书中关于MyBatis与Spring Boot的集成、MyBatis的事务管理、以及如何利用MyBatis实现高性能的数据访问层给出了非常具有参考价值的论述。我对书中关于MyBatis与第三方框架(如PageHelper)结合使用来简化分页查询的讲解印象深刻,这能极大地提高开发效率。此外,书中对MyBatis性能优化的多方面讨论,包括SQL编写的原则、缓存策略的选择以及一些潜在的性能陷阱,都为我们在实际项目中进行性能调优提供了宝贵的指导。这本书的深度和广度,足以让有不同技术背景的开发者都能从中获益。
评分作为一个已经有多年的Java开发经验的开发者,我之前一直使用的是hibernate。虽然hibernate的功能强大,但有时候对于一些精细化的SQL调优,或者是一些非常规的SQL语句,hibernate的ORM映射就会显得有些笨重和不便。偶然间我接触到了《MyBatis从入门到精通》这本书,抱着尝试的心态翻阅了一下。这本书的内容深度和广度都超出了我的预期。它不仅仅讲解了MyBatis的基础用法,更深入探讨了MyBatis的缓存机制、动态SQL的各种高级用法(如if、choose、where、foreach等标签的灵活运用)、以及如何处理复杂映射和一对多、多对多的关联关系。书中对MyBatis的性能优化给出了非常实用的建议,比如如何编写高效的SQL、如何使用SQL缓存、以及如何避免N+1问题。我还特别喜欢书中关于MyBatis插件开发的讲解,这让我看到了MyBatis的可扩展性和灵活性,为解决一些特定的业务场景提供了思路。读完这本书,我感觉自己对ORM框架的理解上升了一个新的维度,也为我今后的项目开发提供了更多的选择和优化空间。
评分我是在一个项目紧急上线前,急需快速掌握MyBatis技能的时候,找到的《MyBatis从入门到精通》这本书。坦白说,当时我抱着的是一种“救急”的心态,但没想到这本书的学习曲线如此平缓,而且内容非常实用。它没有过多的理论铺垫,而是直奔主题,通过大量实战案例来展示MyBatis的各种用法。例如,书中关于如何处理枚举类型、如何进行批量插入和更新、以及如何使用MyBatis的ResultHandler来处理大量数据,这些都是我在实际项目中经常遇到的问题,这本书都给出了清晰的解决方案。而且,书中的代码示例都非常完整,可以直接复制粘贴到自己的项目中使用,极大地节省了我学习和开发的时间。我还喜欢书中对MyBatis与Spring集成部分的讲解,这让我在实际项目中能够更顺畅地将MyBatis应用到Spring框架中。这本书确实是一本非常适合在短时间内掌握MyBatis核心技能的“宝典”。
评分书看着质量还可以、不知道质量如何
评分他认为机器真正拥有智能的关键在于能够使用因果推论,而非通过相关关系推论。
评分希望能够学到东西,并且能够用于个人的框架学习上,能够有多突破就好了,加油(? •?_•?)?
评分可以,,,,,,,,,,
评分简单介绍,有助于理解,适合入门
评分涵盖了PPT微动画的基础认识、组合特性、实操方法、系统思路、辅助技能等内容,内容布局清晰成体系。内容呈现分为3大模块:动画制作原理说明(做到心中有数);动画制作示例分步骤图文解说(易学易上手);实操问题概括强调(小贴士提醒)。 《P神微力:PPT微动画》适合在校大学生、职场新人和对PPT动画制作感兴趣的人士,尤其是90后的你。千金难买早学会,赢在起跑线、建立自己的核心竞争力,会让我们在职场上大放光彩。 《P神微力:PPT微动画》配套资料涵盖了本书的所有操作示例的样本文件,赠送的模板可供读者持续练习用。《P神微力:PPT微动画》的操作原理说明部分有理有据,会让读者制作PPT时有清晰的思路。只有真正去操作,才能掌握本书的所有示例,操作的过程既是锻炼基本功的过程,也是掌握制作思路的过程。希望读者朋友切勿只看不练、眼高手低,熟练掌握操作,才会@提升动画制作的技巧和思维。
评分学习中,有活动,价格还可以吧~~~~~~~~
评分到手了还没开始看,多本打包买的,书的纸质和印刷都不错。不知道内容好不好,希望有用吧。
评分大牛写的书,很好!!
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 book.cndgn.com All Rights Reserved. 新城书站 版权所有