Mybatis

1、mybatis是什么?

是一个半自动ORM(对象关系映射)框架,内部封装了JDBC,开发时只需要关注SQL就可以,不需要花费精力去处理数据库驱动、数据库连接等过程。

2、mybatis优缺点?

优点: ①因为内置JDBC,所以减少了大量的代码冗余。 ②基于SQL编程,很灵活,SQL写在xml文件里,与程序解耦,便于管理。 ③兼容各种数据库。 ④提供映射标签,对象和数据库字段的相互映射。 缺点: ①SQL的编写量很大的时候,对开发人员的SQL功底有要求。 ②SQL依赖数据库,导致数据库移植性差,不能随意更换数据库。

3、#{}和${}的区别?

#{}:就相当于标识符 ?,可以有效解决SQL注入问题。

${}:相当于字符串拼接,直接拼接,会有sql注入问题。

4、mybatis如何实现分页?
  • 自己编写分页: 获取数据的list,然后编写代码进行分页。

  • 利用sql进行分页: 比如mysql的limit。

  • RowBounds参数实现分页

复制代码
//service层调用dao层接口,start开始的条数,limit每页几条
public List<RoleBean> queryByPage(int start, int limit) {
    return roleDao.queryUsersByPage(new RowBounds(start, limit));
}
​
//dao层接口加入RowBounds参数,就可以实现分页
public List<UserBean> queryUsersByPage(RowBounds rowBounds);
5、mybatis支持延迟加载(懒加载)吗?原理是什么?

支持

支持的对象: Mybatis仅支持association关联对象和collection关联集合对象的延迟加载,association指的就是一对一,collection指的就是一对多查询。 概念: 延迟加载的原理是在查询时只加载部分数据,当需要访问未加载的数据时再进行加载。这样可以减少查询所需的时间和资源,提高系统性能。 原理: MyBatis实现延迟加载的方式是使用CGLIB多态代理对象,在访问未加载的数据时触发代理对象的方法,从而进行数据的加载。延迟加载可以通过配置文件(lazyLoadingEnabled配置启用或禁用延迟加载)或注解(@Lazy)来实现。

6、mybatis的一级缓存+二级缓存有了解吗?

MyBatis的一级缓存是基于PerpetualCache的HashMap本地缓存,作用域为Session,默认开启。二级缓存需要单独开启,作用域为Namespace或mapper,默认也是采用PerpetualCache的HashMap存储。

7、Mybatis的一级缓存、二级缓存什么时候会清理缓存中的数据?

当作用域(一级缓存Session/二级缓存Namespaces)进行了新增、修改、删除操作后,默认该作用域下所有select中的缓存将被清空。

8、mybatis的执行流程?
  1. 读取MyBatis配置文件mybatis-config.xml

  2. 构造会话工厂SqlSessionFactory

  3. 会话工厂创建SqlSession对象。

  4. 操作数据库的接口,Executor执行器。

  5. Executor执行方法中的MappedStatement参数。

  6. 输入参数映射。

  7. 输出结果映射。

相关推荐
952362 小时前
MyBatis
后端·spring·mybatis
FQNmxDG4S4 小时前
Java多线程编程:Thread与Runnable的并发控制
java·开发语言
虹科网络安全5 小时前
艾体宝干货|数据复制详解:类型、原理与适用场景
java·开发语言·数据库
axng pmje5 小时前
Java语法进阶
java·开发语言·jvm
rKWP8gKv75 小时前
Java微服务性能监控:Prometheus与Grafana集成方案
java·微服务·prometheus
老前端的功夫5 小时前
【Java从入门到入土】28:Stream API:告别for循环的新时代
java·开发语言·python
qq_435287925 小时前
第9章 夸父逐日与后羿射日:死循环与进程终止?十个太阳同时值班的并行冲突
java·开发语言·git·死循环·进程终止·并行冲突·夸父逐日
小江的记录本5 小时前
【Kafka核心】架构模型:Producer、Broker、Consumer、Consumer Group、Topic、Partition、Replica
java·数据库·分布式·后端·搜索引擎·架构·kafka
yaoxin5211236 小时前
397. Java 文件操作基础 - 创建常规文件与临时文件
java·开发语言·python
极客先躯8 小时前
高级java每日一道面试题-2025年11月24日-容器与虚拟化题[Dockerj]-runc 的作用是什么?
java·oci 的命令行工具·最小可用·无守护进程·完全标准·创建容器的核心流程·runc 核心职责思维导图