MybBatis 面试题集

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO

联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬

学习必须往深处挖,挖的越深,基础越扎实!

阶段1、深入多线程

阶段2、深入多线程设计模式

阶段3、深入juc源码解析


阶段4、深入jdk其余源码解析


阶段5、深入jvm源码解析

码哥源码部分

码哥讲源码-原理源码篇【2024年最新大厂关于线程池使用的场景题】

码哥讲源码【炸雷啦!炸雷啦!黄光头他终于跑路啦!】

码哥讲源码-【jvm课程前置知识及c/c++调试环境搭建】

​​​​​​码哥讲源码-原理源码篇【揭秘join方法的唤醒本质上决定于jvm的底层析构函数】

码哥源码-原理源码篇【Doug Lea为什么要将成员变量赋值给局部变量后再操作?】

码哥讲源码【你水不是你的错,但是你胡说八道就是你不对了!】

码哥讲源码【谁再说Spring不支持多线程事务,你给我抽他!】

终结B站没人能讲清楚红黑树的历史,不服等你来踢馆!

打脸系列【020-3小时讲解MESI协议和volatile之间的关系,那些将x86下的验证结果当作最终结果的水货们请闭嘴】

什么是Mybatis?​​

MyBatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态SQL,可以严格控制SQL执行性能,灵活度高。

MyBatis 提供了与数据库交互的API,让程序员可以通过简单的XML或注解来配置和映射原生信息,将接口和Java的实体类映射到数据库中的记录,免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。

Mybaits的优缺点?

优点

MyBatis 的核心优势在于其简单性和灵活性。其优点如下:

  1. 精细的SQL控制:MyBatis 允许我们手写SQL,因此可以进行精细的查询优化,充分利用数据库本身的特性和优化。
  2. 灵活性高:支持动态SQL,便于构建复杂查询。我们可以根据不同的条件动态地改变SQL语句,而无需改变Java代码结构。
  3. 易于理解和学习:MyBatis 的配置和使用相对简单直观,对于熟悉SQL的初学者来说是非常容易上手的。
  4. 消耗资源小:没有完整ORM框架那样的数据持久层自动化管理的开销,MyBatis 的资源消耗相对较小。
  5. 良好的集成性:可以很容易地与其他框架(如Spring)集成,同时社区和第三方工具支持良好。

缺点

  1. SQL管理:随着项目的扩展,SQL语句可能会变得难以管理,尤其是当这些SQL语句分散在大量的XML文件中时。
  2. 数据库移植性:因为需要手写SQL,所以在不同的数据库之间迁移可能需要重新编写特定的SQL语句,降低了代码的移植性。
  3. 部分自动化缺失:与完整的ORM工具相比,缺乏自动的CRUD操作、对象关系维护。
  4. 复杂性管理:对于有很多关联关系和继承映射的复杂领域模型,MyBatis的处理不如完整的ORM框架方便。
  5. 二次开发需求:为了满足特定需求,如分页、性能优化等,需要进行二次开发和额外配置。
  6. 维护性挑战:由于SQL和Java代码的分离,大型项目中的跨团队开发和维护可能会带来沟通和协作的挑战。
  7. 缓存支持有限:MyBatis 自身的缓存机制比较简单,对于复杂的缓存需求,开发者需要自行实现或集成第三方缓存解决方案。

所以,MyBatis 的适用场景通常是那些需要与数据库交互且对SQL优化要求较高的项目,而对于那些需要快速开发和避免直接处理SQL的场景,可能更倾向于使用完整的ORM框架。

Hibernate 和 MyBatis 有什么区别?

基本哲学

  • Hibernate 是一个全功能的对象关系映射(ORM)框架,它封装了很多数据库操作的细节,提供了一个更高层次的对象数据管理接口。
  • MyBatis 是一个半ORM框架,它允许你直接编写SQL,同时提供了一些ORM特性,比如对象映射。

SQL处理

  • Hibernate 自动生成SQL,用户几乎不需要编写任何SQL语句,这样可以减少开发时间,但有时可能牺牲了一些性能。
  • MyBatis 需要用户自己编写SQL语句,这为性能优化提供了可能,但增加了开发工作量。

对象映射

  • Hibernate 通过HQL(Hibernate Query Language)或Criteria API来执行数据库操作,并将结果映射到Java对象,通常不需要用户了解底层的SQL。
  • MyBatis 通过XML或注解方式将指定的SQL语句映射到Java方法和对象上。

缓存机制

  • Hibernate 提供了更为强大的内置一级和二级缓存机制,可以显著提高应用性能。
  • MyBatis 提供一级缓存和二级缓存的支持,但相比Hibernate,它的缓存机制较为简单。

数据操作层次

  • Hibernate 作为一个完整的ORM解决方案,操作的是对象和对象的关系,它隐藏了很多JDBC和数据库相关的细节。
  • MyBatis 更接近于JDBC,它操作的更多是数据而不是对象,因此开发者需要有更多的数据库和SQL知识。

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

  • #{}是占位符,预编译处理;${}是拼接符,字符串替换,没有预编译处理。
  • MyBatis 在处理 #{}时,会根据Java类型推断出JDBC类型,并根据类型对数据进行处理,而${} 传入的数据会被当作字符串拼接到SQL语句中。
  • #{} 会被MyBatis解析为一个占位符参数(?),然后调用PreparedStatement的set方法来赋值,这意味着MyBatis会自动为SQL参数提供引号,防止SQL注入,而${} 会将参数直接嵌入到SQL语句中,这可能会导致SQL注入的风险,因为参数的内容会直接解释为SQL语句的一部分。

总结:尽管 ${} 在某些情况下有用,但是必须非常小心地使用,需要程序做严格的控制与校验,以避免SQL注入攻击。在大多数情况下,推荐使用 #{} 来传递参数,因为它更安全且易于维护。

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

一共有四种写法:

一、使用**#{}**传递完整的模糊匹配字符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值