分享

花了20天的时间给粉丝整理的一套"最全"的Java求职笔记(五)

 LRyab博客网 2021-08-17
    大家好,我是小编LRyab,公众号LRyab博客网,LRyab博客网是分享一些个人成长、思考方向、个人感悟、职业规划,博客涵盖java技术 vue. html. css.前端技术spring全家桶. linux运维技术在365天把你打造出来一个全栈工程师!

 点击下方卡片关注公众号,每天分享一篇技术干货!

前言:前几天有粉丝问我,网上java面试题总是参差不齐,希望我为他整理一套全面的java面试题,并且这套java面试题有个要求,必须能够让他20天就能看完这些面试题,他说现在很多面试题我看都得看3个月才能看完,然后我才能去找工作,但是自己得时间有限所以想让我帮他总结一套万能面试java求职笔记。接下来我将会至少分为12个章节进行阐述这套Java求职笔记,感兴趣的可以坚持看完!觉得不错的可以点个赞。

1为什么写这套Java求职笔记

      很早的时候我就想写一些Java求职方向的一些文章,由于很长时间耽搁了加上,有粉丝后台问我,可不可以帮他总结一些java求职笔记,他看了很多Java技术有很多技术,很迷茫不知道学哪些,我笑着说,不要着急,无论你到什么时候你都会迷茫,因为技术一直在更新,谢谢你信任我,解救你的迷茫唯一办法就是多看LRyab博客,就是这样我带着粉丝的问题,开始编写了这套Java求职笔记,看完这套求职笔记,我相信很多人都会找到属于自己的心仪工作。

2一套Mybaties知识大纲技术图

   思来想去,本来不想放这套思维大纲技术图,但是很多大佬都喜欢放思维导图,那么我也放一张思维大脑图,方便大家以后学习,在java求职的时候可以带上这张脑图。

3Mybaties持久层框架面试考点

3.1Mybaties基础知识

  • 说一下Mybaties吧?

     Mybatis是一款优秀的持久层框架,它对JDBC的操作数据库的过程进行了封装,使得开发者只需要关注SQL本身,不需要花费精力去处理一些重复和繁琐的步骤。通过java对象和statement中的SQL进行映射生成最终执行的SQL语句,最后由mysql框架执行SQL并将结果映射成java对象并返回。

  • ORM和半ORM:

 ORM:关系对象映射,简单点就是将数据库中的表和java中的对象建立映射关系,可以让我们操作对象来间接的操作数据库。

 半ORM:在查询关系对象或者关联集合对象时,需要手工编写sql来完成。

  • 传统JDBC存在的问题

代码繁琐,重复度高,冗余度高

数据库链接对象多次创建

代码维护度高,需要修改的代码难度大

  • Mybaties的工作原理?

   1、加载mybatis全局配置文件(数据源、mapper映射文件等),解析配置文件,MyBatis基于XML配置文件生成Configuration,和一个个MappedStatement(包括了参数映射配置、动态SQL语句、结果映射配置),其对应着<select | update | delete | insert>标签项。

2、构造会话工厂:SqlSessionFactoryBuilder通过Configuration对象生成SqlSessionFactory,用来开启SqlSession。

3、SqlSession对象完成和数据库的交互。

3.1用户程序调用mybatis接口层api(即Mapper接口中的方法)

3.2SqlSession通过调用api的Statement ID找到对应的MappedStatement对象

3.3通过Executor(负责动态SQL的生成和查询缓存的维护)将MappedStatement对象进行解析,sql参数转化、动态sql拼接,生成jdbc Statement对象

4、JDBC执行sql

5、借助MappedStatement中的结果映射关系,将返回结果转化成HashMap、JavaBean等存储结构并返回。

 Mybaties框架的优缺点

    优点:

    基于SQL语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL写在XML里,解除sql与程序代码的耦合,便于统一管理;提供XML标签,支持编写动态SQL语句,并可重用。

与JDBC相比,减少了50%以上的代码量,消除了JDBC大量冗余的代码,不需要手动开关连接;

很好的与各种数据库兼容,能够与 Spring 很好的集成;

提供映射标签,支持对象与数据库的ORM字段关系映射;提供对象关系映射标签,支持对象关系组件维护。

   缺点:

   SQL语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写SQL语句的功底有一定要求。

QL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

Mybaties的编码步骤是什么?

   创建工厂类

   通过工厂类创建sqlsession

   执行数据库

   提交事务

   关闭会话

Mybaties  #{}和${}的区别?

  #是预编译处理,会把SQL中的#{}替换为?调用PreparedStatement的set方法来赋值,使用#{}可以有效的防止sql注入,提升系统的安全性。

 ${}是字符串替换,用于标签属性值和sql内部,属于静态文本替换。把${}替换为变量的值

模糊查询like语句该怎么写?

 在java中直接添加sql通配符

 在sql语句中进行拼接通配符(会引起sql注入问题)

实体类型属性名称和表字段名称不一致怎么办?

 查询sql定义字段名的别名,让别名和实体类属性一致

 通过resultMap类映射字段名和实体类型属性名一一对应

说一下Mybaties中xml的常见标签?

 select、insert、updae、delete、resultMap、parameterMap、sql、include

Mybaties中的动态sql?简述一下动态sql的原理

MyBatis动态sql可以在Xml映射文件内,以标签的形式编写动态sql。执行原理是根据表达式的值完成逻辑判断并动态拼接 sql 的功能。

MyBatis提供了9种动态sql标签:trim、where、set、foreach、if、choose、when、otherwise、bind。

说说Mybaties中的一级缓存和二级缓存

   一级缓存是SqlSession级别的缓存。在操作数据库时需要构造 sqlSession对象,在对象中有一个(内存区域)数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。

    一级缓存的作用域是同一个SqlSession,在同一个sqlSession中两次执行相同的sql语句,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取数据将不再从数据库查询,从而提高查询效率。当一个sqlSession结束后该sqlSession中的一级缓存也就不存在了。Mybatis默认开启一级缓存。

    二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession去操作数据库得到数据会存在二级缓存区域,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。

    二级缓存是多个SqlSession共享的,其作用域是mapper的同一个namespace,不同的sqlSession两次执行相同namespace下的sql语句且向sql中传递参数也相同即最终执行相同的sql语句,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取数据将不再从数据库查询,从而提高查询效率。Mybatis默认没有开启二级缓存需要在setting全局参数中配置开启二级缓存。

如果缓存中有数据就不用从数据库中获取,大大提高系统性能。

Mybaties中如何实现分页的?

   mybatis框架分页实现,有几种方式,

   最简单的就是利用原生的sql关键字limit来实现

   还有一种rowsbounds就是利用interceptor来拼接sql,实现和limit一样的功能

   再一个就是利用PageHelper来实现。

Mybaties的分页插件的运行原理,如何实现分页的,自己如何写插件?

    分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数。

举例:select * from student,拦截sql后重写为:select t.* from (select * from student) t limit 0, 10

    Mybatis仅可以编写针对ParameterHandler、ResultSetHandler、StatementHandler、Executor这4种接口的插件,Mybatis使用JDK的动态代理,为需要拦截的接口生成代理对象以实现接口方法拦截功能,每当执行这4种接口对象的方法时,就会进入拦截方法,具体就是InvocationHandler的invoke()方法,当然,只会拦截那些你指定需要拦截的方法。

     实现Mybatis的Interceptor接口并复写intercept()方法,然后在给插件编写注解,指定要拦截哪一个接口的哪些方法即可,记住,别忘了在配置文件中配置你编写的插件。

Mybaties-Plus简介

   Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

5个人说明

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多