【每天5分钟,了解一个知识点】
在 Java 开发领域中,数据库操作是至关重要的一环。而在这其中,SqlSessionFactory、SqlSession 以及 Druid 都扮演着关键的角色。本文将对它们进行剖析,并附上相关面试题指南。
二、SqlSessionFactory 详解
(一)核心概念SqlSessionFactory 是 MyBatis 框架中至关重要的一个组件。它是创建 SqlSession 的工厂类,其创建过程是一个相对复杂但又高度封装的过程。
(二)创建过程
配置文件读取:MyBatis 通过读取配置文件(通常是 XML 文件)来获取数据库连接信息、映射文件路径等重要配置。
SqlSessionFactoryBuilder:借助这个构建器,将读取到的配置信息进行解析和处理,构建出 SqlSessionFactory 实例。
(三)源码分析在 MyBatis 源码中,SqlSessionFactoryBuilder 的 build 方法中,会对配置文件进行深度解析,包括数据源的配置、映射语句的解析等。它会把这些信息整理成一个内部的数据结构,以便后续创建 SqlSession 时能够高效地使用。
(四)应用场景
在独立的 MyBatis 项目中,我们通常在项目启动阶段创建 SqlSessionFactory,并将其保存在一个全局的位置,比如一个单例类或者静态变量中,方便后续在不同的业务逻辑中获取 SqlSession。
在与 Spring 集成的项目中,Spring 会负责管理 SqlSessionFactory 的生命周期。Spring 通过配置文件或者注解的方式,读取 MyBatis 的配置信息,创建 SqlSessionFactory,并将其注入到需要的地方。
三、SqlSession 深度解读
(一)主要作用SqlSession 是 MyBatis 与数据库进行交互的核心对象。它提供了执行 SQL 语句的方法,比如 selectOne、selectList、insert、update、delete 等。同时,它还负责事务的管理以及缓存的操作。
(二)工作流程
获取 SqlSession:通过 SqlSessionFactory 打开一个新的 SqlSession,这个过程通常是一个轻量级的操作。
执行 SQL 操作:使用 SqlSession 调用相应的方法执行 SQL 语句。在执行过程中,MyBatis 会根据映射文件中的配置,将 SQL 语句与对应的 Java 对象进行映射。
事务管理:可以在 SqlSession 中手动开启事务、提交事务或者回滚事务。这对于保证数据的一致性和完整性非常重要。
关闭 SqlSession:在操作完成后,一定要记得关闭 SqlSession,以释放资源。
四、Druid 剖析(数据库连接池)
(一)基本概念Druid 是一款高性能的数据库连接池。它的主要作用是管理数据库连接,避免频繁地创建和销毁连接,从而提高数据库访问效率。
(二)核心功能
连接管理:Druid 维护了一个连接池,在初始化时创建一定数量的连接,并在需要时分配给客户端。当客户端使用完连接后,连接会被回收,而不是直接关闭。
监控与统计:Druid 提供了强大的监控功能,可以实时监控连接池的使用情况、SQL 执行情况等。通过这些监控信息,开发人员可以及时发现和解决数据库访问中的问题。
扩展与配置:Druid 具有高度的可扩展性和可配置性。可以根据实际需求调整连接池的大小、超时时间、验证方式等参数。
(三)工作原理
初始化:在系统启动时,Druid 根据配置参数创建一定数量的数据库连接,并将这些连接放入连接池中。
获取连接:当应用程序需要访问数据库时,从连接池中获取一个可用的连接。如果连接池中没有可用的连接,Druid 会根据配置的策略创建新的连接或者等待其他连接释放。
使用连接:应用程序使用获取到的连接进行数据库操作。
归还连接:当数据库操作完成后,应用程序将连接归还到连接池中,而不是直接关闭连接。
五、面试题指南
(一)SqlSessionFactory 相关
问题:请简述 SqlSessionFactory 的创建过程。
答案:首先读取 MyBatis 的配置文件,然后通过 SqlSessionFactoryBuilder 对配置文件进行解析,最终构建出 SqlSessionFactory 实例。
问题:SqlSessionFactory 是线程安全的吗?
答案:是,SqlSessionFactory 是线程安全的。
(二)SqlSession 相关
问题:SqlSession 在事务管理中起到什么作用?
答案:SqlSession 可以开启事务、提交事务以及回滚事务,确保数据库操作的原子性、一致性、隔离性和持久性。
问题:使用 SqlSession 时需要注意什么?
答案:使用完 SqlSession 后一定要及时关闭,以避免资源泄露。
(三)Druid 相关
问题:Druid 作为数据库连接池有哪些优势?
答案:Druid 具有高效的连接管理、强大的监控与统计功能、高度的可扩展性和可配置性等优势。
问题:请简述 Druid 连接池的工作原理。
答案:系统启动时初始化连接,使用时从池中获取,用完归还,无可用连接时按策略处理。
【关联阅读】




