00:00
好,我们今天呢,就一起来学习一下我们这个马贝利斯框架,那我们基于马贝利斯三来进行讲解,那马贝利三以前像二的这些版本,人家也都不叫马贝蒂斯了,人家叫阿贝蒂斯,哎,这个呢,就原本是我们阿帕奇下的一个项目,但是呢,我们这个项目的这个开发团队转战到了这个谷歌旗下一转战以后呢,然后他把这个框架就改名了,就要马贝蒂斯了,而且他们转战的时候呢,正值我们马贝蒂斯3.0发布的时期,所以说呢啊,我们以后所说的马贝蒂斯其实就是啊贝蒂3.0以后的版本,那么呢啊,如果大家去看咱们这个招聘说什么啊,熟练掌握啊贝蒂斯,马贝蒂斯那基他们基本上都是在说一回事好。那么呢,我们这个马贝丽斯啊,它是一个非常优秀的持久化层框架,这个持久化层呢,也就是我们所谓的跟数据库进行交互的框架。
01:01
而跟数据库进行交互的技术啊,我们其实大大小小前前后后已经也学了非常多了,哎,比如从我们最一开始的原生的JDBC操作,哎,每一步呢都比较多,比较烦,我们计划到了使用了一个小工具叫DBU,哎,这是我们阿帕奇的一个工具,它里边呢有一个cor runner。哎,我们用它执行增删改查也是非常方便,再包括我们再到后来学习spring的时候,Spring框架呢,也提供了咱们跟数据库交互的orm模块,而它呢,我们用了一个叫j dbc complete这些东西呢,我们也顶多只能称作为一个小工具,而小工具呢,它跟框架的区别还是挺大的,我们这个框架一定是一个整体解决方案。哎,这就像我们洗衣服时候,哎,你手工用搓衣板啊,虽然替代了你一部分工作,和你把衣服放进洗衣机里进行洗衣的这个效果一样。然后呢,我们框架是一个整体解决方案,我们跟数据库交互,不只是发circle口执行这么简单,如果是框架呢,你可能得考虑到众多的因素,比如我们如何进行事物控制,哎,比如呢,啊,我们如何实现这些查询缓存等等等等部分字段映射啦,这些特性你都得考虑。而工具就简单了,我发个circle口一执行封装结果就完事。好,但是呢,我们来使用这些小工具,不管怎么说,哎,我们以前接DBC的步骤,哎,也非常简单,比如呢,我们先编写一个三口语句。
02:43
哎,接下来呢,我们可以预编译一下这个SQL语句,我们回顾一下啊,预编译整个SQ语句,预编译完了以后呢,我们接下来去设置参数,哎,预编译完了给circle里边得设置参数,好参数呢,设置完了以后呢,我们还得干嘛啊,哎,是不是执行circle啊,哎,执行咱们这个circle circle执行完了以后呢,我们又去。
03:07
啊,尤其在这封装结果啊,如果是一个查询,那就得封装结果,所以说呢,我们以前的哎来写跟数据库交互这么几步我们都得走,那么呢,即使我们用了这些数据库的小工具,只是在每一步非常简化啊,而我们框架呢,就不一样了,如果说框架。哎,我们学过一个框架叫harbernate,哎,这是一个大名鼎鼎的框架,我们之所以不用工具,哎因为它的这个功能单一,哎,功能简单,哎功能比较简单,考虑的不周到。第二个呢,也是因为SQL语句,SQL语句编写在咱们这个Java代码里边,有同学说这个编Java代码里边不都这么做吗?哎,其实你这么做也没问题,但是如果出现这些情况,我们实际项目上线的时候,哎,我们经常写的那些复杂的查询,可能之前没优化好,哎我们经过DBA优化以后呢,我们有一个新的circle口了,把这个circle口我们想替换旧的circle口,那这样如果你写在Java代码了,你把这个项目,哎,打开找到我们源码所在的位置,把这个SQ语句一改,改掉以后呢,整个项目再重新编译打包部署运行啊,一连串操作。这是。
04:29
很烦人的,所以说呢,我们编写在Java代码里边,这种硬编码高耦合的方式。高耦合的方式在任何时候我们都不是推荐的方式,而我们接下来来看用框架,哎我们这个哈net呢,它是一个非常优秀的全自动框架,哎,全自动全自动啊框架,这是一个全自动的orm框架,哎我们所谓的orm呢就叫对象,哎,Object relation关系映射,对象呢指的就是我们这个我们要将JA并对象跟数据库里边每一条记录的关系,哎,Relation就指跟数据库每一条记录的关系来进行一一映射,说一个扎并对象对应数据库的一条记录,哎,所以说呢,每一个omm框架他们都是想要干这个事的,要把扎B哎映射成跟数据库。
05:27
映射成咱们数据库里边的一条记录。Record。好,映射成这么一条记录,那如果是我们哈,Net怎么做呢?哎,你不管是什么OM框架,你要操作数据库,哎,接DBC这几步那是必然的,因为这是我们这个JDBC就是标准CTRLC抗容易我们要执行这几步,而如果是har net,哎。我们说大家都知道大名鼎鼎的harbern net,他的最大优点就是只在咱们这消除circle口,哎他希望呢,开发人员即使不懂SQ框架,用起来直接就完成把我们这个扎并跟数据库记录的映射这些步骤,哎你全部那一项你都不用清楚,哎全部都是一个黑操作是吧,这是一个黑箱操作,哎你不用清楚任何一步,在这些里边呢,都是harber net自动来搞,哎你只需要告诉harber net这个扎宾对象对应数据库这的哪哪个数据表,也就说呢,这样的话呢,我们拿对象就是从数据库中拿,我们非常省心,但是这么省心也会有一些问题,什么问题呢?哎,我们来看啊,如果你这个消除蛇口了。
06:46
哎,我们这个circle我们自己不编了,那这个自己不编我们可想而知啊,我们这个circle一旦自己不编写以后,那我们说circle啊,这些circle语句它是框架自己发的,框架自己发的circlel语句你能优化吗?哎,是不是没法优化,这是第一点,第二点我们有些复杂的查询,我们都要定制circle口的啊,不用框架自己写的,因为我们定制的话呢,可以来做一些优化,要定制蛇口的话呢,那就非常麻烦,你可以来学习。
07:20
哎,学习我们哈勃net中有一项技术叫HQL,它支持定制折扣,哎,这无疑又加重了我们学习负担,所以说呢,整个黑箱操作会导致我们在关键环节,哎,我们没法自定义SQ语句啊,这是我们跟数据库交互的命脉,比如说呢,我们一定哎不要让框架自动生成啊,或者呢,我们要经常来做优化啊,所以说呢,我们最终希望的效果就是。哎,我们希望最好呢,咱们这个circle语句,语句交给交给我们开发人员,开发人员编写,这样的话呢,我们可以定制随意优化都行,我们我们写一个最优的色口,哎,来加快系统的运行速度,这都还好,而我们哈奈中呢,还有一个这个缺点,它是全自动全映射,这个全映射呢,也就是说哎。
08:19
我们扎B假设有100个字段,那么数据库的这一条记录,哎每就会有100列,哎,这个也是有100个字段与它对应,那我们假设我们查一员工这张表,我只想要员工的username用户名,而这一块呢,你就没法做到,只要用只要这一个字段一查,就是100个字段全映射W里的每一个数性跟数据库记录进行映射,而你想要做到,哎,行,麻烦你把这个HQL给我学的好好的,把have ne,每一种查询啊方式你给我学的非常清楚,掌握内部原理以后你再去写。所以说呢,无疑我们一开始在用它的时候还感觉挺好的,哎,我什么都不用懂,直接一用就OK了,但是你会发现整个项目写到最后,100%的项目都会牵扯到S口用化优化和定制S口,所以说呢,你。
09:17
不得不去学这个HQL以及net的一些查询策略啊,所以说无疑加重了哈,Net相当于体先我们用起来好玩,但是呢,最后我们加重了我们的学习负担,哎,而我们这个呢,我们希望最终,哎,你把SQL语句也别也别自动发了,希望我们开发人员来编写,而且呢,我们还希望。啊,希望我们能完成一些我们定制的功能,这样的话呢,我们希望咱们这个circle啊,不失去灵活性。比如说呢,只有我们自己来写circleq了,因为circleq语句是我们与数据库交互的命脉,所以说这个千万不能交出去,那这样的话呢,哎,我们马贝蒂斯就出来了,诶你的哈net不是全是黑箱操作吗?好,我们马贝蒂斯就不一样,还是这一套流程,而在我们马贝蒂斯中呢,这一套流程他要操作这一套呢,没有黑箱操作来全部可以透明给你,但是呢,你要说全透明的肯定有问题了,不可能我每一步是不是都啊,我都用框架了,每一步还都自己写嘛,当然不是这一块呢,他把最重要的编写circle口,哎,它提交提取出来,写成一个配置文件的方式,这样的话呢,你可以把circle语句写在配置文件中,而剩下的这些预编译、设置参数、执行S以及封装结果工作都由我们马贝蒂斯自动完成,所以说呢?
10:57
相当于我们马贝蒂斯,诶,只把我们这个命脉交给程序员,这样的话我们就实现我们的需求了,Circle狗啊,与咱们的Java编码。
11:10
分离。这是第一点,而且呢,Circle也不是框架自动发的,Circle是我们开发人员控控制,这样的话我们就会实现一个非常好的效果,哎,我们这个circle与Java编码分分隔开来,哎,我们这个呃,解耦了,一解耦以后呢,我们这个配置文件里边的circleq就只解决我们跟数据库里边数据记录映射的这个一块领域,哎,解决我们数据交互,而Java编码呢,它里边就是我们业务逻辑,所以说呢,分的非常清楚,这样的话呢,哎,我们用起来也就非常好用,哎这是我们马菲丽斯他这么来做,而且学马贝利斯呢,哎,你不用学什么,呃,各种QL你只需要,只需要掌握好circle就行了,掌握好咱们这个circle语句,就是说呢,你把circlel语句写在配置文件中,马贝蒂斯给你,帮你执行封装,结果这些事都来做,所以说。
12:13
那呢,我们把马贝蒂斯也成为一个半自动框架,因为哈ber net是全自动的,这在你看来只有一个扎B跟数据库记录所有的东西,哈内全部自动映射生成,而我们马贝蒂斯呢,将我们核心步骤交了出来,诶也就说我们这个全自动洗衣机,它不一定在任何时候都是好用的,有些衣服,哎整个洗流程洗完以后,最后一步,比如有些衣服不能甩干,只能慢慢的烘干,所以说呢,我如果用哈net e EE给你甩干了,那就没你事了,所以说呢,我们马贝斯把关键步骤交出来,留给我们控制,这样的话,哎,就是一个非常优秀的框架,哎它呢也是一个轻量级的,哎,它非常轻量。
13:03
轻量级来轻量级,轻量级的,它是一个轻量轻。样起的框架,比如说呢,我们这个它的学习代价也是非常低的,不像har net,你一开始呢,学一点感觉好像够用了,但实际开发的时候,你把哈net整个都得学的非常透好,这也就是我们用马贝蒂斯的原因,那么呢,我们来看啊,比如呢,这个什么简介历史大家也可以来看,那么这个马贝蒂斯呢,哎,它最终呢又迁移到giarhab下,如果我们要去下载马贝蒂斯也得去这儿下载,这些呢我们就不说了,我们把这个对比,哎大家一定,哎在脑海中现在有这么一个印象,我们马贝利斯能实现我们的需求,把Q语句单独提取出来,然后呢,哎以咱们实现SQL语句定制化,然后其他流程还是自动化,诶,介于全自动以与我们JDBC纯手工之间的一个半自动框架,诶它非常好用。那我们接下来就来看马。
14:12
如何使用?
我来说两句