Mybatis是一个基于Java的 持久层 框架:
什么是持久层呢?
- 去过网吧的小伙伴很清楚,当你关机后无论你曾经下载过什么东西,都会销声匿迹。
那么我们如何将我们的数据保存下来呢?
存在到文件中或者数据库中,就可以实现这个效果,这就是持久化:即将数据到持久的保留下来。
持久化:数据从瞬时状态变为持久状态。
持久层:完成持久化工作的代码块。 – Dao
Mybatis就是帮助开发者 将数据存入到数据库中,和从数据库中取数据。
MyBatis是一个半自动化的 ORM 框架:
半自动化是什么?
-
说半自动化时我们先来说说什么是自动化?
假设小明(伴随一生的小明,hh)的班级里面有一个山大王,每次都让小明给他写作业(包括山大王的
名字),即小明完成了山大王的所有任务,山大王只管去泡美眉(嘻嘻)。这个就是简单的自动化,即一个框 架只需要一个命令就完成了所有的任务。
引出半自动化:
-
有一天山大王换了一个新本子,小明不小心在本子的皮上写上了自己的名字,结果被老师发现,痛骂了山大王,之后山大王开始乖乖的写自己的名字,但是里面的作业还是小明帮忙写的,不时的会自己补充点内容(魔高一尺,道高一丈哟)。**对应到
MyBatis 中,就是 SQL 语句(当然不止)还是我们需要自己写的,即半自动化。 -
相信到这里你会有些许的疑问,既然都有自动化这么方便的东西了为什么还要搞半自动化呢?大家不是都说要提高效率吗,显然自动化不是效率更高吗?别慌,让我们带着这些疑问继续往下走(下面会有详细的说明)。
ORM 什么?
-
ORM 是 Object、Relationship、Mapping 的缩写,即对象关系映射。
在这其中有几种关系映射(现在不懂没关系,在代码中会有更多的感悟):
1.一张表对应一个类(实体类) STUDENT表对应Student TEACHER表对应Teacher类
stu_student StuStudent
cn.bean.Student student n_student
2.一行记录对应一个对象,比如 student表有50条记录,创建50个Student对象
3.一个列(字段)对应一个属性,列的类型和属性的类型一致 列的名字和属性的名字一致 入乡随俗
4.teacher和student表中外键,映射为对象类型或者集合。
为什么更多的选择 半自动化(Mybatis) 而不是 自动化 (Hibernate )?
- Mybatis 和 hibernate 不同,它不完全是一个 ORM 框架,因为 MyBatis 需要程序员自己编写 Sql 语句,不过 mybatis 可以通过 XML 或注解方式灵活配置要运行的 sql 语句,并将java 对象和 sql
语句映射生成最终执行的 sql,最后将 sql 执行的结果再映射生成 java 对象。- Mybatis 学习门槛低,简单易学,程序员直接编写原生态 sql,可严格控制 sql,执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,例如互联网软件、企业运营类软件等,因为这类软件需求变化频繁,一但需求变化要求成果输出迅速。但是灵活的前提是
mybatis 无法做到数据库无关性,如果需要实现支持多种数据库的软件则需要自定义多套 sql 映射文件,工作量大。- Hibernate 对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件(例如需求固定的定制化软件)如果用 hibernate 开发可以节省很多代码,提高效率。但是Hibernate 的缺点是学习门槛高,要精通门槛更高,而且怎么设计
O/R映射,在性能和对象模型之间如何权衡,以及怎样用好 Hibernate 需要具有很强的经验和能力才行。
总之,按照用户的需求在有限的资源环境下只要能做出维护性、扩展性良好的软件架构都是好架构,所以框架只有适合才是最好。
原文链接:https://blog.csdn.net/weixin_45930636/article/details/104432718
与传统的JDBC相对比有哪些优点?
相信大家在刚开始都是使用的 JDBC 进行与数据库之间的操作,在使用 JDBC 时,
会有重复的代码块。
比如数据取出时的封装,数据库的建立连接等等。
框架能带给我们哪些好处呢?
1、减少重复代码。
2、提升开发效率。