面经---Mybatis

本文探讨了JDBC操作数据库的局限性,包括资源消耗、SQL维护困难等问题,并介绍了MyBatis如何通过数据库连接池、SQL语句封装、参数转换及结果映射等特性解决这些弊端,强调了其代码量减少、易于学习、SQL分离和动态SQL支持等优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JDBC操作数据库的弊端:

  1. 每一次操作都需要开启连接,关闭连接,耗资源
  2. JDBC直接把SQL语句写在业务逻辑代码中,SQL的可维护性差
  3. JDBC的SQL的参数是硬编码,可维护性差
  4. JDBC结果集的返回resultset

Mybatis解决了JDBC的问题:

  1. 底层采用数据库连接池机制
  2. 将sql语句封装到了xml映射文件中
  3. 自带参数类型转换
  4. 返回结果直接是list或javabean对象

Mybatis优点:

  1. 减少代码量
  2. Mybatis是最简单的持久化框架,小巧且简单易学
  3. 灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从代码中彻底分离,降低耦合度,便于统一管理和优化,可重用。
  4. 提供XML标签,支持编写动态的SQL语句
  5. 提供映射标签,支持对象与数据库的ORM字段的关系映射

Mybatis缺点:

  1. SQL语句的编写工作量较大,尤其是字段多、关联表多时,对开发人员编写
  2. SQL语句的功底有一定的要求
  3. SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库
### MyBatis-Plus 试常见问题及答案 #### 一、MyBatis-Plus简介及其优势 MyBatis-Plus 是基于 MyBatis 的增强工具,旨在简化 MyBatis 开发,提高开发效率,减少代码冗余。对于Java开发者而言,在试中展示对这一框架的理解非常重要[^1]。 #### 二、条件构造器的作用 条件构造器是MyBatis-Plus提供的一种用于构建复杂查询条件的功能组件。通过它能够更加灵活方便地组合各种SQL查询条件,从而满足业务需求的变化。这不仅提高了编码效率也增强了程序可读性和维护性[^2]。 #### 三、分页插件工作原理 为了处理大数据量情况下的性能瓶颈问题,MyBatis-Plus内置了一个高效的分页插件。该插件可以在不改变原有SQL语句的基础上自动完成数据分页操作,并返回指定范围内的记录集合给前端页显示。这种方式既简单又高效,极大地方便了Web应用的数据展示层设计。 #### 四、乐观锁机制解析 所谓“乐观锁”,是指每次更新前先检查当前版本号是否与数据库中存储的一致;如果不一致则认为发生了并发冲突并阻止此次修改尝试。而在MyBatis-Plus里实现了这种机制——即每当执行insert或update命令时都会自动生成version字段用来追踪实体对象的状态变化过程。一旦检测到有其他事务抢先完成了提交动作,则本次更改将会失败以确保数据一致性得到保障。 #### 五、逻辑删除概念说明 不同于物理意义上的真正移除某条记录,“逻辑删除”只是将其标记为已失效状态而不实际销毁其内容本身。具体来说就是新增加一个名为deleted的小整型属性,默认值设为0表示正常存在;当需要对该行做假性清除时只需将此标志位设置成非零即可达到目的。这样做可以有效防止误删重要资料的同时还便于日后恢复历史信息查阅。 ```java // 示例:启用逻辑删除功能配置 public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); // 启用全局逻辑删除规则 GlobalConfig globalConfig = new GlobalConfig(); LogicDeleteStrategy logicDeleteStrategy = new DefaultLogicDeleteStrategy("deleted", "0", "1"); globalConfig.setLogicDeleteValue(logicDeleteStrategy.getDeletedVal()); globalConfig.setLogicNotDeleteValue(logicDeleteStrategy.getNotDeletedVal()); mybatisPlusProperties.setGlobalConfig(globalConfig); } } ``` #### 六、# 和 $ 符号的区别 在MyBatis中`#{}`和`${}`分别代表两种不同的占位符表达方式。前者属于预编译参数化形式,后者则是字符串拼接模式。通常建议优先采用安全系数更高的`#{}`来进行变量替换因为这样能有效预防SQL注入攻击风险的发生;而只有在特殊场景下才考虑使用${}比如动态表名等情况[^3]。 #### 七、关于一级缓存的工作流程描述 MyBatis自带了一级缓存机制,默认情况下处于开启状态。它是作用域限定于单个SqlSession实例级别的本地内存缓冲区(PerpetualCache),主要用于保存同一会话期间内重复执行过的查询结果集以便下次可以直接从中取回无需再次访问底层持久化层。不过需要注意的是随着sqlsession关闭之后所有关联着它的临时性资源都将随之释放掉包括但不限于上述提到的cache区域[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值