摘要: 本章通过分析 mybatis-spring-x.x.x.jar Jar 包中的源码,了解 MyBatis 是如何与 Spring 进行集成的。 Spring 配置文件 MyBatis 与 Spring 集成,在 Spring 配置文件中配置了数据源、SqlSessionFactory、自动扫描 My 阅读全文
posted @ 2019-10-29 11:08 殷建卫 阅读(1302) 评论(0) 推荐(0) 编辑
摘要: 本章简单介绍一下 MyBatis 的事务模块,这块内容比较简单,主要为后面介绍 mybatis-spring-1.**.jar(MyBatis 与 Spring 集成)中的事务模块做准备。 类图结构 MyBatis 事务模块的代码在 transaction 包下: 根据包的分类,提供了两种事务实现: 阅读全文
posted @ 2019-10-29 10:57 殷建卫 阅读(463) 评论(0) 推荐(0) 编辑
摘要: 本章介绍 MyBatis 提供的数据源模块,为后面与 Spring 集成做铺垫,从以下三点出发: 描述 MyBatis 数据源模块的类图结构; MyBatis 是如何集成第三方数据源组件的; PooledConnection 设计初衷猜想; 类图结构 MyBatis 数据源部分的代码在 dataso 阅读全文
posted @ 2019-10-29 10:55 殷建卫 阅读(598) 评论(0) 推荐(0) 编辑
摘要: 本章主要描述 MyBatis 插件模块的原理,从以下两点出发: MyBatis 是如何加载插件配置的? MyBatis 是如何实现用户使用自定义拦截器对 SQL 语句执行过程中的某一点进行拦截的? 示例准备 首先准备两个拦截器示例,代码如下。 @Intercepts({ @Signature(typ 阅读全文
posted @ 2019-10-29 10:50 殷建卫 阅读(323) 评论(0) 推荐(0) 编辑
摘要: 上一章的案例,配置日志级别为 debug,执行一个简单的查询操作,会将 JDBC 操作打印出来。本章通过 MyBatis 日志部分源码分析它是如何实现日志打印的。 在 MyBatis 的日志模块中有一个 jdbc package,package 中的内容如下图所示: BaseJdbcLogger 是 阅读全文
posted @ 2019-10-29 10:45 殷建卫 阅读(327) 评论(0) 推荐(0) 编辑
摘要: 在 Java 开发中常用的日志框架有 Log4j、Log4j2、Apache Common Log、java.util.logging、slf4j 等,这些日志框架对外提供的接口各不相同。本章详细描述 MyBatis 是如何通过适配器的方式集成和复用这些第三方框架的。 日志适配器 MyBatis 的 阅读全文
posted @ 2019-10-29 10:43 殷建卫 阅读(462) 评论(0) 推荐(0) 编辑
摘要: 本章主要描述 MyBatis 资源加载模块中的 ClassLoaderWrapper 类和 Java 加载配置文件的三种方式。 ClassLoaderWrapper 上一章的案例,使用 org.apache.ibatis.io.Resources#getResourceAsStream(java.l 阅读全文
posted @ 2019-10-29 10:41 殷建卫 阅读(487) 评论(0) 推荐(0) 编辑
摘要: 本章通过一个简单的例子,来了解 MyBatis 执行一条 SQL 语句的大致过程是怎样的。 案例代码如下所示: public class MybatisTest { @Test public void selectByPrimaryKey() throws IOException { // 3 St 阅读全文
posted @ 2019-10-29 10:31 殷建卫 阅读(1627) 评论(0) 推荐(0) 编辑
摘要: MyBatis 的整体架构分为三层, 分别是基础支持层、核心处理层和接口层,如下图所示。 基础支持层 反射模块 该模块对 Java 原生的反射进行了良好的封装,提供了更加简洁易用的 API ,方便上层使调用,并且对反射操作进行了一系列优化,例如缓存了类的元数据,提高了反射操作的性能。 类型转换模块 阅读全文
posted @ 2019-10-29 10:20 殷建卫 阅读(398) 评论(0) 推荐(0) 编辑
摘要: MyBatis 的动态 SQL 包括以下几种元素: 详细的使用参考官网文档:http://www.mybatis.org/mybatis-3/zh/dynamic-sql.html 本章内容简单描述这些动态 SQL 在使用的过程中需要注意的地方。 choose, when, otherwise 比如 阅读全文
posted @ 2019-10-29 10:04 殷建卫 阅读(278) 评论(0) 推荐(0) 编辑
摘要: MyBatis 提供两种类型的缓存,一种是一级缓存,另一种是二级缓存,本章通过例子的形式描述 MyBatis 缓存的使用。 测试类:com.yjw.demo.CacheTest 一级缓存 MyBatis 默认开启一级缓存。一级缓存是相对于同一个 SqlSession 而言的,所以在参数和 SQL 完 阅读全文
posted @ 2019-10-29 10:02 殷建卫 阅读(459) 评论(0) 推荐(0) 编辑
摘要: 简介 MyBatis 提供了两种联合查询的方式,一种是嵌套查询,一种是嵌套结果。先说结论:在项目中不建议使用嵌套查询,会出现性能问题,可以使用嵌套结果。 测试类:com.yjw.demo.JointQueryTest,提供了对嵌套查询和嵌套结果的测试。 数据库表模型关系 学生信息级联模型关系:链接 阅读全文
posted @ 2019-10-29 10:00 殷建卫 阅读(6123) 评论(0) 推荐(0) 编辑
摘要: 简介 利用 MyBatis Plugin 插件技术实现分页功能。 分页插件实现思路如下: 业务代码在 ThreadLocal 中保存分页信息; MyBatis Interceptor 拦截查询请求,获取分页信息,实现分页操作,封装分页列表数据返回; 测试类:com.yjw.demo.PageTest 阅读全文
posted @ 2019-10-29 09:57 殷建卫 阅读(492) 评论(1) 推荐(0) 编辑
摘要: 测试类:com.yjw.demo.PrimaryKeyTest 自增长列 数据库表的主键为自增长列,在写业务代码的时候,经常需要在表中新增一条数据后,能获得这条数据的主键 ID,MyBatis 提供了实现的方法。 StudentMapper.xml <insert id="insertByAutoI 阅读全文
posted @ 2019-10-29 09:53 殷建卫 阅读(862) 评论(0) 推荐(0) 编辑
摘要: 映射器的主要元素: 本章介绍 select 元素中传递多个参数的处理方式。 测试类:com.yjw.demo.MulParametersTest 使用 Map 传递参数(不建议使用) 使用 MyBatis 提供的 Map 接口作为参数来实现。 StudentDao /** * 使用 Map 传递参数 阅读全文
posted @ 2019-10-29 09:48 殷建卫 阅读(1012) 评论(0) 推荐(0) 编辑
摘要: MyBatis 提供了很多默认类型处理器,参考官网地址:链接,除了官网提供的类型处理器,我们也可以自定义类型处理器。 具体做法为:实现 org.apache.ibatis.type.TypeHandler 接口, 或继承 org.apache.ibatis.type.BaseTypeHandler  阅读全文
posted @ 2019-10-29 09:47 殷建卫 阅读(725) 评论(0) 推荐(0) 编辑
摘要: 简介 为了全面熟悉 MyBatis 的使用,整理一个 MyBatis 的例子,案例中包含了映射器、动态 SQL 的使用。本章先介绍项目结构和配置。 项目地址:链接 数据库表的模型关系:链接 项目结构 项目框架:Spring Boot、MyBatis、Mybatis-PageHelper、Druid、 阅读全文
posted @ 2019-10-29 09:46 殷建卫 阅读(224) 评论(0) 推荐(0) 编辑
摘要: 简介 什么是 MyBatis? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Pla 阅读全文
posted @ 2019-10-29 09:45 殷建卫 阅读(684) 评论(0) 推荐(0) 编辑