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的执行流程?
-
读取MyBatis配置文件
mybatis-config.xml
。 -
构造会话工厂
SqlSessionFactory
。 -
会话工厂创建
SqlSession
对象。 -
操作数据库的接口,
Executor
执行器。 -
Executor
执行方法中的MappedStatement
参数。 -
输入参数映射。
-
输出结果映射。