JAVA面试题框架篇--Mybatis

发布于:2024-06-12 ⋅ 阅读:(129) ⋅ 点赞:(0)

谈一谈你对 Mybatis 框架的理解(了解)

MyBatis 是一款优秀的持久层框架,一个半 ORM(对象关系映射)框架,它支持定 制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置 参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接 口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

在 mybatis 中,${} 和 #{} 的区别是什么?(必会)

#{} 是占位符,预编译处理,${}是字符串替换。 Mybatis 在处理#{}时,会将 sql 中的#{}替换为?号,调用 PreparedStatement 的 set 方法来赋值; Mybatis 在处理${}时,就是把${}替换成变量的值。 使用#{}可以有效的防止 SQL 注入,提高系统安全性。

MyBatis 编程步骤是什么样的?(了解)

1、创建 SqlSessionFactory 2、 通过 SqlSessionFactory 创建 SqlSession 3、 通过 sqlsession 执行数据库操作 4、 调用 session.commit()提交事务 5、 调用 session.close()关闭会话

在 mybatis 中,resultType 和 ResultMap 的区别是什么?(必会)

如果数据库结果集中的列名和要封装实体的属性名完全一致的话用 resultType 属性 如果数据库结果集中的列名和要封装实体的属性名有不一致的情况用 resultMap 属 性,通过 resultMap 手动建立对象关系映射,resultMap 要配置一下表和类的一一对应关 系,所以说就算你的字段名和你的实体类的属性名不一样也没关系,都会给你映射出来

在 Mybatis 中你知道的动态 SQL 的标签有哪些?作用分别是什么?(必会)

1. if 是为了判断传入的值是否符合某种规则,比如是否不为空.

2. where 标签可以用来做动态拼接查询条件,当和 if 标签配合的时候,不 用显示的声明类型 where 1 = 1 这种无用的条件

3. foreach 标签可以把传入的集合对象进行遍历,然后把每一项的内容 作为参数传到 sql 语句中.

4. include 可以把大量的重复代码整理起来,当使用的时候直接 include 即可,减少重复代码的编写;

5. 适用于更新中,当匹配某个条件后,才会对该字段进行跟新操作

谈一下你对 mybatis 缓存机制的理解?(了解)

Mybatis 有两级缓存,一级缓存是 SqlSession 级别的,默认开启,无法关闭;二级缓 存是 Mapper 级别的,二级缓存默认是没有开启的,但是手动开启

1. 一级缓存:基础 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session, 当 Session flush 或 close 之后,Session 中的所有 Cache 就将清空

2. 二级缓存其存储作用域为 Mapper(Namespace),使用二级缓存属性类需要实现 Serializable 序列化接口

3. 对于缓存数据更新机制,当某一个作用域(一级缓存Session/二级缓存 Namespaces) 的进行了 C(增加)/U(更新)/D(删除)操作后,默认该作用域下所有 select 中的缓存将被 clear.

写在最后

今日分享几个Mybatis的常见面试题,希望能够对大家有帮助。笔者小,中,大厂均有面试经历,每日分享全栈相关知识,希望与大家共同进步。


网站公告

今日签到

点亮在社区的每一天
去签到