文章目录
- 1. 对比jdbc请简述Mybatis框架的好处有哪些?
- 2. 简述Spring的AOP,并说明其应用场景有哪些?
- 3. 介绍一下@ResponseBody注解
- 4. 简述SpringMVC执行流程
- 5. mybatis #{}和${}有什么区别
- 6. 简述@Param注解的用法
- 7. mybatis 中 ResultMap标签的属性都有什么?并说明作用
- 8. mybatis的mapper文件中 namespace属性的作用是什么?
- 9. ssm框架如何通过注解配置事务生效,说明一下步骤。
- 10. 简述session和cookie的区别及联系
- 11. 请解释Spring Bean的生命周期
- 12 .Spring Bean的作用域之间有什么区别
1. 对比jdbc请简述Mybatis框架的好处有哪些?
- 原先使用jdbc时
(1)每次CRUD都要写那六大步骤,太冗余了。
(2)频繁连接,释放数据库资源,降低系统性能
(3)SQL语句硬编码,难以维护(sql都写到.java里了)
(4)参数和占位符对应问题
(5)结果集解析复杂,列名硬编码 - mybatis框架
是一个优秀的持久层(dao)框架,对JDBC进行了封装,使得开发者只需要关注Sql语句(业务)本身即可,无需开发者处理加载驱动、获取连接、创建Statement等繁琐的过程, 实现了ORM思想。
2. 简述Spring的AOP,并说明其应用场景有哪些?
AOP:面向切面编程,它是一种编程思想,一种设计理念,运用AOP编程思想,可以提高代码的可重用性,使编码更加简洁,更易于维护。
简单的说它就是把我们程序重复的代码抽取出来,在需要执行的时候,使用动态代理的技术,在不修改源码的基础上,对我们的已有方法进行增强。
应用场景:事务传播和日志、统计方法等。
3. 介绍一下@ResponseBody注解
@ResponseBody是spring.web包下的一个注释,其主要作用是再返回数据的时候将对象转化为json格式返回,主要适用于前端ajax请求。
@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。
注意:在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。
4. 简述SpringMVC执行流程
- 第一步:用户发送请求至前端控制器DispatcherServlet
- 第二步:DispatcherServlet收到请求调用HandlerMapping处理器映射器
- 第三步:处理器映射器根据请求Url找到,具体的Handler(后端控制器),生成处理器对象及处理器拦截器(如果有则生成)一并返回DispatcherServlet
- 第四步:DispatcherServlet调用HandlerAdapter处理器适配器去调用Handler
- 第五步:处理器适配器执行Handler
- 第六步:Handler执行完成给处理器适配器返回ModelAndView
- 第七步:处理器适配器向前端控制器返回 ModelAndView,ModelAndView 是SpringMVC 框架的一个底层对象,包括 Model 和 View
- 第八步:前端控制器请求视图解析器去进行视图解析,根据逻辑视图名来解析真正的视图。
- 第九步:视图解析器向前端控制器返回View
- 第十步:前端控制器进行视图渲染,就是将模型数据(在 ModelAndView 对象中)填充到 request 域
- 第十一步:前端控制器向用户响应结果
5. mybatis #{}和${}有什么区别
- #{}为参数占位符,即sql预编译,${}为字符串替换
- #{} 预处理时,可以防止sql注入,在sql中的#{}替换为?通过调用PreparedStatement的set方法来赋值, ${}不能防止sql注入,并且是直接替换成变量的值。
- #{} 的变量替换是在DBMS(数据库管理系统)中 ${}的变量替换是在DBMS外
- ${}方式一般用于传入数据库对象,例如列表和表名。
6. 简述@Param注解的用法
@Param主要就是给传入的参数命名,一般在mapper接口中有多个参数时是必须使用的。如果参数只有一个就可以使用Mybatis默认接收方式即可。
当使用了@Param注解来声明参数的时候,SQL语句取值使用#{},KaTeX parse error: Expected 'EOF', got '#' at position 36: …解声明参数的时候,必须使用的是#̲{}来取参数。使用{}方式取值会报错。
不使用@Param注解时,参数只能有一个,并且是Javabean。在SQL语句里直接引用JavaBean的属性即可。
7. mybatis 中 ResultMap标签的属性都有什么?并说明作用
- id:给当前ResultMap设定唯一名称
- type: 设定当前ResultMap类型
- autoMapping:自动映射封装信息
- extends:继承 父类有的那一部分属性标签(id、result标签)就不用自己写了
8. mybatis的mapper文件中 namespace属性的作用是什么?
Mapper中的namespace是用于绑定Dao接口的,即面向接口编程,它的功能和,mapper接口的实现类Impl相当,但是他不用写接口实现类,通过namesapce(命名空间)的绑定直接找到相应方法,执行相应的SQL语句。
9. ssm框架如何通过注解配置事务生效,说明一下步骤。
- 开启注解扫描
<context:component-scan base-package="edu.xja"/>
- 配置事务管理器
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
- 开启事务驱动
<tx:annotation-driven transaction-manager="transactionManager"/>
- 在业务层类或方法上添加注解@Transactional
@Transactional
10. 简述session和cookie的区别及联系
首先说cookie和session都是会话对象。
不同的是session是服务器会话对象,数据保存在服务器内存中,cookie是客户端会话对象, 数据通过浏览器保存在本地硬盘。
session的默认生命周期是30分钟,为了能够保证会话功能的实现,每一个session对象创建的时候都有一个sessionid通过响应对象存储到浏览器的cookie中,这样只要浏览器访问服务器携带这个id值,就能拿到这个session的数据,也表示会话进行中。一旦浏览器关闭cookie声明周期结束,再次访问服务器时因为丢失了sessionid表示会话也结束了,那么服务器就会创建一个新的session对象和存储一个新的sessionid在浏览器,这样一个新的会话就开启了。
11. 请解释Spring Bean的生命周期
SpringBean的生命周期简单易懂,在一个Bean实例被初始化时,需要执行一系列的初始化操作,以达到可用状态。同样的,当一个Bean不在被调用时需要进行相关的解析操作,并从Bean容器中移除。
12 .Spring Bean的作用域之间有什么区别
Spring容器中的Bean可以分为5个范围,所有范围的名称都是有说明的,但是为了避免混淆,还是让我们来解释一下。
singleton:这种bean范围是默认的,这种范围确保不管接受到多少个请求,每个容器中只有一个bean的实例,单例的模式由bean factory自身来维护。
prototype:原形范围与单例范围相反,为每一个bean请求提供一个实例。
request:在请求bean范围内会每一个来自客户端的网络请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收。
Session:与请求范围类似,确保每个session中有一个bean的实例,在session过期后,bean会随之失效。
global-session:global-session和组件(Portlet)应用相关。当你的应用部署在容器中工作时,它包含很多portlet。如果你想要声明让所有的portlet共用全局的存储变量的话,那么这全局变量需要存储在global-session中。全局作用域与Servlet中的session作用域效果相同。