• 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

  • 相关阅读:
    LeetCode 每日一题 2022/10/24-2022/10/30
    Spring IOC复习与回顾
    【python+appium】小程序自动化环境搭建(手动滑稽)
    tensorRT简明使用
    Python爬虫——Scrapy框架使用实例及执行过程
    mathtype符号显示不全的问题
    结构体的基础知识,足够详细
    Nginx与Spring Boot的错误模拟实践:探索502和504错误的原因
    Metabase学习教程:数据分析-1
    《网络安全笔记》第二章:Windows基础命令
  • 原文地址:https://blog.csdn.net/weixin_70730532/article/details/126651164