• mybatis面试题及回答


    1、什么是mybatis?ORM是什么?JPA是什么?
    2、讲下mybatis的缓存?
    1一级二级都是基于PerpetualCache的HashMap本地缓存;
    2一级缓存是SQLSession级别的,默认是开启的,当Session Flush或close之后,缓存就会清空;
    3二级缓存的作用域是mapper的同一个namespace,默认是关闭的,并且可以自定义存储源,如EHcache,开启二级缓存需要实体类实现序列化接口,然后在Mapper中配置cache标签;
    4当某一个作用域进行了增删改操作后,默认将该作用域下所有缓存清空;
    3、mybatis的优点和缺点?
    优点:
    1mybatis完全把sql语句从程序代码中抽离出来,放在单独的xml文件中,为程序的维护带来了便利;
    2mybatis底层封装了jdbc的调用细节,能将查询的结果集自动封装成java bean对象,消除了大量的冗余代码
    3程序员自己编写sql,可以结合数据库的自身特性,灵活控制;
    4能够很好的与spring集成
    缺点:
    1当字段名多、关联表多的时候,sql语句的编写工作量很大;
    2sql依赖于数据库,导致数据库的移植性差;
    4、mybatis是如何进行分页的?分页插件的原理是什么?
    a、使用rowbounds对象进行分页,他是针对ResultSet结果集执行的内存分页;
    b、使用sql语句分页;
    c、使用分页插件进行分页;
    原理:实现了mybatis提供的接口,实现了自定义插件,在插件的拦截方法中拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和参数;
    5、简述mybatis的插件运行原理,以及如何编写一个插件?
    原理:mybatis只能编写针对于ParameterHandler、ResultSetHandler、StatementHandler、executor这四个接口的插件,mybatis是通过动态代理来实现接口方法的拦截功能,每当执行这四种接口对象的方法时,就会进入拦截方法,是属于AOP的思想。
    自定义插件:实现Interceptor接口并实现intercept()方法,然后给插件编写注解,指定需要拦截哪个接口的哪些方法,然后在核心配置文件中添加自定义的插件;
    6、mybatis动态sql是做什么的?有哪些标签?原理是?
    动态SQL:可以让我们在xml映射文件中,以标签的形式完成逻辑判断、动态拼接sql的功能
    9个标签:trim where if set foreach choose when otherwise bind
    原理:使用OGNL从sql参数对象中计算表达式的值,然后根据这个值去动态拼接sql;
    7、#{}和${}的区别是什么?
    1前者为预编译处理,后者为字符串替换;
    2前者会将sql语句中的#{}替换为问号,然后使用P

  • 相关阅读:
    【精选】JSP技术知识点大合集
    Himall商城类型帮助类将string类型转换成int类型
    【笔记】samba shell 脚本 离线安装 - Ubuntu 20.04
    图像处理入门:从平滑到面积测量的C++实践指南
    k8s-实战——kubeadm二进制编译
    西电算法第一次上机习题讲解
    【保姆级】VitePress 新建项目+部署Github Pages流程+常见报错处理
    理财基金行情数据查询
    富文本编辑器 ck-editor5 的使用
    sqllabs通关笔记
  • 原文地址:https://blog.csdn.net/weixin_70730532/article/details/126651164