Bootstrap

Java面试之mybaits常见面试题

1、MyBatis是什么?

MyBatis是一个优秀的持久层框架,它支持自定义SQL、存储过程和高级映射。MyBatis消除了几乎所有的JDBC代码和参数的手动设置以及结果集的检索。

2、MyBatis的优点是什么?

小巧、学习成本低:会写SQL上手就很快。
方便维护管理:SQL不需要在Java代码中找,SQL代码可以分离出来,重用。
接近JDBC、灵活:支持动态SQL。
支持对象与数据库ORM字段关系映射。

3、MyBatis的缓存机制是怎样的?

MyBatis的缓存分为一级缓存和二级缓存。
一级缓存:默认开启,基于SqlSession。当SqlSession关闭或清空时,一级缓存将不再可用或被清空。
二级缓存:默认关闭,需要手动配置,并且实现序列化的JavaBean才能被缓存。当执行更新、删除、增加操作时,会刷新二级缓存。

4、MyBatis中#{}和${}的区别是什么?

#{}:是预编译处理,它会替换为?,并设置ParameterHandler的相应参数值。它用于防止SQL注入。
${}:是字符串替换,它会直接替换SQL中的占位符。这种方式存在SQL注入的风险,需要谨慎使用。

5、MyBatis如何进行分页查询?

MyBatis Plus提供了Page类用于分页查询。通过调用Page对象的静态方法Page page(long current, long size),可以指定当前页和每页大小,然后通过传递Page对象到查询方法中实现分页查询。

6、MyBatis如何配置和使用?

需要配置SqlMapConfig.xml作为全局配置文件,包括mybatis的运行环境等信息。
编写mapper.xml文件作为SQL映射文件,其中配置了操作数据库的SQL语句。
通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂,由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。

7、MyBatis与Hibernate的区别是什么?

MyBatis是半自动的ORM框架,开发者需要编写SQL语句,而Hibernate是全自动的ORM框架,无需编写SQL语句。
MyBatis灵活性高,支持动态SQL,而Hibernate则相对固定,灵活性较低。
MyBatis适用于需求变化频繁、需要灵活操作SQL的场景,而Hibernate适用于需求稳定、变化不大的场景。

8、MyBatis的核心组件有哪些?

SqlSessionFactoryBuilder:用于构建SqlSessionFactory。
SqlSessionFactory:会话工厂,用于创建SqlSession。
SqlSession:会话对象,用于执行SQL语句。
Mapped Statement:映射语句对象,包装了mybatis配置信息及sql映射信息等。

9、MyBatis支持事务吗?

MyBatis本身并不直接提供事务管理功能,但它可以与事务管理器(如JDBC、Spring等)集成,从而支持事务。

在MyBatis中,你可以通过配置数据源和事务管理器来启用事务。当你执行一系列的数据库操作时,这些操作要么全部成功,要么全部失败,这就是事务的原子性。

例如,在Spring框架中,你可以使用@Transactional注解来声明一个方法需要事务支持。Spring会为你管理事务的边界,包括开始事务、提交事务或回滚事务。在MyBatis的Mapper接口或Service层中,你可以调用这些方法,并确保这些操作在同一个事务中执行。

此外,MyBatis也提供了SqlSession接口,它表示和数据库的一次会话。你可以通过SqlSession的commit()和rollback()方法来手动控制事务的提交和回滚。但是,在实际应用中,我们更推荐使用Spring等框架来管理事务,因为它们提供了更强大和灵活的事务管理功能。

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;