以下面试题,基于网络整理,和自己编辑。具体参考的文章,会在文末给出所有的链接。
如果胖友有自己的疑问,欢迎在星球提问,我们一起整理吊吊的 MyBatis 面试题的大保。
而题目的难度,艿艿尽量按照从容易到困难的顺序,逐步下去。
MyBatis 编程步骤
- 创建 SqlSessionFactory 对象。
- 通过 SqlSessionFactory 获取 SqlSession 对象。
- 通过 SqlSession 获得 Mapper 代理对象。
- 通过 Mapper 代理对象,执行数据库操作。
- 执行成功,则使用 SqlSession 提交事务。
- 执行失败,则使用 SqlSession 回滚事务。
- 最终,关闭会话。
#{}
和 ${}
的区别是什么?
${}
是 Properties 文件中的变量占位符,它可以用于 XML 标签属性值和 SQL 内部,属于字符串替换。例如将 ${driver}
会被静态替换为 com.mysql.jdbc.Driver
:
<dataSource type="UNPOOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> </dataSource> |
${}
也可以对传递进来的参数原样拼接在 SQL 中。代码如下:
<select id="getSubject3" parameterType="Integer" resultType="Subject"> SELECT * FROM subject WHERE id = ${id} </select> |
- 实际场景下,不推荐这么做。因为,可能有 SQL 注入的风险。
#{}
是 SQL 的参数占位符,Mybatis 会将 SQL 中的 #{}
替换为 ?
号,在 SQL 执行前会使用 PreparedStatement 的参数设置方法,按序给 SQL 的 ?
号占位符设置参数值,比如 ps.setInt(0, parameterValue)
。 所以,#{}
是预编译处理,可以有效防止 SQL 注入,提高系统安全性。
另外,#{}
和 ${}
的取值方式非常方便。例如:#{item.name}
的取值方式,为使用反射从参数对象中,获取 item
对象的 name
属性值,相当于 param.getItem().getName()
。
当实体类中的属性名和表中的字段名不一样 ,怎么办?
第一种, 通过在查询的 SQL 语句中定义字段名的别名,让字段名的别名和实体类的属性名一致。代码如下:
<select id="selectOrder" parameterType="Integer" resultType="Order"> SELECT order_id AS id, order_no AS orderno, order_price AS price FROM orders WHERE order_id = #{id} </select> |
- 这里,艿艿还有几点建议:
- 1、数据库的关键字,统一使用大写,例如:
SELECT
、AS
、FROM
、WHERE
。 - 2、每 5 个查询字段换一行,保持整齐。
- 3、
,
的后面,和=
的前后,需要有空格,更加清晰。 - 4、
SELECT
、FROM
、WHERE
等,单独一行,高端大气。
- 1、数据库的关键字,统一使用大写,例如:
第二种,是第一种的特殊情况。大多数场景下,数据库字段名和实体类中的属性名差,主要是前者为下划线风格,后者为驼峰风格。在这种情况下,可以直接配置如下,实现自动的下划线转驼峰的功能。
<setting name="logImpl" value="LOG4J"/> <setting name="mapUnderscoreToCamelCase" value="true" /> </settings> |
相关推荐
【BAT必备】mybatis面试题【BAT必备】mybatis面试题【BAT必备】mybatis面试题【BAT必备】mybatis面试题【BAT必备】mybatis面试题【BAT必备】mybatis面试题【BAT必备】mybatis面试题【BAT必备】mybatis面试题【BAT...
mybatis面试题(经典问答) 1、JDBC有多少步? JDBC可以分为六个步骤 负载驱动程序 获取数据库连接 创建语句对象 操作数据库进行增删改查 获取结果集 关闭资源 2.什么是mybatis? 如果你在面试中被问到,只需说以下...
mybatis面试题.pdf
Mybatis面试题总结 本文总结了 Mybatis 面试中的一些常见问题,并对每个问题进行了详细的解释和分析。这些问题涵盖了 Mybatis 的基本原理、Mapper 接口、分页、插件运行原理、缓存机制等方面。 1. #{}和${}的区别 ...
目录: 1. #{}和${}的区别是什么? 2. 通常一个 Xml 映射文件,都会写一个 Dao 接口与之对应, 请问,这个 Dao 接口的工作原理是什么?...10. 简述 Mybatis 的 Xml 映射文件和 Mybatis 内部数据结构之间的映射关系
MyBatis是一个流行的Java持久层框架,它允许开发者自定义SQL、存储过程和高级映射。这个框架的主要目的是简化数据库操作,将SQL语句与Java代码分离,提供更灵活的数据访问控制。 MyBatis的缓存机制是其性能优化的...
MyBatis面试题往往会围绕其核心特性、应用场景、优缺点以及与其他框架如Hibernate的对比进行展开。下面我们详细解释给出的一些面试知识点: 1. MyBatis的特性:MyBatis是一个半ORM(对象关系映射)框架,提供了对象...
### Mybatis面试题知识点解析 #### 1. #{}与${}的区别 - **#{}**:这是一种预编译处理方式。在Mybatis处理SQL时,#{}会被替换为SQL预编译语句中的问号(?),并在执行时通过`PreparedStatement`的`set`方法动态...
MyBatis是一款优秀的持久层框架,它被归类为半ORM(对象关系映射)框架。相较于传统JDBC而言,MyBatis在处理数据库交互方面提供了更为便捷和高级的抽象。MyBatis的主要特点包括支持定制化SQL、存储过程、高级映射...
在IT行业中,Spring、Mybatis和Springboot是Java开发领域广泛应用的三大框架,它们各自承担着不同的职责并共同构建高效的企业级应用。本压缩包文件提供了这三个技术的面试试题及答案,帮助求职者或开发者更好地理解...
MyBatis面试题大全.rar
MyBatis面试题.url
07-MyBatis面试题
MyBatis是一款在中国乃至全球范围内广泛应用的...通过阅读《MyBatis面试题二(含答案)_.pdf》和《MyBatis面试题一.pdf》,你可以更全面地准备MyBatis相关的面试,理解并掌握这些知识点将有助于你在面试中脱颖而出。
mybatis面试题#和$的区别.pdf
Java核心面试知识集—MyBatis面试题
MyBatis面试题的PDF--持续更新!!!!!
MyBatis 面试题整理详细版 MyBatis 是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。MyBatis 可以...
MyBatis面试题(2025最新版)