【Mybatis】Mybatis面试题
创始人
2024-06-02 23:07:42
0

Mybatis面试题

  • 1、什么是Mybatis?
  • 2、介绍下Mybatis的工作原理?
  • 3、Mybatis中缓存的理解?
  • 6、#和$的区别?
  • 7、如何解决属性名和字段名不一致的情况?
  • 8、如何获取自动增长的主键?
  • 9、Mybatis中的设计模式?
  • 10、Mybatis映射文件和配置文件的了解?
    • 10.1 Mybatis映射文件中有哪些标签?
    • 10.2 Mybatis核心配置文件中有哪些标签?
  • 11、Mybatis怎么实现分页的?
  • 12、Mybatis中的执行器?
  • 13、Mybatis中的Mapper接口和Mapper映射文件的一致性问题?
  • 14、DefaultSqlSession的线程安全?
    • 14.2 Spring整合Mybatis是如何来解决数据安全问题的?

1、什么是Mybatis?

Mybatis是一个半ORM框架(对象关系映射),专注于SQL语句,不用关心JDBC操作的其他流程,提高了对数据库的开发效率。

Hibemate是全ORM框架、基于JDBC封装的框架


2、介绍下Mybatis的工作原理?

(1)介绍Mybatis的基本情况:ORM

(2)原理:

  • Mybatis框架的初始化操作
  • 处理SQL请求的流程

系统启动的时候会加载解析全局配置文件和对应的映射文件,加载解析的相关信息存储在Configuration对象,Configuration对象会跟SqlSessionFactory对象绑定,当用户请求到来的时候,会从SqlSessionFactory对象中获取SqlSession。

SqlSessionFactory–>SqlSession


3、Mybatis中缓存的理解?

  • 缓存的作用: 降低数据源的访问频率,从而提高数据源的处理能力,提高服务器的响应速度。
  • Mybatis中的缓存设计:
    • Mybatis中的缓存的架构设计
    • Mybatis中的一级缓存和二级缓存

# 4、Mybatis中如何实现缓存的扩展?


# 5、Mybatis和Hibernate的区别?


6、#和$的区别?

  • Mybatis中获取参数值的两种方式:#{}${}
    -#{}(使用较多的一种方式)
    • #{}的本质是占位符赋值;
    • #{} 是预编译处理,在Mybatis处理#{}的时候会替换为"?“,然后调用PrepareStatement的set方法来对”?"进行赋值。
  • ${}
    - ${}的本质是字符串拼接;
    • ${} 是Mybatis处理的时候就会直接替换,会有SQL注入的风险。

7、如何解决属性名和字段名不一致的情况?

  • 方式一:为查询的字段设置别名,和属性名保持一致;
  • 方式二:当字段符合MySQL的要求使用_,而属性符合java的要求使用驼峰。此时可以在mybatis的核心配置文件中设置一个全局配置,可以自动的将下划线映射为驼峰;
  • 方式三:通过resultMap来设置字段和属性的映射关系;

8、如何获取自动增长的主键?

在使用insert标签的时候,设置标签属性useGeneratedKeys=truekeyProperty=“id”,获取到自动增长的主键。

    insert into t_user values (null,#{username},#{password},#{age},#{gender},#{email})

9、Mybatis中的设计模式?

  • 缓存模块:装饰器模式
  • 日志模块:适配器模式
  • SqlSessionFactory:工厂模式
  • Mapper接口:代理模式
  • SqlSessionFactoryBuiler:建造者模式

10、Mybatis映射文件和配置文件的了解?

10.1 Mybatis映射文件中有哪些标签?

  • 处理CRUD操作的标签:
    selectdeleteupdateinsert

  • sql:SQL代码片段

  • cache:开启缓存需要在映射文件中设置cache标签

  • cache-ref:

  • resultMap:自定义映射关系

10.2 Mybatis核心配置文件中有哪些标签?

  • properties:引入properties配置文件,例如配置数据库的jdbc.properties

  • settings:可以设置自动将下划线映射为驼峰、开启延迟加载、按需加载等。

  • typeAliases:类型别名。

  • environments :配置链接数据库的环境

  • mappers:引入MyBatis的映射文件。


11、Mybatis怎么实现分页的?

逻辑分页和物理分页两种

  • 逻辑分页

    • 数据库中有10000条数据,会给服务器10000条数据,客户端需要5条数据去分页,则服务器给客户端5条数据实现分页,这是一种虚拟的分页。
    • 不是真正的分页,RowBounds来进行分页。
  • 物理分页

    • 数据库中有10000条数据,会给服务器10000条数据,客户端需要5条数据去分页,服务器会给客户端10000条数据,然后分页。

    • 我们通过拦截器来实现分页的,

      select * from xxx —> select * from (select * from xxx) t limit 0.10


12、Mybatis中的执行器?

执行器是什么?

SimpleExector:简单的执行器。每次执行操作都会开启一个新的Statement对象,用完就会like关闭。

ReuseExector:复用的执行器。实现了对Statement对象的复用。

BatchExector:可执行批处理任务的执行器。

所有的执行器都必须是在SqlSession的生命周期之内。


13、Mybatis中的Mapper接口和Mapper映射文件的一致性问题?

  • Mapper接口类的名称和Mapper映射文件的名称要保持一致;
  • namespace的名称要和接口类的全类路径要保持一致;
  • Mapper接口类中的方法名要和Mapper映射文件中Sql语句的id属性保持一致;
  • Mapper接口类中方法的返回类型要和Mapper映射文件中SQL语句的返回类型一致;

14、DefaultSqlSession的线程安全?

DefaultSqlSession是线程不安全的。

## 14.1 DefaultSqlSession是什么?

14.2 Spring整合Mybatis是如何来解决数据安全问题的?

我们在工作中都不会单独的使用DefaultSqlSession,而是整合了Spring框架来使用Mybatis。

  • 不安全的原因
    线程不安全的原因是因为多个线程操作同一个对象,而这个对象被定义为了一个成员变量。

  • 解决的方案
    就是把这个成员变量变成一个局部变量,让多个线程不能操作就可以了。

  • Spring整合Mybatis是如何来解决数据安全问题的
    创建了一个SqlSessionTemplate模板对象,定义了数据库操作的相关的方法,本质上是通过代理对象获取了DefaultSqlSession对象来执行的,而且把DefaultSqlSession对象声明在了局部变量当中,从而解决了线程不安全的问题。

相关内容

热门资讯

初三语文辅导作文600字 初三语文辅导作文600字  在日常生活或是工作学习中,大家最不陌生的就是作文了吧,写作文可以锻炼我们...
写景优美作文摘抄好句好段 写景优美作文摘抄好句好段大全  大家都写过作文,肯定对各类作文都很熟悉吧,尤其是充满意境的写景作文,...
成长类的作文 成长类的作文(精选5篇)  在日常学习、工作抑或是生活中,大家对作文都再熟悉不过了吧,借助作文可以提...
柳作文 柳作文  在平日的学习、工作和生活里,大家都有写作文的经历,对作文很是熟悉吧,借助作文人们可以实现文...
洗菜作文400字 洗菜作文400字四篇  在日常学习、工作或生活中,大家都有写作文的经历,对作文很是熟悉吧,写作文是培...
那一次我真什么的作文400字 那一次我真什么的作文400字(精选72篇)  在日常学习、工作和生活中,大家都不可避免地会接触到作文...
心存美好作文800字 心存美好作文800字(精选25篇)  在平平淡淡的学习、工作、生活中,许多人都写过作文吧,借助作文人...
我的新老师作文800字 我的新老师作文800字第1篇我的新老师作文800字  在2015年的秋季,我便正式成为了马关县民族中...
作文 人生若只如初见 作文 人生若只如初见  人生若只如初见,所有往事都化为江南的一场烟雨,在相视一笑中,随风荡漾起回忆的...
我的心爱之物作文500字 关于我的心爱之物作文500字(精选25篇)  在平凡的学习、工作、生活中,大家都经常接触到作文吧,写...
小路之变作文 小路之变作文 谁没有自己的故乡?谁又不爱自己的故乡呢?每个人的家庭虽然不一样,但对家乡的爱却是相同的...
英文。。我的朋友 英文。。我的朋友英文。。我的'朋友1  I have a good friend. Let me t...
我的家作文 我的家作文我们家有时快乐,有时也有小矛盾。我们家的每一个成员都有着不同的性格。他们的性格还真像他们属...
拔萝卜作文 拔萝卜作文拔萝卜作文1 拔呀拔拔萝卜 !················ 今天,我...
未来的战斗机器人作文 未来的战斗机器人作文  在日常学习、工作或生活中,大家或多或少都会接触过作文吧,作文要求篇章结构完整...
我尊敬的人作文800字 我尊敬的人作文800字  在我们的心中,都有一个最敬佩的人。以下是我尊敬的人作文800字,给大家作为...
一件感动的事作文 一件感动的事作文(精选43篇)  在平平淡淡的学习、工作、生活中,大家都接触过作文吧,作文根据体裁的...
曼珠沙华300字作文 -小学... 梦中的花仙子:你好!我喜欢养花,一些奇特的花,曼珠沙华300字作文。一次无意间想当了曼珠沙华便想养几...
除夕的作文200字 精选除夕的作文200字五篇  在现实生活或工作学习中,大家都有写作文的经历,对作文很是熟悉吧,作文是...
汉字的作文 关于汉字的作文(15篇)  在日常的学习、工作、生活中,大家对作文都不陌生吧,作文是由文字组成,经过...