ORM 框架mybatis-plus 初始化过程详细说明
为了您更好的阅读互动体验,为了您及时看到更多内容,点个“关注”,我们每天为您更新技术知识、分享SpringBoot,Vue,hadoop,架构等,后续还会推出视频课程,基于ruoyi-cloud实现项目讲解!
MyBatis 的初始化过程主要包括以下几个步骤:
- 创建 SqlSessionFactoryBuilder 对象 当有了 XML 配置文件之后(关于数据源等一些基本配置),我们就可以使用MyBatis 提供的 SqlSessionFactoryBuilder 类的 build() 方法基于 XML 配置文件构建出 SqlSessionFactory 实例。
- 生成 Configuration 对象 在创建 SqlSessionFactory 实例的过程中,一份全局的配置数据 Configuration 也就产生了,这份配置包括了数据库连接池、事务管理器、已映射语句(Mapped Statement )、映射器(Mapper)接口及其实现等等。
- 解析 mapper 文件 MyBatis 初始化期间会将 SQL 语句或存储过程映射文件以及接口注册到 Configuration 对象中,这样 MyBatis 就知道了 SQL 语句,知道了参数类型,以及返回值类型。
- 生成 SqlSessionFactory 对象 当 Configuration 对象初始化完成之后,就可以创建 SqlSessionFactory 对象,它是数据库的连接池。
- 创建 SqlSession 对象 当进行具体的 SQL 操作时,我们会从 SqlSessionFactory 中获取 SqlSession ,然后再通过 SqlSession 获取 Mapper 来进行具体操作。SqlSession 对象代表和数据库的一次对话。
- 解析 Mapper 接口方法 操作数据库需要调用 SqlSession 的 api,为了简化操作,MyBatis 提供了反射和动态代理的技术封装 API,它可以根据接口定义和 XML 文件生成需要的 api。
初始化过程完成后,MyBatis 就可以使用了,你可以通过 sqlSession.getMapper(Class) 来获取 Mapper 对象,然后进行数据库操作。
这里是一个MyBatis初始化实例代码,从创建SqlSessionFactory到获取SqlSession的过程:
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.session.SqlSession;
public class MyBatisInitExample {
public static void main(String[] args) throws Exception {
String resource = "org/mybatis/example/mybatis-config.xml"; // 这里要写你自己的mybatis配置文件路径
InputStream inputStream = Resources.getResourceAsStream(resource);
// Step1: 创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// Step2: 从SqlSessionFactory获取SqlSession
try (SqlSession session = sqlSessionFactory.openSession()) {
// Step3: 获取Mapper对象,并执行数据库操作
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.selectUser(1);
System.out.println(user.getName());
}
}
}
interface UserMapper {
User selectUser(int id);
}
class User {
private int id;
private String name;
public int getId() {
return id;
}
public String getName() {
return name;
}
// 其他getter、setter方法省略
}