阅读(2377) (0)

MyBatis从入门到精通(博文视点出品)

2021-05-12 21:45:29 更新

MyBatis从入门到精通(博文视点出品)

刘增辉 著

  • 出版社: 电子工业出版社
  • ISBN:9787121317972
  • 版次:1
  • 商品编码:12103309
  • 品牌:博文视点
  • 包装:平装
  • 开本:16开
  • 出版时间:2017-07-01
  • 用纸:胶版纸
  • 页数:312

点此购买


编辑推荐

  适读人群: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与我取得联系,我会一一解答每个人的疑惑。


点此购买