一、什么是Mybatis

1.Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发只需关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接写原生态sql

2.MyBatis可以使用XML或注解来配置和映射原生信息,将POJO映射成数据库中的记录

二、RequestMapping、RequestBody、ResponseBode的区别

1.RequestMapping:前台访问后台,以指定路径访问,可以用来类上,也可以用在方法上

2.RequestBody:用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口,将读到的内容(json数据)转化为java对象并绑定到Controller方法的参数上

3.ResponseBody:用于Controller方法返回的对象,通过springmvc提供的HttpMessageConverter接口转化为指定格式的数据,json,通过Response相应给客户端

mybatis常见面试题

mybatis常见面试题

三、#{}和${}的区别是什么

#{}是预编译,${}是字符串替换。

MyBatis在处理#{}时,会将sql的#{}替换为?号,调用PreparedStatement的set方法来赋值

Mybatis在处理${}时,就是把${}替换成变量的值

使用#{}可以有效防止SQL注入,提高系统安全性,例子如下:

mybatis常见面试题

四、当实体类的属性名和表中字段名不一致,怎么办

1.直接在sql语句中定义别名,让字段名的别名和实体类的属性名一致

mybatis常见面试题

2.通过<resultMap>来映射字段名和实体类属性名一一对应

mybatis常见面试题

五、mysql的like模糊写法

mybatis常见面试题

六、通常一个Xml映射文件,都会写一个Dao接口对应,请问这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗

答案如下图:

mybatis常见面试题

七、Mybatis动态sql有什么用?

Mybatis动态sql可以在XMl映射文件内,以标签的形式编写动态sql,执行原理是根据表达式的值,完成逻辑判断并动态拼接sql的功能。

Mybatis提供了9种动态sql标签:trim,where,set,foreach,if,choose,when,otherwise

八、关联查询

association是用于一对一和多对一,而collection是用于一对多的关系

mybatis常见面试题

九、Mybatis的懒加载

1.介绍:体现在<assocation和collertion>的参数中,当不需要连表的数据时,只加载当前的数据

2.配置如下:

mybatis常见面试题

3.sql编写如下:

ofType:指定了这个集合的存放类型

property:指定了这个集合在Teacher类的属性名

fetchType:指定了哪种加载方式

column:指定了上一条sql中查询的结果的哪一列的值会被传递到下一条sql中作为条件值

select:指定了下一条被执行的<select>的id名

mybatis常见面试题mybatis常见面试题

结果如下:

mybatis常见面试题

mybatis常见面试题

十、Mybatis的缓存机制
一级缓存:

1.Mybatis对缓存提供支持,在没有配置的情况下,只开启一级缓存

2.相对于同一个sqlSession,在参数和sql相同的情况下,使用同一个sqlSession对象调用同一个Mapper方法,往往只执行一次,因为第一次查询时,Mybatis将其放到缓存中,没有声明刷新和缓存超时,sqlSession都会取出当前缓存

3.一级缓存的生命周期

mybatis常见面试题

 

二级缓存:

1.返回的对象需要序列化

2.二级缓存配置

mybatis常见面试题

mybatis常见面试题

mybatis常见面试题

只执行sql一次:

mybatis常见面试题

相关文章: