MyBatis组件与源码粗略解读

本文只是粗略的介绍MyBatis的各个组件和源码,并不精细,旨在对框架有一个粗略的认识,适合对MyBatis有一定理解的读者阅读。

目前互联网公司采用的ORM多是MyBatis,取代了风靡很久的Hibernate,总结几点原因(不限这几个):

1.Hibernate是全表映射,在更新数据的时候会非常不便,它需要把这条记录所对应的对象中的属性全部配置之后才能正确更新,然而,我们也许只需要改这条记录中的一个状态而已,无疑会很麻烦,如果采用MyBatis,利用动态SQL很容易就能解决这个问题。

2.MyBatis动态SQL能够根据不同的条件组装SQL,大大提高了SQL的灵活性,Hibernate在这点上远不能及,而且Hibernate在多表关联和复杂SQL查询支持较差,需要自己写SQL,返回后,需要自己将数据组装为POJO。

3.HQL性能较差,并且优化SQL困难。

Hibernate用起来会感觉有些笨重,这时候半自动映射的框架MyBatis应运而生。之所以说是半自动,是因为它需要手工配置POJO、SQL和映射关系,而全表映射的Hibernate只需提供POJO和映射关系即可。

MyBatis的基本构成:

1.SqlSessionFactoryBuilder

2.SqlSessionFactory(用来构建SqlSession,生命周期是在MyBatis应用的整个生命周期中,为了节约资源,每一个数据库只对应一个SqlSessionFactory)

3.SqlSession(相当于JDBC的Connection对象,生命周期是在请求数据库处理事务的过程中,线程不安全)

4.SQL Mapper(接口和XML组成,负责返送SQL去执行,并返回结果)

MyBatis的配置:

这些配置最后会被读入Configuration对象中,用来构建SqlSessionFactory及其他对象。

接下来,映射器是MyBatis最强大的工具,主要元素就是select,insert,update,delete,sql,resultMap等。

各种元素不细讲,这些元素网上一搜资料就有,简单易懂。

接下来,动态SQL,主要包含if,choose,when,otherwise,trim,where,set,foreach等这几个元素,动态SQL极大的提升了框架对于SQL的灵活性。

如果只是简单的运用框架,那么如果能够理解以上的内容,就已经可以了,细节不说。

但如果要理解插件的话,对框架源码就需要有一定程度的理解。

在此之前,需要对反射和动态代理技术有一定的认识,介绍一篇文章。动态代理

这里有篇文章,可以看一下。插件原理

其实上面的文章讲的已经非常细致了,如果看不懂,不如试着看看源码或者找些资料,如果只是粗通的话,相信对于有一定开发经验的人并不难。

映射器的内部组成:

1.MappedStatement(保存映射器的节点,包裹我们配置的SQL,resultMap等等)

2.SqlSource(它提供BoundSql对象,本身是MappedStatement的属性,主要用来计算动态SQL)

3.BoundSql(它是建立SQL和参数的地方,可以获取SQL)

SqlSession四大对象:

1.Executor(调度StatementHandler,ParameterHandler,ResultHandler来执行对应的SQL)

2.StatementHandler(使JDBC的Statement执行操作,四大对象核心)

3.ParameterHandler(用于设置参数)

4.ResultHandler(用户结果的封装)

SqlSession的运行原理十分重要,是插件的基础。可以查看MyBatis源码,其实源码较为简单易懂。

插件:

实现插件接口Intercept,重写其中的三个方法就可以编写自己的插件。主要就是拦截四大对象中的方法进行改写,原理并不难懂。

Intercept接口:

1.intercept方法会覆盖你所拦截的对象的原有方法。

2.plugin方法主要用来生成被拦截对象的代理对象。

3.setProperties方法用来设置配置的参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值