前言

只有光头才能变强。

文本已收录至我的GitHub精选文章,欢迎Star:https://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文档。说实话,打造这么一个文档花了我不少的时间

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

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

各类知识点总结

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

  • 92页的Mybatis
  • 129页的多线程
  • 141页的Servlet
  • 158页的JSP
  • 76页的集合
  • 64页的JDBC
  • 105页的数据结构和算法
  • 142页的Spring
  • 58页的过滤器和监听器
  • 30页的HTTP
  • Hibernate
  • AJAX
  • Redis

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

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

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

总结了Mybatis,原来知识点也没多少嘛相关推荐

  1. java plus方法_Java中MyBatis Plus知识点总结

    好程序员Java教程分享MyBatis Plus介绍: 1.MyBatis Plus 介绍 MyBatis Plus 是国内人员开发的 MyBatis 增强工具,在 MyBatis 的基础上只做增强不 ...

  2. python有类似mybatis的框架_为什么感觉国内比较流行的 mybatis 在国外好像没人用的样子?...

    89 2019-03-30 21:23:21 +08:00   1 看了这么多回复.忍不住了! 1. hibernate 历史悠久并不代表过时,mybatis 这种方式就是未来吗?肯定不是.数据库就是 ...

  3. Mybatis+spring知识点

    Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动.创建连接.创建statement等繁杂的过程 程序员直接编写原生态 ...

  4. 【MyBatis】MyBatis是什么?能干什么?一篇学习MyBatis,知识点详细解释,实例演示

    文章目录 MyBatis 1.简介 1.1 什么是MyBatis? 1.2 如何获得MyBatis? 1.3 持久化? 1.4 持久层? 1.5 为什么需要Mybatis? 2.第一个MyBatis程 ...

  5. Mybatis基础知识点:trim标签的使用

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:wt_better blog.csdn.net/wt_bet ...

  6. Mybatis 常见知识点问题

    1.resultType 和resultMap 的区别? resultType 是<select>标签的一个属性,适合简单对象(POJO.JDK 自带类型:Integer.String.M ...

  7. Mybatis 核心知识点整理成图

    文章目录 Mybatis开发流程 传统开发简要流程 接口代理开发简要流程 接口开发六点注意事项 sqlMapperConfig 核心配置文件 mybatis相关API 输入输出映射 常用动态Sql标签 ...

  8. MyBatis框架知识点大全,从0到1(配置文件和使用、手动和全自动映射、lombok使用、Mybatis测试工具类、动态SQL、通过注解来实现动态SQL和手动一对一、一对多、多对多映射)

    MyBatis框架 这里写的感觉有点多,到时候拆开发,需要哪看目录就好

  9. 2023年第八周总周结 | 开学倒数第一周

    为什么要做周总结? 1.避免跳相似的坑 2.客观了解上周学习进度并反思,制定可完成的下周规划 一.上周存在问题 发现自己反复犯同样问题,不想反思就不会意识到. 总想以面带点的学习,实际上却在原地踏步. ...

最新文章

  1. SAS宏技术中,%let和call symput有什么区别?
  2. php红色字体颜色,php生成文字颜色渐变 高级用法
  3. ES2020 中 Javascript 10 个你应该知道的新功能
  4. SQL.H 通过此文件寻找sqlAPI编程的一种捷径
  5. 【GNN】图神经网络综述
  6. 苹果mac幻灯片演示文稿制作软件:PowerPoint 2019
  7. Unity UGUI优化:解决EventSystem耗时过长的问题 第一部分
  8. 玉禾田环境金蝶云ERP操作手册
  9. vfp体积计算机程序,计算机vfp教程第9章 报表与菜单设计
  10. Matlab图像显示
  11. 黑客小C小游戏(DEVC++)时不时会更新
  12. 雨点效果——HTML5之特效
  13. 各位大佬们,萌新发个锁机源码
  14. AWS ARN 学习
  15. Unreal Engine 4 问题:如何设置分辨率
  16. web安全攻防渗透+赵雨佳43
  17. Wincc 7.5 SP1使用VBS创建Excel日报表并显示在画面
  18. 聊聊请教技术问题的正确方式
  19. 了解return的用法
  20. 最低仅需万元到手,Gooxi AMD Rome平台服务器特价啦

热门文章

  1. java网络编程作业基于UDP简单聊天窗口,图形化界面,包含客户端和服务端
  2. vue2/vue3详细知识点
  3. 黑龙江省扶贫电商平台“小康龙江”上线 传输绿色优质农产品
  4. 私厨菜谱app的设计与实现(三)
  5. 微信小程序background-img问题
  6. 动手写操作系统9----键盘鼠标中断实现
  7. DELETE * FROM和DELETE FROM的区别
  8. matlab中的spline,在MATLAB中与spline(x,y,xi)插值效果相同的命令是( )
  9. Matlab 绘制零极点图
  10. AMD,在竞争中蜕变!