ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

mybatis 面经总结

2022-09-11 22:04:28  阅读:279  来源: 互联网

标签:总结 xml 封装 对象 面经 MyBatis Statement sql mybatis


全自动ORM与半自动ORM的区别:都是对JDBC的封装,全自动把SQL也封装了,程序员不需要写sql,mybatis没有封装sql,只封装了加载驱动、建立连接、创建 Statement 对象、处理返回结果、关闭连接。

MyBatis 的 xml 映射⽂件和 MyBatis 内部数据结构之间的映射关系:MyBatis 将所有 xml 配置信息都封装到对象,每个标签都对应一个对象。 执行器Executor:   SimpleExecutor:每执⾏⼀次 update 或 select,就开启⼀个 Statement 对象,⽤完⽴刻关闭   ReuseExecutor:执⾏ update 或 select,以 sql 作为 key 查找 Statement 对象,存在就使⽤,不存在就创建,⽤完后,不关闭 Statement 对象,⽽是放置于 Map<String, Statement>内,供下⼀次使⽤。简⾔之,就是重复使⽤ Statement 对象。   BatchExecutor:执⾏ update(没有 select,JDBC 批处理不⽀持 select),将所有 sql 都添加到批处理中(addBatch()),等待统⼀执⾏(executeBatch()),它缓存了多个 Statement 对象,每个 Statement 对象都是 addBatch()完毕后,等待逐⼀执⾏ executeBatch()批处理。与JDBC 批处理相同。 MyBatis 是如何将 sql 执⾏结果封装为⽬标对象:1.<resultMap>  2.别名 (忽视大小写) ;有了列名与属性名的映射关系后,MyBatis 通过反射创建对象,同时使⽤反射给对象的属性逐⼀赋值并返回,那些找不到映射关系的属性,是⽆法完成赋值的。 动态SQL:https://cloud.tencent.com/developer/article/1943349    https://segmentfault.com/a/1190000039335704 分页:   物理分页:limit ,pagehelp插件,拦截SQL后重写limit   内存分页:rowband,容易oom #{}与${}: 前者是预编译,SQL结构已经固定,会把#{}转换为?,调用PreparedStatement的set方法来赋值。后者是把{}内的值替换 dao接口全限定名+方法名与xml的namespace+id对应,接口方法内的参数就是传给sql的参数。接口全限定名+方法名 对应key,value为一个mappedstatement。 每个sql语句都会被解析为一个mappedstatement对象。 Dao 接⼝⾥的⽅法可以重载,但是xml里的id不能重复。(一个id可以对应多个接口重载方法,然后根据动态sql对应) dao原理:JDK动态代理,代理对象拦截接口方法,然后执行mappedstatement所代表的sql。  

标签:总结,xml,封装,对象,面经,MyBatis,Statement,sql,mybatis
来源: https://www.cnblogs.com/sjj123/p/16684924.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有