使用Mybatis与直觉用jdbc相比,哪个更有优势?

简介: Mybatis如果仅仅是要【会用】,入门是非常快的,感觉两三天就可以搞好了。

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

在这里插入图片描述

认识Mybatis

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

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

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

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

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

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

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

在这里插入图片描述
Mybatis作为一个ORM框架,在市面上非常受欢迎,只要有JDBC基础,学会用很简单。

在这里插入图片描述

入门

使用Mybatis的步骤大致如下:

1.引入pmo依赖
2.Mybatis的配置文件
3.编写映射文件
4.得到sqlsession执行语句
5.关闭session

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

在这里插入图片描述
随后,我们编写一个工具类来获取sqlSession,这个SQLSession相当于JDBC的Connection对象。

在这里插入图片描述
然后编写我们的映射文件,这个映射文件实际上就是对象与数据库的映射关系:

在这里插入图片描述
我们在映射文件上使用标签来实现插入:

在这里插入图片描述
然后调用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-plusMybatis-plus又是程序员偷懒造出的轮子(狗头)

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

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

在这里插入图片描述

相关文章
|
4月前
|
druid Java 数据库连接
SpringBoot原理分析 | Spring Data整合:JDBC、Druid、Mybatis
SpringBoot原理分析 | Spring Data整合:JDBC、Druid、Mybatis
65 0
|
4月前
|
Java 数据库连接 数据库
Mybatis JDBC No enum constant org.apache.ibatis.type.JdbcType.TEXT异常处理
Mybatis JDBC No enum constant org.apache.ibatis.type.JdbcType.TEXT异常处理
79 0
|
1月前
|
SQL Java 数据库连接
【Mybatis】从 JDBC 到 MyBatis
【Mybatis】从 JDBC 到 MyBatis
26 0
|
4月前
|
SQL Java 数据库连接
(干货)老大:你为什么要用Mybatis,JDBC存在哪些问题?
(干货)老大:你为什么要用Mybatis,JDBC存在哪些问题?
29 0
|
6月前
|
SQL Java 数据库连接
21MyBatis - 再谈MyBatis优势
21MyBatis - 再谈MyBatis优势
21 0
|
druid 前端开发 Java
Spring boot整合<Mybatis【对JDBC的封装】>,Druid连接池
目录 文件目录层次和等级: 第二依赖: 第三配置文件: 第四创建文件:
117 0
Spring boot整合<Mybatis【对JDBC的封装】>,Druid连接池
|
10月前
|
SQL 存储 Java
如何模拟MyBatis对象映射赋值的过程,以及如何通过这种方式来简化我们的JDBC开发工作?
如何模拟MyBatis对象映射赋值的过程,以及如何通过这种方式来简化我们的JDBC开发工作?
72 0
|
11月前
|
SQL 数据可视化 关系型数据库
【JavaWeb篇】使用MyBatis简化JDBC开发|解决SQL语句警告的问题
【JavaWeb篇】使用MyBatis简化JDBC开发|解决SQL语句警告的问题
74 0
|
Java 数据库连接 mybatis
jdbc和mybatis的流式查询使用
jdbc和mybatis的流式查询使用
403 0
|
SQL XML Java
jdbc与mybatis的比较
jdbc与mybatis的比较
239 0