1.什么是spring?
spring是一个轻量级的开发框架,目的是为了解决企业级应用开发的业务逻辑层和其他各层之间的耦合问题,为开发java应用程序提供全面的基础架构支持。spring负责基础架构,因此Java开发者可以专注于应用程序的开发。
2.什么是springMVC?
springMVC是一个基于Java实现了MVC设计模式的请求驱动类型的轻量级框架,通过把模型-视图-控制器分离,将web层职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便配合协作。
3.什么是mybatis?
mybatis是一款优秀的持久层框架,一个半ORM(对象关系映射)框架,支持定制化SQL,存储过程以及高级映射。mybatis几乎避免了所有的JDBC代码和手动设置参数以及获取结果集。mybatis可以使用简单的XML和注解来配置和映射原生类型、接口、和Java的POJO为数据库中的记录。
4.什么是springboot?
springboot是整个spring技术栈的一个大整合,简化了spring应用开发的一个框架,为J2EE开发提供一站式的解决方案。
5.什么是springAOP?
AOP是面向切面编程。AOP通过横切切开封装对象的内部,并将影响多个类的公共模块封装起来,名为aspect。将那些与业务无关的,却为业务模块所共同调用的逻辑封装起来,减少系统的重复代码,降低耦合,增加了可维护性和可操作性。
6.什么是IOC和DI?
IOC是控制反转,原来使用对象要自己先创建再使用,IOC把对象的调用权交给了容器,通过容器来实现对象组件的装配和管理。(对象交由容器管理)
DI是依赖注入,就是由IoC容器在运行期间动态地将某种依赖关系注入对象之中。应用组件不应该负责查找资源和其他依赖对象。配置对象的工作交给容器来处理,查找资源的逻辑应该从应用代码的逻辑中抽取出来,交由容器来完成。(向类里面的参数传值)
通俗讲,依赖注入就是负责传值,由容器负责生成对象。
7.依赖注入的方式?
1)setter方法注入
2)构造器注入
3)接口注入
8.将spring配置到应用开发中的三种方式?
1)基于XML的配置
2)基于注解的配置
3)基于java的配置
9.spring bean的生命周期
1)实例化
2)属性赋值
3)初始化
4)销毁
10.spring bean的作用域
1)singleton 每个容器只有一个bean实例
2)prototype 为每一个bean请求提供一个实例
3)request web容器中的对象,每次请求都创建一个对象
4)session web容器中的对象,每次会话都创建一个对象
5)globalSession web容器中全局的对象
11.JDBC编程有哪些不足,mybatis是如何解决的?
1)数据库连接频繁创建和释放影响性能
解决办法:在mybatis-config.xml中配置数据库连接池
2)SQL语句写在代码中不易维护,实际应用SQL语句变化大
解决办法:将数据库语句配置在xxxxMapper.xml,与Java代码分离
3)向SQL语句传参数麻烦,因为SQL语句where条件可能多可能少
解决办法:mybatis自动将java对象映射至sql语句
4)结果集解析麻烦,SQL变化导致解析代码变化,且解析前需要遍历
解决办法:将数据库对象封装成pojo对象解析比较方便
12.mybatis和Hibernate的区别:
mybatis是半自动化对象关系映射,配置java对象和结果集的对应关系,多表关联关系配置简单。
Hibernate是全自动化对象关系映射,配置java对象和数据库表的对应关系,多表关联关系配置复杂
13.mybatis的编程步骤是什么?
1)创建sqlSessionFactory
2)通过SqlSessionFactory创建SqlSession
3)通过SqlSession执行数据库操作
4)调用session.commit()提交事务
5)调用session.close()关闭会话
14.mybatis的工作原理?
1)读取mybatis主配置文件mybatis-config.xml
2)加载映射文件 Mapper1.xml
3)创建SqlSessionFactory
4)通过SqlSessionFactory创建SqlSession
5)Executor执行器,动态生成需要执行的Sql语句
6)MappedStatement,对映射信息的封装
7)输入参数映射
8)输出参数映射
15.模糊查询怎么写?
防止SQL注入
contact(’%’, #{question}, ‘%’);
16.foreach用法
<foreach collection="ids" open="(" close=")" separator="," item="id">
#{ id }
</foreach>
17.分页插件(PageHelper)的基本原理
使用mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待指定的SQL语句,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数
举例:select * from student
拦截重写后:select t.* from (select * from student) t limit 0,10
18.mybatis的一级缓存和二级缓存
mybatis的一级缓存只是相对于同一个sqlSession对象而言,在参数和SQL语句一致的情况下,只执行一次。第一次执行之后,mybatis会把它放在缓存中,第二次查询,直接从缓存中取。
二级缓存默认不开启,可以在配置文件中手动开启。二级缓存是同一个namespace下mapper级别的,查询到的信息会存放到该mapper对应的二级缓存区域。
19.springMVC的优点:
1)支持各种视图技术,不仅仅局限于jsp
2)与Spring框架集成
3)清晰的角色分配:
前端控制器(dispatcherServlet)
处理器映射器(HandlerMapping)
处理器适配器(HandlerAdapter)
视图解析器(ViewReslover)
4)支持各种请求资源的映射策略
20.springMVC工作原理
1)用户发送请求至前端控制器
2)前端控制器收到请求调用处理器映射器
3)处理器映射器知道具体的处理器,生成处理器对象返回给前端控制器
4)前端控制器调用处理器适配器
5)处理器经过适配调用具体的Controller
6)Controller执行完成返回ModelAndView
7)处理器适配器将Controller执行结果ModelAndView返回给DispatcherServlet
8)DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9)视图解析器解析后返回具体view
10)DispatcherServlet根据View进行渲染视图
11)DispatcherServlet响应用户
21.springboot优点:
1)快速创建独立运行的spring项目以及主流框架集成
2)使用嵌入式的Servlet容器,应用无需打包war包
3)starters自动依赖与版本控制
4)大量的自动配置,简化开发,也可修改默认值
5)无需配置xml,无代码生成,开箱即用
6)准生产环境的运行时应用监控
7)与云计算的天然集成
22.springboot的核心注解是哪个?由哪几个注解组成?
springboot核心注解是启动类上的@SpringBootApplication
主要包含以下三个注解:
1)@SpringBootConfiguration,组合了@Configuration注解,实现了配置文件的功能
2)@EnabledAutoConfiguration,打开自动配置的功能
也可以关闭自动配置到选项(例如,关闭数据源自动配置)
@EnabledAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
3)ComponentScan:Spring组件的扫描
23.springboot自动配置的原理
@EnableAutoConfiguration和@Configuration和@ConditionalOnClass就是自动配置的核心
@EnableAutoConfiguration给容器中导入META-INF/spring.factories里定义的自动配置类,筛选有效的自动配置类。
每一个自动配置类结合对应的xxxxProperties.java读取配置文件进行加载功能
24.springboot配置加载顺序
1)当前项目目录下的一个/config子目录
2)当前项目目录
3)项目的resources即一个classpath下的/config包
4)项目的resources即classpath根路径(root)
命令行参数
系统环境变量
application.properties
application.yml