-
Spring中通知的类型
通知是个在方法执行前或执行后要做的动作,实际上是程序执行时要通过SpringAOP框架触发的代码段。
Spring切面可以应用五种类型的通知:
before:前置通知,在⼀个方法执行前被调用。
after: 在方法执行之后调用的通知,无论方法执行是否成功。
after-returning: 仅当方法成功完成后执行的通知。
after-throwing: 在方法抛出异常退出时执行的通知。
around: 在方法执行之前和之后调用的通知。 -
Hibernate框架工作原理
Hibernate是⼀个开放源代码的对象关系映射(ORM)框架,它对JDBC进行了非常轻量级的对象封装,使得java程序员可以随心所欲的使用
对象编程思维来操纵数据库。
工作原理:
1.读取并解析配置文件
2.读取并解析映射信息,创建SessionFactory
3.打开Sesssion
4.创建事务Transation
5.持久化操作
6.提交事务
7.关闭Session
8.关闭SesstionFactory -
Hibernate对象的三种状态是什么
瞬时态:⼀个Java对象创建之后,还没新增到数据库之前的状态
特点:
(1)不和Session实例关联
(2)在数据库中没有和瞬时对象关联的记录
持久态:当调用save()或者是saveOrUpdate()方法之后的状态,保存到数据库的状态
特点:
(1)和Session实例关联
(2)在数据库中有和持久对象关联的记录
游离态:当调用session的Close方法或者清空session之后对象的状态
特点:
(1)本质上和瞬时对象相同
(2)只是比瞬时对象多了⼀个数据库记录标识值id. -
对象关系映射(ObjectRelationalMapping,简称ORM)
ORM是⼀种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中。本质上就是将数据从⼀种形式转换到另外⼀种形式。 WhyORM? 面向对象的开发方法是当今企业级应用开发环境中的主流开发方法。常见的ORM框架有:Hibernate,MyBatis等. -
MyBatis与Hibernate有什么不同?
相同点:屏蔽jdbcapi的底层访问细节,使我们不用与jdbcapi打交道,就可以访问数据。
jdbcapi编程流程固定,还将sql语句与java代码混杂在了一起,经常需要拼凑sql语句句,细节很繁琐。
Mybatis的好处:屏蔽jdbcapi的底层访问细节;将sql语句与java代码进行分离;提供了将结果集自动封装成为实体对象和对象的集合的功能,queryForList返回对象集合,用queryForObject返回单个对象;提供了自动将实体对象的属性传递给sql语句的参数。
Hibernate是一个全自动的orm映射工具,它可以自动生成sql语句,Mybatis需要我们自己在xml配置文件中写sql语句,hibernate要比Mybatis功能负责和强大很多。因hibernate自动生成sql语句,我们无法控制该语句,我们就无法去写特定的高效率的sql。对于⼀些不不太复杂的sql查询,hibernate可以很好帮我们完成,但是,对于特别复杂的查询,hibernate就很难适应了,这时候用Mybatis就是不错的选择,因为ibatis还是由我们自己写sql语句。 -
SpringMVC的流程?
(1)用户发送请求至前端控制器DispatcherServlet;
(2)DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle;
(3)处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)⼀并返回给DispatcherServlet;
(4)DispatcherServlet通过HandlerAdapter处理器适配器调用处理器;
(5)执行处理器(Handler,也叫后端控制器);
(6)Handler执行完成返回ModelAndView;
(7)HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;
(8)DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析;
(9)ViewResolver解析后返回具体View;
(10)DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
(11)DispatcherServlet响应⽤用户。 -
通常⼀个Xml映射文件,都会写⼀个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?
Dao接口,就是人们常说的Mapper接口,接口的全限名,就是映射文件中的namespace的值,接口的方法名,就是映射文件中MappedStatement的id值,接口方法内的参数,就是传递给sql的参数。Mapper接口是没有实现类的,当调用接口方法时,接口全限名+方法名拼接字符串作为key值,可唯⼀定位⼀个MappedStatement,举例:com.mybatis3.mappers.StudentDao.findStudentById,可以唯⼀找到namespace为com.mybatis3.mappers.StudentDao下面id=findStudentById的MappedStatement。在Mybatis中,每⼀个标签,都会被解析为⼀个MappedStatement对象。
Dao接口里的方法,是不能重载的,因为是全限名+方法名的保存和寻找策略。
Dao接口的工作原理是JDK动态代理,Mybatis运行时会使用JDK动态代理为Dao接口生成代理proxy对象,代理对象proxy会拦截接口方法,转而执行MappedStatement所代表的sql,然后将sql执行结果返回。
Java面试题3
最新推荐文章于 2022-04-14 18:58:23 发布