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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值