前言

只有光头才能变强。

文本已收录至我的GitHub精选文章,欢迎Starhttps://github.com/ZhongFuCheng3y/3y

Mybatis应该是国内用得最多的「数据访问层」框架了,我看了我司的好几个系统,基本都是用Mybatis的。

实话实说,我对Mybatis没有很深入的了解,也仅仅是处于「会用」的阶段上。日常的要加张表,加个字段就是写写DAO/Mapper

为什么没有深入去研究Mybatis的原因很可能是面试其实问得不是特别多,起码我在校招的时候面了很多家公司,也没怎么问我Mybatis的。

Mybatis如果仅仅是要「会用」,入门是非常快的,感觉两三天就可以搞好了。

认识Mybatis

在前阵子已经总结过了JDBC了,无论是什么的ORM框架(Object Relation Mapping)其实都是在JDBC上封装了一层,底层用的都是JDBC的代码。

众所周知,直接写JDBC的代码的效率是最高的。那为什么要用ORM框架呢??

回想起我第一次实习看到公司代码时的感受:「卧槽,代码怎么这么多啊。这为什么有这么多的包啊,一直点开都有」

如果纯用JDBC,只要项目是有点规模的,那我们的项目里代码量一定会很多。最重要的是,很多的代码都是重复的。如果我们的项目里边积累了这么多的重复代码,最致命的问题就是「不好维护

于是就有了这么多的ORM框架,至于用哪一个ORM框架,我觉得没有对错之分,公司用哪个你就用哪个就好了。

毕竟技术都是服务于业务,公司在选型的时候,选了某ORM框架,肯定也有当时的一个考虑。等到真的是由于使用了某ORM框架导致无法承接掉业务的时,那自然而然就会有优化。

在知乎上有很多「Mybatis与Hibernate/SpringData JPA」的对比,有兴趣的小伙伴可以去学习学习,看着大佬们的「回答/讨论」还是能学到不少的东西的。

Mybatis作为一个ORM框架,在市面上非常受欢迎,只要有JDBC基础,学会用很简单。

不BB了,开始吧

入门

使用Mybatis的步骤大致如下:

首先我们需要配Mybatis的一份配置文件,这份配置文件主要配置数据库相关的信息:

随后,我们编写一个工具类来获取sqlSession,这个SQLSession相当于JDBC的Connection对象

然后编写我们的映射文件,这个映射文件实际上就是对象与数据库的映射关系:

我们在映射文件上使用<insert>标签来实现插入:

然后调用sqlSession来实现插入即可:

效果如下:

看到这里,会不会觉得好像有点复杂?其实这几个步骤都很自然而然的:

  • 要操作数据库,总会有数据库相关的配置吧。(这块实际上就写一次,第一次写完了就不用再写了)
  • 要操作数据库,得告诉程序怎么操作吧,所以有映射文件(可以是XML的映射文件,也可以是注解的方式,反正我们得开个口子去告诉程序怎么执行)
  • 然后我们操作SQLSession去执行命令(这块后面我们可以把SQLSession直接屏蔽掉)

所以,用Mybatis实际上就是写映射文件/注解去告诉程序怎么操作,而映射文件/注解其实就是写SQL,对我们来说并不是难事。

因此,Mybatis入门是真的简单。

Mybatis细节

动态SQL

动态SQL实际上就是使用Mybatis给我们提供的if/foreach之类的标签去判断传递进来的参数有没有值,如果有值我们就拼接参数,如果没有,我们就不拼接。

缓存

了解Mybatis的一级缓存和二级缓存是什么意思,Mybatis的缓存实现可以用ehcache来管理。

如果某些数据查询量大而且不怎么修改的,我们可以考虑使用ehcache来对这部分的数据进行缓存,减少数据库的压力。

Mapper代理

在最开头的例子我们看到我们使用Mybatis在开发中也不见得简单很多,因为有SQLSession这一块还是需要我们手动去编写。

我们可以使用Mapper代理的方式屏蔽掉SQLSession这块的代码,开发只要写一个接口+一个Mapper.xml(或者注解)就足够了。

那是怎么屏蔽的呢?依靠的是动态代理。为什么可以依靠动态代理来实现呢?因为我们Mapper代理是需要依赖「规则」的,有了「规则」我们就可以通过「反射」去简化我们的代码了。

逆向工程

通过Mapper代理我们已经可以实现「一个接口+一个Mapper映射文件(注解)」就可以开发我们的程序了。

而又因为在工作中,CRUD是避免不了的,几乎每增加一张表,都需要有「最基本」的CRUD。

于是程序员们又偷懒了,连「最基本」的CRUD都不想自己写了,于是就有了逆向工程。

我们看一下逆向工程的配置就差不多能看懂是干啥的了:

通过表的结构,生成我们自己的JavaBean以及对应的Mapper接口和Mapper映射文件。

Mybatis-plus

Mybatis-plus又是程序员偷懒造出的轮子(狗头

这款插件说实话我没用过,看了一下官网,大致就是:简单的CRUD,我连XML都不需要了,API直接帮我们内置了对应的CRUD方法。

有兴趣的同学去学学,都是能提高开发效率的工具。

https://mp.baomidou.com/

放干货

现在已经工作有一段时间了,为什么还来写Mybatis呢,原因有以下几个:

  • 我是一个对排版有追求的人,如果早期关注我的同学可能会发现,我的GitHub、文章导航的read.me会经常更换。现在的GitHub导航也不合我心意了(太长了),并且早期的文章,说实话排版也不太行,我决定重新搞一波。
  • 我的文章会分发好几个平台,但文章发完了可能就没人看了,并且图床很可能因为平台的防盗链就挂掉了。又因为有很多的读者问我:”你能不能把你的文章转成PDF啊?“
  • 我写过很多系列级的文章,这些文章就几乎不会有太大的改动了,就非常适合把它们给”持久化“。

基于上面的原因,我决定把我的系列文章汇总成一个PDF/HTML/WORD/epub文档。说实话,打造这么一个文档花了我不少的时间。为了防止白嫖,关注我的公众号回复「888」即可获取。

Mybatis电子书,有兴趣的同学可以浏览一波。共有「92」页

文档的内容均为手打,有任何的不懂都可以直接来问我(公众号有我的联系方式)。

☕️ 各类知识点总结

下面的文章都有对应的原创精美PDF,在持续更新中,可以来找我催更~

涵盖Java后端所有知识点的开源项目(已有7 K star):https://github.com/ZhongFuCheng3y/3y

如果大家想要实时关注我更新的文章以及分享的干货的话,微信搜索Java3y

PDF文档的内容均为手打,有任何的不懂都可以直接来问我(公众号有我的联系方式)。

这份Mybatis总结,我觉得你很需要!的更多相关文章

  1. MyBatis 源码分析系列文章导读

    1.本文速览 本篇文章是我为接下来的 MyBatis 源码分析系列文章写的一个导读文章.本篇文章从 MyBatis 是什么(what),为什么要使用(why),以及如何使用(how)等三个角度进行了说 ...

  2. MyBatis的数据库操作

    MyBatis的数据库操作 大学毕业有一段时间了,作为一名没有任何开发工作经验的大专毕业生想找到一份软件开发的工作确实很难,但我运气还算不错,应聘上一份java web开发的工作.作为一名新人,老板给 ...

  3. MyBatis拦截器原理探究

    MyBatis拦截器介绍 MyBatis提供了一种插件(plugin)的功能,虽然叫做插件,但其实这是拦截器功能.那么拦截器拦截MyBatis中的哪些内容呢? 我们进入官网看一看: MyBatis 允 ...

  4. MyBatis架构(转)

    本文来自http://www.bubuko.com/infodetail-549184.html 如果不太熟悉MyBatis使用的请先参见MyBatis官方文档,这对理解其架构设计和源码分析有很大好处 ...

  5. MyBatis知多少(15)数据模型

    瘦数据模型是一种最为臭名昭著并且问题多多的对关系数据库系统的滥用.不幸的是,有时又的确需要瘦数据模型.所谓瘦数据模型,就是简单地将每张表都设计为一种通用数据结构,用于存储名值对的集合.这非常像Java ...

  6. MyBatis架构设计及源代码分析系列(一):MyBatis架构

    如果不太熟悉MyBatis使用的请先参见MyBatis官方文档,这对理解其架构设计和源码分析有很大好处. 一.概述 MyBatis并不是一个完整的ORM框架,其官方首页是这么介绍自己 The MyBa ...

  7. spring、springmvc、mybatis整合笔记

    这段时间上一个项目刚做完,下一个项目还没开始,趁这个时候来认真总结一下上个项目使用的ssm开发框架.由于,项目中关于使用ssm这部分的代码和配置是我们项目的整体架构师一个独立完成的,我们只负责业务部分 ...

  8. 使用Redis做MyBatis的二级缓存

    使用Redis做MyBatis的二级缓存 通常为了减轻数据库的压力,我们会引入缓存.在Dao查询数据库之前,先去缓存中找是否有要找的数据,如果有则用缓存中的数据即可,就不用查询数据库了. 如果没有才去 ...

  9. mybatis完美的实战教程

    文件夹(? )[-] (读者注:事实上这个应该叫做非常基础的入门一下下,假设你看过Hibernate了那这个就非常的简单) 文章来源:http://blog.csdn.net/techbirds_ba ...

随机推荐

  1. spring-cloud-gateway过滤器实践

    概述 这里是 SpringCloud Gateway 实践的第一篇,主要讲过滤器的相关实现.Spring-Cloud-Gateway 是以 WebFlux 为基础的响应式架构设计, 是异步非阻塞式的, ...

  2. 使用一行Python代码从图像读取文本

    处理图像不是一项简单的任务.对你来说,作为一个人,很容易看着某样东西然后马上知道你在看什么.但电脑不是这样工作的. 对你来说太难的任务,比如复杂的算术,或者一般意义上的数学,是计算机毫不费力就能完成的 ...

  3. web样式css

    css样式 什么是css 层叠样式表(Cascading Style Sheets),是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言. ...

  4. python中如何在一个for循环中遍历两个列表

    `其实就是用zip把两个列表包装起来:  for x, y in zip(list1, list2) 

  5. [noip模拟赛]某种数列问题<dp>

    某种数列问题  (jx.cpp/c/pas) 1000MS 256MB 众所周知,chenzeyu97有无数的妹子(阿掉!>_<),而且他还有很多恶趣味的问题,继上次纠结于一排妹子的排法以 ...

  6. 2019ICPC(银川) - Delivery Route(强连通分量 + 拓扑排序 + dijkstra)

    Delivery Route 题目:有n个派送点,x条双向边,y条单向边,出发点是s,双向边的权值均为正,单向边的权值可以为负数,对于单向边给出了一个限制:如果u->v成立,则v->u一定 ...

  7. 论redis的内存占用

    目前大部分成程序员都将一些数据放入到了缓存(redis)中,但是你是否对这个redis内存占用了解呢?下面我们就来说一下redis的内存最优使用: 1.我们首先来介绍一下我们在存入大量数据到redis ...

  8. [一、Jmeter5安装及环境配置]

    前言:Jmeter基于Jave底层开发,需要配置Java运行时环境 第一步:首先从Jmeter的官网下载Jmeter,Oracle官网下载Jave; Apache JMeter 5.2.1(需要Jav ...

  9. Apache本地服务器搭建(Mac版)

    由于Mac自带apache服务器,所以无需下载,apache默认处于开启状态. 可以在浏览器输入localhost,显示It works!,代表目前处于开启状态,默认文件目录为/Library/Web ...

  10. RedHat 6.7 使用 CentOS 6 的源

    1. 移除 RedHat 相关软件包 # yum -y remove subscription-manager and rh-check # rpm -aq | grep yum | xargs rp ...