Mybatis是一个映射的封装,他将代码块中的sql存在统一的xml文件也就是SqlMapper中。同时他将你执行的sql传参进行也就是执行变量进行了通配,然后映射到model中。
mybatis中的大致执行过程:通过factory方法获取sqlSession,通过MapperProxy代理到dao--执行底层数据库操作,===“据经过controller 再经过service 然后执行service中的相关方法并关联到mapper 再执行mapper.xml中的sql语句"
以下是JDBC和Mybatis的区别
JDBC:
(1) 加载JDBC驱动,建立并获取数据库连接,创建statement对象
(2) 设置SQL语句的传入参数
(3) 执行SQL语句并获取查询结果
(4) 对查询结果进行转换处理并将处理结果返回
(5) 释放资源
Mybatis:
(1) 连接池,dataSource,在驱动并连接的这个过程中优化并解耦
JDBC第一步其实从效率角度来看是不合适的,因为无论什么数据库都不可能支撑随机和庞大的连接数,而且必不可免存在连接浪费的情况,Mybatis封装了这些优化的方法
(2)统一sql存取到XML
如果代码写在java块中,在团队中很可能出现两个交叉的业务代码使用类似的sql,而开发人员本身没有交集,那么就会出现重复无用的SQL,而对SQL的修改代表对java文件的修改,需要重新编译和打包部署。
Mybatis将sql统一存取到xml中,就算业务交叉,由于统一配置的缘故,sql在xml中一目了然,两个跨组的程序员可以看到对方的sql,来判断自己是否需要重用,使用xml可以减少代码配置。
此外在java代码中拼写长SQL太恶心了
(3) 参数和结果集映射
sql的方式传入需要的参数,如果存在多条件“或类型”的查询,那么就代表你必须传参进行SQL拼接,就算使用xml的方式的方式也不行。要么每个业务独立配置xml中的sql,要么还是写入java代码中,或者以工具方式进行自动拼接
Mybatis使用映射的方式,方便model管理参数,同时以解析器的方式将参数动态凭借到sql,由于是model映射,查询结果可以统一映射,而且mybatis对查询结果集对了缓存处理,使得重复查询进行了进一步优化
(4)对多重复sql进行复用封装
比如模板方法,将常用sql模块化,直接调用。比如通用的save和getID之类的,只有表名和字段名有变化