1. SSH与SSM有什么区别
SSH指的是:Struts+Spring+hibernate
SSM指的是:Spring+SpringMVC+MyBatis
通过上面的对比我们可以明确知道 两大集成框架 主要的区别就在 Struts和SpringMVC的区别以及Hibernate和MyBatis的区别。接下来我们先谈谈Struts 和SpringMVC的区别。
2.Struts 和SpringMVC的区别
① Struts2 的核心是基于一个Filter即StrutsPreparedAndExcuteFilter (核心过滤器)
SpringMvc的核心是基于一个Servlet即DispatcherServlet(前端控制器)
② SpringMVC是基于方法设计,而Struts2是基于类,每次发一次请求都会实例一个Action
③ SpringMVC使用更加简洁,开发效率SpringMVC比Struts2高,支持JSR303,处理ajax请求更加方便
④ Struts2的OGNL表达式使页面的开发效率相比SpringMVC更高些
3.Hibernate与mybatis区别
开发效率方面:
①. 在hibernate开发中,sql语句已经被封装,直接可以使用,加快系统开发
②. Mybatis属于半自动化,sql需要手工完成,稍微繁琐
SQL优化方面:
①. Hibernate自动生成SQL,有些语句较为繁琐,会多消耗一些性能
②. MyBatis手动编写SQL,可以避免不需要的查询,提高系统性能
对象管理方面:
①. hibernate是完整的ORM框架,开发过程中,无需过多关注底层实现,只需要管理对象即可
②. MyBatis需要自行管理映射关系
4.Hibernate的缓存机制和mybatis的缓存机制
Hibernate缓存包括两大类:
① Hibernate一级缓存又称为“Session的缓存”
只存在于session的生命周期中,当session关闭时,该session所管理的一级缓存也会被立即清除。该缓存由Hibernate管理,应用程序无须干预
② Hibernate二级缓存又称为“SessionFactory的缓存”
存在于整个应用程序中,一个应用程序对应一个SessionFactory。该缓存可以进行配置和更改,并且可以动态加载和卸载,hibernate为查询结果提供了一个查询缓存,它依赖于二级缓存
MyBatis提供了查询缓存来缓存数据,以提高查询的性能,MyBatis的缓存分为一级缓存和二级缓存。
① MyBatis 一级缓存又称为"SqlSession级别的缓存"
基于HashMap本地缓存,当同一个sqlSession执行两次相同的SQL语句时,第一次执行完后会将数据库中查询到的结果写到缓存,第二次查询时直接从缓冲中读取不经过数据库了。注:一级缓存默认时开启的
② MyBatis 二级缓存又称为"SqlSession级别的缓存"
mapper级别的缓存,也是基于hashmap本地缓存,不同的sqlSession两次执行相同的namespace下的sql语句,第二次查询就不会进行数据库了。
Spring
1.Spring是什么以及Spring的优点
①. Spring的核心是IOC和AOP
②. Spring是非侵入式的,基于Spring开发的应用一般不依赖于Spring的类
③. Spring是个容器,因为它包含并且管理应用对象的生命周期和配置,比如对象的创建、销毁、回调等
④. Spring提供对事务的管理
⑤. Spring对主流的框架提供了很好的集成支持,比如和hibernate SpringMVC等框架的集成
2.讲一讲你对AOP和IOC的理解
AOP:面向切面编程,aop的本质就是拦截器。比如在项目当中的事务和日志就是最好体现。比如:操作数据库的删改之前,都需要开启事务,增删改之后,都需要提交事务,这样我们就可以写一个拦截器,底层就是采用动态代理实现前置通知和后置通知,在前置通知中开启事务,在后置通知中提交事务,在spring.xml中配置通知即可,spring的事务管理底层就用到了AOP。
IOC:Invert of control 称控制反转,也称为DI(依赖注入)。依赖对象的创建和维护交给spring容器来管理,应用程序,本身不需要负责依赖对象的创建和维护。或者可以来理解,把原本应该我们去new对象这个操作转到spring容器中执行。
3.Spring的注入方式有哪些
①. setter注入
如果依赖关系比较复杂,那么构造方法注入方式会导致构造方法就会很大,就可以使用setter注入
②. 构造注入
避免繁琐的setter方法的编写,所有的依赖关系均在构造方法中设定,依赖关系集中体现
③. 接口注入
注:已经被遗弃(具备侵入性)
4.如何定义bean的作用域,作用域之间的区别
①. singleton:单例模式(默认),每个容器中之后一个bean的实例。
②. prototype:原型模式,为每一个bean请求提供一个实例。
5.什么是spring的自动装配?并解释一下自动装配的各种模式
spring的自动装配:无需在Spring配置文件中描述Javabean之间的依赖关系,IOC容器会自动创建Javabean之间的关联关系。
①. 根据属性名称:autowire=”byName”
②. 根据数据类型:autowire=”byType”
③. 根据构造方法:autowire=”constructor”
6.可以在spring中注入null或者空字符串吗
可以
注入null值
<property name=”email”><null/></property>
注入空字符串:
<property name=”email” value=””></property>
7.Spring如何配置数据库驱动
① 使用c3p0数据库连接池
② 使用DriverManagerDataSource数据源来配置数据库驱动
https://blog.csdn.net/a772304419/article/details/79309839
8.springmvc怎么防止SQL注入
使用SpringMVC的拦截器实现防止SQL注入