1>MyBatis中的#{}和 ${}的区别是什么
同:
都是动态传递参数的方式
异:
1)#{}是占位符,作用sql预编译,变量替换为?,替换后,变量自动加引号
2)${}是拼接符,作用字符串替换,即sql拼接
3)#{}能防止sql注入,提高系统安全性
2>在Mapper中如何传递多个参数
1)dao层的函数 #{0}或者#{arg0}代表接收的是dao层第一个参数,以此类推
2)使用@param注解
3)在mapper中多个参数封装成map集合或者实体
3>项目中常用的MyBatis标签有哪些
1)增删改查 insert delete update select
2)foreach
3)set
4)if
5)where
4>讲讲MyBatis的一级 二级缓存
mybatis系统当中默认定义了两级缓存:一级缓存和二级缓存
1)一级缓存:是HashMap本地缓存,存储作用域是session,默认开启,与数据库同一次会话期间查询到的数据会放入的本地缓存当中
2)二级缓存:与一级缓存机制相同,HashMap存储,但存储作用域是Mapper(Namespaces),需要手动配置,实现Serializable序列化接口
3)对于缓存数据更新机制,当某一个作用域(一级Session/二级Namespaces)的进行了CUD操作后,默认该作用域下所有select中的缓存将被clear
5>MyBatis是否支持延迟加载,如果支持,它的实现原理是什么?
支持 但只支持association关联对象和collection关联集合对象的延迟加载,在配置文件配置是否启用
实现原理:
使用CGLIB创建目标对象的代理对象,当调用目标方法时,进入拦截器方法,比如调用a.get(B).getName(),拦截器invoke()方法发现a.get(B)是null值,那么就会单独发送事先保存好的查询关联B对象的sql,把B查询出来,然后调用a.setB(b),于是a的对象b属性就有值了,接着完成a.get(B).getName()方法的调用,这就是延迟加载的基本原理.
6>Spring的AOP理解,应用场景有哪些
事务管理,记录日志,缓存优化,权限控制,监控性能
7>SpringMVC怎么样设定重定向和转发的
1)转发:在返回值前加"forward"
2)重定向:在返回值前加"redirect"
8>罗列一下SpringMVC中Web层的常用注解
@EnableWebMvc
@Controller
@RequestMapping
@ResponseBody
@RestController
@ControllerAdvice
9>我们要接收前端传入的JSON字符串,我们需要在参数上贴什么注解
@RequestBody
10>SpringMVC的执行流程
1)用户发送请求到前端控制器dispatcherServlet
2)dispatcherServlet收到请求后,调用handlerMapping处理器映射器,请求获取Handle
3)处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器,一并返回给dispatcherServlet
4)dispatcherServlet调用handlerAdapter处理器适配器
5)处理器适配器经过适配调用后端控制器handler
6)后端控制器执行完成返回ModelAndView
7)处理器适配器将handler执行结果ModelAndView返回给dispatcherServlet
8)dispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析
9)视图解析器解析后返回具体View
10)dispatcherServlet对View进行渲染视图
11)dispatcherServlet响应用户