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

相关推荐
杨哥带你写代码33 分钟前
网上商城系统:Spring Boot框架的实现
java·spring boot·后端
camellias_34 分钟前
SpringBoot(二十一)SpringBoot自定义CURL请求类
java·spring boot·后端
布川ku子35 分钟前
[2024最新] java八股文实用版(附带原理)---Mysql篇
java·mysql·面试
向阳12181 小时前
JVM 进阶:深入理解与高级调优
java·jvm
背水1 小时前
初识Spring
java·后端·spring
用屁屁笑1 小时前
Java:JVM
java·开发语言·jvm
Li_0304061 小时前
Java第十四天(实训学习整理资料(十三)Java网络编程)
java·网络·笔记·学习·计算机网络
旧故新长1 小时前
七牛云上传图片成功,但是无法访问显示{error : document not found}
java·maven
ADBOEX1 小时前
CloudSim 里CloudletSchedulerTimeShared类
java
二十雨辰2 小时前
[Java]微服务治理
java·spring cloud