本书主要讲解了MyBatis 的应用。阅读本书要求开发人员拥有Java语言基础和JDBC基础知识,对数据库也要掌握入门知识,最好能够掌握常用的设计模式,因为在介绍MyBatis构造时,常常涉及设计模式,尤其是第6章和第7章的内容。
本书以讲解MyBatis基础运用和原理为主,所以适合初级到中高级开发人员阅读。
目录
MyBatis简介
1.1传统的JDBC编程
Java程序都是通过JDBC (Java Data Base Connectivity)连接数据库的,这样我们就可以通过SQL对数据库编程。
传统的JDBC编程的使用给我们带来了连接数据库的功能,但是也引发了巨大的问题。代码清单1-1是用JDBC编程的一个例子。我们将从MySQL数据库中查询- -个角色的名称,假设我们已经知道角色编号为1。
1.2 ORM模型
由于JDBC存在的缺陷,在实际工作中我们很少使用JDBC进行编程,于是提出了对象关系映射(Object Relational Mapping,简称ORM,或者O/RM,或者O/R mapping)。那什么是ORM模型呢?
有了ORM模型,在大部分情况下,程序员只需要了解Java应用而无需对数据库相关知识深入了解,便可以写出通俗易懂的程序。此外,ORM模型提供了统- 的规则使得数据库的数据通过配置便可轻易映射到POJO上。
1.3 H ibernate
1.4 MyBatis
历史上,MyBatis 的前身是Apache的一个开源项目iBatis, 2010 年这个项目由apachesoftware foundation迁移到了google code,并且改名为MyBatis.2013 年11月迁移到Github,所以目前MyBatis是由Github 维护的。
1.5 什么时候用MyBatis
如果你需要一一个 灵活的、可以动态生成映射关系的框架,那么MyBatis确实是一个最好的选择。它几乎可以代替JDBC,拥有动态列、动态表名,存储过程都支持,同时提供了简易的缓存、日志、级联。但是它的缺陷是需要你提供映射规则和SQL,所以它的开发工作量比Hibernate略大一- 些。
MyBaits入门
2.1 开发环境准备
2.1.1 下载 MyBatis
2.1.2 搭建开发环境
2.2 MyBatis的基本构成
2.2.1 构建SqlSessionFactory
2.3 生命周期
2.4 实例
转发+关注,然后私信回复关键字 “888” 即可获得《深入浅出MyBatis技术原理与实战》电子版的免费获取方式。
配置
3.1 properties 元素
properties是一个配置属性的元素,让我们能在配置文件的上下文中使用它。
3.2 设置
设置(settings) 在MyBatis中是最复杂的配置,同时也是最为重要的配置内容之- - ,它会改变MyBatis运行时的行为。
3.3 别名
别名(typeAliases) 是-一个指代的名称。因为我们遇到的类全限定名过长,所以我们别名(typeAliases) 是-一个指代的名称。希望用一个简短的名称去指代它,而这个名称可以在MyBatis. 上下 文中使用。
3.4 typeHandler类型处理器
typeHandler常用的配置为Java类型(javaType)、 JDBC 类型(jdbcType)。typeHandler的作用就是将参数从javaType转化为jdbcType,或者从数据库取出结果时把jdbcType转化为javaType。
3.5 ObjectFactory
当MyBatis在构建- -个结果返回的时候,都会使用ObjectFactory (对象工厂)去构建POJO,在MyBatis中可以定制自己的对象工厂。
从运行的结果可以看出,首先,setProperties 方法可以使得我们如何去处理设置进去的属性,而create方法分别可以处理单个对象和列表对象。其次,我们配置的ObjectFactory已经生效。
3.6 插件
3.7 environments配置环境
配置环境可以注册多个数据源( dataSource),每-一个数据源分 为两大部分: -个是数据库源的配置,另外一个是数据库事务( transactionManager)的配置。
3.8 databaseIdProvider数据库厂商标识
在相同数据库厂商的环境下,数据库厂商标识没有什么意义,在实际的应用中使用得在相同数据库厂商的环境下,数据库厂商标识没有什么意义,在实际的应用中使用得比较少,因为使用不同厂商数据库的系统还是比较少的。
3.9 引入映射器的方法
映射器是MyBatis最复杂、最核心的组件。本节着重讨论如何引入映射器。
转发+关注,然后私信回复关键字 “888” 即可获得《深入浅出MyBatis技术原理与实战》电子版的免费获取方式。
映射器
映射器是MyBatis最强大的工具,也是我们使用MyBatis时用得最多的工具,因此熟练掌握它十分必要。
4.1 映射器的主要元素
4.2 select元素
毫无疑问,select 元素是我们最常用也是功能最强大的SQL语言。select 元素帮助我们从数据库中读出数据,组装数据给业务人员。
4.3 insert 元素
insert元素,相对于select 元素而言要简单许多。
4.4 update元素和delete元素
这两个元素比较简单,所以我们放在一起讨论。和insert 元素-一样,MyBatis 执行完update元素和delete元素后会返回-一个整数,标出执行后影响的记录条数。
4.5 参数
虽然在MyBatis中参数大部分是像上面所描述的那样简单,但是我们还是有必要讨论一下参数的使用。
4.6 sql 元素
sql元素的意义,在于我们可以定义一串SQL语句的组成部分,其他的语句可以通过引用来使用它。
4.7 resultMap结果映射集
resultMap是MyBatis里面最复杂的元素。它的作用是定义映射规则、级联的更新、定制类型转化器等。
4.8 缓存cache
缓存是互联网系统常常用到的,其特点是将数据保存在内存中。目前流行的缓存服务器有MongoDB、Redis、 Ehcache 等。
动态SQL
5.1 概述
5.2 if元素
if元素是我们最常用的判断语句,相当于Java中的if语句。它常常与test属性联合使用。
5.3 choose、when、otherwise 元素
5.4 trim、where、 set 元素
5.5 foreach元素
foreach元素是一个循环语句,它的作用是遍历集合。它能够很好的支持数组和List、Set 接口的集合,对此提供遍历的功能。
5.6 test的属性
test的属性用于条件判断的语句中,它在MyBatis中广泛使用。它的作用相当于判断真假。
5.7 bind元素
MyBatis的解析和运行原理
6.1 涉及的技术难点简介
来到原理章,我们有必要对一些常用的、基础的技术难点进行简介,否则读者可能难以理解本章的内容。
6.2 构建SqlSessionFactory过程
SqISessionFactory是MyBatis的核心类之一, 其最重要的功能就是提供创建MyBatis的核心接口SqlSession,所以我们需要先创建SqlSessionFactory,为此我们需要提供配置文件和相关的参数。
6.3 SqlSession 运行过程
SqlSession的运行过程是本章的重点和难点,也是整个MyBatis最难以理解的部分。
插件
7.1 插件接口
在MyBatis中使用插件,我们就必须实现接口Interceptor,让我们先看看它的定义和各个方法的含义。
7.2 插件的初始化
插件的初始化是在MyBatis 初始化的时候完成的。
7.3 插件的代理和反射设计
插件用的是责任链模式。首先什么是责任链模式,就是一一个对象,在MyBatis中可能是四大对象中的一个,在多个角色中传递,处在传递链.上的任何角色都有处理它的机会。
7.4 常用的工具类MetaObject
在编写插件之前我们需要去学习-一个MyBatis的工具类一-MetaObject, 它可以有效读取或者修改一些重要对象的属性。
7.5 插件开发过程和实例
7.6 总结
MyBatis-Spring
8.1 Spring的基础知识
Spring技术主要由两个基础的功能IOC和AOP构成。MyBatis-Spring项目提供了一些基础的类,使得Spring能和MyBatis结合起来用,这个项目需要使用mybatis-spring-x.x.xjar实现。不过在此之前我们先了解一下 Spring的一些基础知识,其中包括Spring I0C、Spring AOP和Spring关于数据库事务的一些知识。
8.2 MyBatis-Spring应用
8.3 实例
8.4 总结
从Spring的简易基础开始,主要论述了Spring提供的I0C容器和AOP编程。我们用动态代理分析了AOP运行的原理和过程,在此基础上论述了AOP是如何管理数据库事务的。数据库事务是本章的重点。
实用的场景
9.1 数据库BLOB字段读写
对于文件的操作,在数据库中往往是通过BLOB字段进行支持的,所以我们先看看MyBatis对Blob字段的支持。
9.2 批量更新
在数据库中使用批量更新有助于提高性能。在MyBatis 中,我们可以修改配置文件中sttings的defaultExecutorType来制定其执行器为批量执行器。
9.3 调用存储过程
MyBatis对存储过程提供了调用功能,并且支持对游标数据的转化功能,让我们在这里学习它们。
9.4 分表
9.5 分页
MyBatis具有分页功能,它里面有一一个类一RowBounds, 我们可以使用RowBounds分页。
9.6 上传文件到服务器
9.7 在映射中使用枚举
在很多时候,我们希望将数据库的某些字典项转化为我们Java的枚举对象,这些在MyBatis的typeHandler中可以实现。而在MyBatis中EnunTypeHandler和EnumordinalTypeHandler并不是很好用。这个时候我们需要的是-一个自定义的typeHandler 去处理它们。
9.8 多对多级联
多对多的级联。比如用户和角色,一个用户可以拥有多个角色,同样-个角色也可以拥有多个用户。这样就是多对多的关系,有可能我需要查询的一一个用户有多少个角色,也有可能查询-一个角色下有哪些用户。一般而言, 处理多对多的关系采用双向关联的形式。这就意味着你中有我,我中有你。
9.9 总结
由于篇幅限制,就不一一展示了,有需要文中资料完整版的小伙伴们注意啦:一键三连(点赞+收藏+关注)