写点什么

腾讯 T4Java 大牛连续半个月每天熬夜到凌晨三四点,竟然就只是为了写一份 MyBatis 源码学习笔记

发布于: 2020 年 12 月 04 日

MyBatis内容介绍



本文档为纯手打,能够让你快速熟悉掌握MyBatis。转发+关注,然后添加VX(tkzl6666)即可获得《MyBatis源码笔记》的免费领取方式!



第一部分:MyBatis入门



1.什么是Mybatis?



MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis。是一个基于Java的持久层框架。



2.为什么我们要用Mybatis?



无论是Mybatis、Hibernate都是ORM的一种实现框架,都是对JDBC的一种封装!





3.MyBatis快速入门



其实我们已经学过了Hibernate了,对于Mybati入门其实就非常类似的。因此就很简单就能掌握基本的开发了.





4.Mybatis工作流程



  • 通过Reader对象读取Mybatis映射文件

  • 通过SqlSessionFactoryBuilder对象创建SqlSessionFactory对象

  • 获取当前线程的SQLSession

  • 事务默认开启

  • 通过SQLSession读取映射⽂件中的操作编号,从而读取SQL语句

  • 提交事务

  • 关闭资源



5. 完成CRUD操作



我们在上面中已经简单知道了Mybatis是怎么使用的以及工作流程了,这次我们使用Mybatis来完成CRUD的操作,再次巩固Mybatis的开发步骤以及一些细节



包与类之间的结构





6. 动态SQL



何为动态SQL??回顾⼀下我们之前写的SSH项⽬中,有多条件查询的情况,如下图





7. 入门总结



  • Mybatis的准备工作与Hibernate差不多,都需要一个总配置文件、一个映射文件。

  • Mybatis的SQLSession工具类使用ThreadLocal来对线程中的Session来进行管理。

  • Mybatis的事务默认是开启的,需要我们手动去提交事务。

  • Mybatis的SQL语句是需要手写的,在程序中通过映射文件的命名空间.sql语句的id来进行调用!

  • 在Mybatis中,增删改查都是Mybatis需要我们自己写SQL语句的,然后在程序中调用即可了。SQL由于是我们自己写的,于是就相对Hibernate灵活一些。

  • 如果需要传入多个参数的话,那么我们一般在映射文件中用Map来接收。



第二部分:Mybatis配置信息



1. 映射文件



在mapper.xml文件中配置很多的sql语句,执行每个sql语句时,封装为MappedStatement对象,mapper.xml以statement为单位管理sql语句



2. 配置文件



别名







3. 配置相关总结



  • 在程序中调用的SQL语句是由映射文件的命令空间+sql片段的id所组成的。它内部会生成一个Statement对象的。

  • 在使用别名的时候,可以指定包名,在使用总配置文件加载映射文件时,也可以指定包名。

  • 主键如果需要返回的话,使用selectKey 标签即可。UUID也可以返回。在Oracle的话,是使用序列来返回自动增长的主键的。

  • 占位符有两种,一种是解析传递进来的参数数据、一种是原样输出传递进来的数据。



第三部分:关联映射



1. Mybatis【多表连接】



我们在学习Hibernate的时候,如果表涉及到两张的话,那么我们是在映射文件中使用 <set> .. <manyto-one> 等标签将其的映射属性关联起来的...那么在我们Mybatis中又怎么做呢???





2. 关联映射总结



对于Mybatis的多表连接就非常简单了,由于SQL语句全是由我们自己写,如果我们返回的数据类型在当前的实体中是不够封装的话,那么我们只要再关联对应的映射属性就行了!





一键三连+评论,然后添加VX(tkzl6666)即可免费领取



第四部分:缓存+Mapper代理+逆向工程



1. 前言



本文主要讲解Mybatis的以下知识点:



Mybatis缓存



  • 一级缓存

  • 二级缓存

  • 与Ehcache整合



Mapper代理



  • 使用Mapper代理就不用写实现类了



逆向工程



  • 自动生成代码



2. Mybatis缓存



缓存的意义将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题。





3.MyBatis和ehcache缓存框架整合



ehcache是专门用于管理缓存的,Mybatis的缓存交由ehcache管理会更加得当

mybatis中提供一个cache接口,只要实现cache接口就可以把缓存数据灵活的管理起来





4. Mapper代理方式



Mapper代理方式的意思就是:程序员只需要写dao接口,dao接口实现对象由mybatis自动生成代理对象。





5. Mybatis解决JDBC编程的问题





6.Mybatis逆向工程



Mybatis逆向工程实际上就是想自动生成对应的代码,不用自己写对应的映射文件和接口





7.本章总结



  • Mybatis的一级缓存是sqlSession级别的。只能访问自己的sqlSession内的缓存。如果Mybatis与Spring整合了,Spring会自动关闭sqlSession的。所以一级缓存会失效的。

  • 一级缓存的原理是map集合,Mybatis默认就支持一级缓存

  • 二级缓存是Mapper级别的。只要在Mapper命名空间下都可以使用二级缓存。需要我们自己手动去配置二级缓存

  • Mybatis的缓存我们可以使用Ehcache框架来进行管理,Ehcache实现Cache接口就代表使用Ehcache来环境Mybatis缓存。

  • 由于之前写的DaoImpl是有非常多的硬编码的。可以使用Mapper代理的方式来简化开发



第五部分:Mybatis整合Spring



1. Mybatis与Spring整合



既然我们已经学了Mybatis的基本开发了,接下来就是Mybatis与Spring的整合了!





2. 总结



  • web.xml加载Spring配置文件

  • Spring配置文件配置数据连接池,SessionFactory、事务、扫描注解

  • Mybatis中配置文件、实体以及相对应的映射文件

  • 将映射文件加人到总配置文件中。



第六部分:Mybatis常见面试题





本文档为纯手打,能够让你快速熟悉掌握MyBatis。转发+关注,然后私信回复 “MB” 即可获得《MyBatis源码笔记》的免费领取方式!





MyBatis笔记脑图





用户头像

微信:tkzl6666 添加获取你想要的Java资料 2019.01.29 加入

添加VX(tkzl6666 ) 获取大厂面试真题,面试复习资料,Java进阶资料,Java实战项目。

评论 (1 条评论)

发布
用户头像
腾讯 T4Java 大牛连续半个月每天熬夜到凌晨三四点,竟然就只是为了写一份 MyBatis 源码学习笔记

2020 年 12 月 04 日 16:40
回复
没有更多了
腾讯T4Java大牛连续半个月每天熬夜到凌晨三四点,竟然就只是为了写一份MyBatis源码学习笔记