`
shinesuo
  • 浏览: 156129 次
  • 性别: Icon_minigender_1
  • 来自: 宇宙
社区版块
存档分类
最新评论

精尽 MyBatis 面试题

 
阅读更多

以下面试题,基于网络整理,和自己编辑。具体参考的文章,会在文末给出所有的链接。

如果胖友有自己的疑问,欢迎在星球提问,我们一起整理吊吊的 MyBatis 面试题的大保。

而题目的难度,艿艿尽量按照从容易到困难的顺序,逐步下去。

MyBatis 编程步骤

  1. 创建 SqlSessionFactory 对象。
  2. 通过 SqlSessionFactory 获取 SqlSession 对象。
  3. 通过 SqlSession 获得 Mapper 代理对象。
  4. 通过 Mapper 代理对象,执行数据库操作。
  5. 执行成功,则使用 SqlSession 提交事务。
  6. 执行失败,则使用 SqlSession 回滚事务。
  7. 最终,关闭会话。

#{}  ${} 的区别是什么?

${} 是 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、数据库的关键字,统一使用大写,例如:SELECTASFROMWHERE 
    • 2、每 5 个查询字段换一行,保持整齐。
    • 3、, 的后面,和 = 的前后,需要有空格,更加清晰。
    • 4、SELECTFROMWHERE 等,单独一行,高端大气。

第二种,是第一种的特殊情况。大多数场景下,数据库字段名和实体类中的属性名差,主要是前者为下划线风格,后者为驼峰风格。在这种情况下,可以直接配置如下,实现自动的下划线转驼峰的功能。

<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面试题【BAT...

    mybatis面试题(经典问答)

    mybatis面试题(经典问答) 1、JDBC有多少步? JDBC可以分为六个步骤 负载驱动程序 获取数据库连接 创建语句对象 操作数据库进行增删改查 获取结果集 关闭资源 2.什么是mybatis? 如果你在面试中被问到,只需说以下...

    mybatis面试题.pdf

    mybatis面试题.pdf

    Mybatis面试题(含答案).pdf

    Mybatis面试题总结 本文总结了 Mybatis 面试中的一些常见问题,并对每个问题进行了详细的解释和分析。这些问题涵盖了 Mybatis 的基本原理、Mapper 接口、分页、插件运行原理、缓存机制等方面。 1. #{}和${}的区别 ...

    Mybatis面试题(含答案)_.pdf

    目录: 1. #{}和${}的区别是什么? 2. 通常一个 Xml 映射文件,都会写一个 Dao 接口与之对应, 请问,这个 Dao 接口的工作原理是什么?...10. 简述 Mybatis 的 Xml 映射文件和 Mybatis 内部数据结构之间的映射关系

    36道面试常问的MyBatis面试题!.docx

    MyBatis是一个流行的Java持久层框架,它允许开发者自定义SQL、存储过程和高级映射。这个框架的主要目的是简化数据库操作,将SQL语句与Java代码分离,提供更灵活的数据访问控制。 MyBatis的缓存机制是其性能优化的...

    day66-mybatis面试题

    MyBatis面试题往往会围绕其核心特性、应用场景、优缺点以及与其他框架如Hibernate的对比进行展开。下面我们详细解释给出的一些面试知识点: 1. MyBatis的特性:MyBatis是一个半ORM(对象关系映射)框架,提供了对象...

    Mybatis面试题(含答案)_20190220222608.pdf

    ### Mybatis面试题知识点解析 #### 1. #{}与${}的区别 - **#{}**:这是一种预编译处理方式。在Mybatis处理SQL时,#{}会被替换为SQL预编译语句中的问号(?),并在执行时通过`PreparedStatement`的`set`方法动态...

    MyBatis面试题(2020最新版)陆小马功钟浩.pdf

    MyBatis是一款优秀的持久层框架,它被归类为半ORM(对象关系映射)框架。相较于传统JDBC而言,MyBatis在处理数据库交互方面提供了更为便捷和高级的抽象。MyBatis的主要特点包括支持定制化SQL、存储过程、高级映射...

    Spring+Mybatis+Springboot面试试题及答案.zip

    在IT行业中,Spring、Mybatis和Springboot是Java开发领域广泛应用的三大框架,它们各自承担着不同的职责并共同构建高效的企业级应用。本压缩包文件提供了这三个技术的面试试题及答案,帮助求职者或开发者更好地理解...

    MyBatis面试题大全.rar

    MyBatis面试题大全.rar

    MyBatis面试题.url

    MyBatis面试题.url

    07-MyBatis面试题.docx

    07-MyBatis面试题

    MyBatis面试题分享.rar

    MyBatis是一款在中国乃至全球范围内广泛应用的...通过阅读《MyBatis面试题二(含答案)_.pdf》和《MyBatis面试题一.pdf》,你可以更全面地准备MyBatis相关的面试,理解并掌握这些知识点将有助于你在面试中脱颖而出。

    mybatis面试题#和$的区别.pdf

    mybatis面试题#和$的区别.pdf

    Java核心面试知识集—MyBatis面试题.md

    Java核心面试知识集—MyBatis面试题

    MyBatis面试题的PDF-持续更新

    MyBatis面试题的PDF--持续更新!!!!!

    mybatis面试题整理详细版

    MyBatis 面试题整理详细版 MyBatis 是一个半 ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。MyBatis 可以...

    MyBatis面试题(2025最新版).docx

    MyBatis面试题(2025最新版)

Global site tag (gtag.js) - Google Analytics