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. 输出结果映射。

相关推荐
寻星探路5 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
曹牧8 小时前
Spring Boot:如何测试Java Controller中的POST请求?
java·开发语言
爬山算法8 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
kfyty7259 小时前
集成 spring-ai 2.x 实践中遇到的一些问题及解决方案
java·人工智能·spring-ai
猫头虎9 小时前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven
李少兄9 小时前
在 IntelliJ IDEA 中修改 Git 远程仓库地址
java·git·intellij-idea
忆~遂愿9 小时前
ops-cv 算子库深度解析:面向视觉任务的硬件优化与数据布局(NCHW/NHWC)策略
java·大数据·linux·人工智能
小韩学长yyds9 小时前
Java序列化避坑指南:明确这4种场景,再也不盲目实现Serializable
java·序列化
仟濹9 小时前
【Java基础】多态 | 打卡day2
java·开发语言
Re.不晚9 小时前
JAVA进阶之路——无奖问答挑战2
java·开发语言