Skip to content

1、Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?

*mybatis可以配置lazyLoadingEnable=true来支持延迟加载。

原理是使用CGLIB创建目标对象的代理对象,当调用目标方法时,进入拦截器方法,

假设我们查询用户,会缓存订单的查询sql,当我们调用订单的get方法时,代理对象就会调用缓存的查询sql。

2、谈谈mybatis的#和$区别是什么?

  • #号会进行预编译,$会进行字符串拼接。

  • #号会进行类型匹配,$不会类型匹配。

  • #号可以预防sql注入,所以一般能用#号的情况不使用$。

  • #号一般用于用户输入值,筛选条件。$号一般用于程序员赋值,如orderby ,表名*

3、MyBatis如何字符串拼接的?

*可以使用$号代替#号

可以使用sql原生的CONCAT语法

可以使用mybatis标签where if*

4、MyBatis的一级缓存和二级缓存的区别是什么?

*一级缓存默认开启,二级缓存手动配置

一级缓存是本地内存缓存,二级缓存是mybatis引用第三方缓存

一级缓存作用域是一个方法,二级缓存的作用域是一个mapper

一级缓存的生命周期是session的生命周期,二级缓存的生命周期是一段固定的时间。*