MyBatis系列2_启动分析——开启通往持久层数据操作的必经之路
2023-03-07 11:06:12
MyBatis启动流程:深入揭秘
什么是MyBatis?
MyBatis,一个广受欢迎的Java持久层框架,凭借其简单易用、灵活性强、可扩展性高等优点,在业界享有盛誉。今天,让我们深入剖析MyBatis的启动过程,带你一步步揭开它的运行奥秘。
配置类的关键属性
在MyBatis的启动过程中,org.apache.ibatis.session.Configuration
类扮演着至关重要的角色。它包含了一系列属性,决定了 MyBatis 的运行行为,包括缓存配置、日志配置、数据库连接池配置等。
重要的属性
- cacheEnabled: 启用或禁用缓存,默认值为 true。
- lazyLoadingEnabled: 启用或禁用延迟加载,默认值为 true。
- aggressiveLazyLoading: 启用或禁用积极的延迟加载,默认值为 false。
- defaultStatementTimeout: 默认的语句超时时间,默认值为 30 秒。
- defaultFetchSize: 默认的获取大小,默认值为 100。
- defaultExecutorType: 默认的执行器类型,默认值为 SIMPLE。
- defaultStatementType: 默认的语句类型,默认值为 PREPARED。
- mapUnderscoreToCamelCase: 将数据库中的下划线字段映射到 Java 中的驼峰字段,默认值为 false。
- useGeneratedKeys: 使用自动生成的键,默认值为 false。
- autoMappingBehavior: 自动映射行为,默认值为 PARTIAL。
这些属性可以根据不同的应用场景进行灵活配置。例如,如果你想启用缓存,可以将 cacheEnabled
属性设置为 true;如果你想禁用延迟加载,可以将 lazyLoadingEnabled
属性设置为 false。
MyBatis启动流程
加载配置文件
MyBatis 启动的第一步是加载配置文件,通常是 mybatis-config.xml
文件。
创建SqlSessionFactoryBuilder
加载配置文件后,创建一个 SqlSessionFactoryBuilder
对象,它负责构建一个 SqlSessionFactory
对象。
创建SqlSessionFactory
调用 SqlSessionFactoryBuilder
对象的 build()
方法,创建一个 SqlSessionFactory
对象。SqlSessionFactory
对象充当一个工厂,用于创建用于实际数据库交互的 SqlSession
对象。
创建SqlSession
调用 SqlSessionFactory
对象的 openSession()
方法,创建一个 SqlSession
对象。SqlSession
对象是 MyBatis 与数据库交互的主要接口。
使用SqlSession操作数据库
可以使用 SqlSession
对象执行 SQL 语句、获取和设置参数,以及处理事务。
示例代码
下面是一个简单的示例代码,展示了如何使用 MyBatis 来查询数据库:
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.Reader;
public class Main {
public static void main(String[] args) throws IOException {
// 加载配置文件
Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
// 创建 SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
// 打开 Session
SqlSession session = sqlSessionFactory.openSession();
// 执行查询
List<User> users = session.selectList("com.example.mapper.UserMapper.selectAll");
// 遍历结果
for (User user : users) {
System.out.println(user);
}
// 关闭 Session
session.close();
}
}
常见问题解答
1. 如何在 MyBatis 中启用延迟加载?
答:设置 lazyLoadingEnabled
属性为 true
。
2. 如何在 MyBatis 中自定义缓存?
答:实现 Cache
接口并将其配置为 Configuration
对象的 cache
属性。
3. 如何在 MyBatis 中设置默认的语句超时时间?
答:设置 defaultStatementTimeout
属性。
4. 如何在 MyBatis 中使用自动生成的键?
答:设置 useGeneratedKeys
属性为 true
。
5. 如何在 MyBatis 中映射数据库字段和 Java 对象属性?
答:使用 @Column
和 @Transient
注解,或使用 mapUnderscoreToCamelCase
属性。
结论
了解 MyBatis 的启动过程对于有效利用这个强大的持久层框架至关重要。通过配置 Configuration
对象的属性,我们可以根据不同的应用场景定制 MyBatis 的行为。通过掌握这些知识,你可以更有效地利用 MyBatis 简化数据库交互,提升应用的性能和可维护性。