面试题(3)——mybatis,springMVC

1 Mybatis

1 #{}和${}的区别是什么?

而${}不会被预编译,直接被解析为参数;

#{ }
表示一个占位符号(和传统jdbc中的?作用一致),可以实现preparedStatement 向占位符中设置值, 自动进行 java 类型和 jdbc 类型转换。可以接收简单类型值或 pojo 属性值。如果parameterType 传输单个简单类型值, #{}括号中可以是 value 或其它名称。在预编译的时候会把参数解析为占位符?,进入数据库后会把?替换成具体的属性值,需要进行数据类型装换,能有效防止sql注入;

$ { }
表示拼接sql串通过,$ {}可以将 parameterType 传入的内容拼接在 sql 中且不进行 jdbc 类型转换, ${}可以接收简单类型值或 pojo 属性值,如果 parameterType 传输单个简单类型值, ${}括号中只能是 value。可能发生sql注入,因为在动态解析的时候会把这部分sql语句当做sql片段进行sql拼接而不会发生数据类型的装换,到数据库之后就会变成一个已经定型的sql语句了。

2 mybatis有几种分页方式?

1.数组分页,先从数据库中查出全部的数据,然后再在合中截取对应页的数据;
2.SQL分页,通过limit 开始下标,查询条数 查询出数据;
3.拦截器分页

3 mybatis 是否支持延迟加载?延迟加载的原理是什么?

延时加载:先单表查询,当需要时才从关联表中关联查询;相当于是把关联查询分为多次单表查询;
原理:动态代理;单表查询出的关联属性为空值,需要时在做关联表的单表查询并赋值;
Mybatis association和collection实现延迟加载;

4 mybatis的一级缓存和二级缓存?

https://blog.csdn.net/weixin_45044097/article/details/103009667

5 mybatis和hibernate的区别有哪些?

Hibernate是全自动,而mybatis是半自动的ORM框架;
Mybatis可以编写原生态的SQL,SQL优化,严格控制SQL性能,灵活度高;适用于变化迅速的需求;
Hibernate对象/关系映射关系强,数据无关性好;

6 mybatis 有哪些执行器(Executor)?

在这里插入图片描述

2 springMVC

发布了79 篇原创文章 · 获赞 7 · 访问量 1811

猜你喜欢

转载自blog.csdn.net/weixin_45044097/article/details/103037219