Java封神之路:Java面试备战(十四)

四、SpringMvc框架

1、SpringMVC流程

1、用户发送请求至前端控制器的DispatcherServlet

2、DispatcherServlet收到请求调用HandlerMapping处理器映射器

3、处理器映射器找到了具体的映射器,生成处理器对象以及处理器拦截器一并返回给DispatcherServlet

4、DispatcherServlet调用HandlerAdapter处理器适配器

5、HandlerAdapter经过适配调用具体的处理器(Controller)

6、Controller执行完,返回ModelAndView

7、HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet

8、DispatcherServlet将ModelAndView传给ViewReslover

9、ViewReslove解析后返回具体的View

扫描二维码关注公众号,回复: 12515354 查看本文章

10、DispatcherServlet根据View进行视图渲染

11、DispatcherServlet响应用户

2、SpringMVC是什么

SpringMVC是一个MVC的开源框架,是Spring的一个子模块

3、SpringMVC怎么设置转发和重定向

(1)转发:在返回值前面加一个"forward:",譬如"forward:user?name=zhangshan"

(2)重定向:在返回值前面加一个"redirect:",譬如"redirect:http://www.baidu.com"

4、SpringMVC常用的注解有哪些

@RequestMapping:用于处理请求url映射的注解,可用于类或方法上。用于类上,则表示类中所有响应请求的方法都是以该地址作为父路径

@RequestBody:注解实现接收http请求的json数据,将json转化为java对象

@ResponsBody:注解将controller方法返回对象转化为json对象响应给客户

五、MyBatis框架

1、MyBatis是什么

MyBatis是一款优秀的持久层框架,一个半ORM框架,它支持定制化SQL、存储过程以及高级映射。Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。Mybatis可以通过简单的XML注解和配置来映射原生的类型、接口和Java的pojo

2、Mybatis优缺点

优点

  • 基于传统的SQL语句编程,相当的灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL写在XML里,解除了sql与程序代码的耦合,便于统一管理;提供了XML标签,支持编写动态SQL语句
  • 与传统的JDBC相比,减少了50%以上的代码量,消除了JDBC大量冗余的代码
  • 很好的与各种数据库兼容
  • 提供映射标签

缺点

  • SQL语句编写的工作量较大,尤其字段多、关联表多的时候,对开发人员编写SQL语句的能力有一定的要求
  • SQL语句依赖于数据库,导致数据库的可移植性差,不能随意变更数据库

3、MyBatis的编程步骤

1、创建SqlSessionFactory

2、通过SqlSessionFactory创建SqlSession

3、通过sqlSession执行数据库操作

4、调用sqlSession.commit()提交事务

5、关闭sqlSession.close()

4、MyBatis底层用到了哪些设计模式

1、Builder模式

SqlSessionFactoryBuilder
XMLConfigBuilder
XMLMapperBuilder

2、工厂模式

SqlSessionFactory
ObjectFactory
MapperProxyFactory

3、单例模式

ErrorContext
LogFactory

4、代理模式

MapperProxy 
ConnectionLogger

5、#{}和${}的区别是什么

1、#{}是预编译处理,${}是字符串的替换

2、MyBatis在处理#{}的时候,会将sql中的#{}替换成为? (占位符),调用PreparedStatement的set方法来赋值

3、MyBatis在处理 时 , 就 是 把 {}时,就是把 {}替换成变量的值。(拼接字符串)

4、使用#{}可以有效的防止sql注入

6、实体类中属性名和表中的字段名不一样怎么处理

1、通过在查询的sql语句中定义字段的别名,让字段别名和实体类的属性名一致

<select id="getOrderById" parameterType="int" resultType="Order">
   slelect order_id id,order_no orderNo,order_price price 
    from orders
    where order_id=#{id}
</select>

2、通过resultMap来映射字段名和属性名不一致

<select id="getOrder" parameterType="int" resultMap="orderMap">
   select * from orders where order_id=#{id}
</select>
<resultMap id="orderMap" type="Order">
   <!-- id属性来映射主键字段-->
    <id property="id" cloumn="order_id"></id>
    
    <result property="orderNo" cloumn="order_no"></result>
    <result property="price" cloumn="order_price"></result>
</resultMap>

7、模糊查询Like语句编写

1、java代码中添加sql通配符

string wildcardname =%smi%;
list<name> names = mapper.selectlike(wildcardname);

<select id=”selectlike”>
select * from foo where bar like #{
    
    value}
</select>

2、在sql语句中拼接字符串,会引起sql注入

tring wildcardname = “smi”;
list<name> names = mapper.selectlike(wildcardname);

<select id=”selectlike”>
select * from foo where bar like "%"#{
    
    value}"%"
</select>

8、通常一个xml映射文件都有一个Dao接口与之相对应,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?

Dao 接口即 Mapper 接口。接口的全限名,就是映射文件中的 namespace 的值;接口的方法名,就是映射文件中 Mapper 的 Statement 的 id 值;接口方法内的参数,就是传递给 sql 的参数。Mapper 接口是没有实现类的,当调用接口方法时,接口全限名+方法名拼接字符串作为 key 值,可唯一定位一个 MapperStatement。在 Mybatis 中,每一个<select>、<insert>、<update>、<delete>标签对应一个MapperStatement 对象。

Mapper 接口里的方法,是不能重载的,因为是使用 全限名+方法名 的保存和寻找策略。Mapper 接口的工作原理是 JDK 动态代理,Mybatis 运行时会使用 JDK动态代理为 Mapper 接口生成代理对象 proxy,代理对象会拦截接口方法,转而执行 MapperStatement 所代表的 sql,然后将 sql 执行结果返回。

9、MyBatis是如何进行分页的?分页插件的原理

10、简述MyBatis插件的运行原理,以及如何编写一个插件

11、MyBatis执行批量插入,能返回数据库主键列表吗?

12、MyBatis动态SQL是做什么?都有哪些动态SQL?简述动态SQL的执行原理

13、MyBatis如何将SQL执行结果封装为目标对象并且返回的

14、MyBatis动态代理机制应用在框架的那一部分

猜你喜欢

转载自blog.csdn.net/weixin_54707168/article/details/113977180
今日推荐