mybatis工作原理详解

87 阅读1分钟

MyBatis 是一个优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
### MyBatis 工作原理:
1. **配置 SQL 映射文件**:MyBatis 首先通过 SQL 映射文件来定义 SQL 语句和对象之间的映射关系。
2. **创建 SQL 会话工厂**:通过配置文件(mybatis-config.xml)或注解来创建 SqlSessionFactory,它是 MyBatis 的核心接口。
3. **创建 SQL 会话**:从 SqlSessionFactory 中获取 SqlSession,SqlSession 是一个接口,可以执行已经映射的 SQL 语句。
4. **执行 SQL 语句**:通过 SqlSession 的 API 执行 SQL 语句,可以执行映射的 SQL 语句并返回结果。
5. **处理结果**:将执行 SQL 语句的结果映射到对象中。
### 示例代码:
假设我们有一个用户表(user),我们想要实现用户信息的增删改查操作。
#### 1. 配置文件 `mybatis-config.xml`
```xml

\`\`\` \#### 2. Mapper 文件 \`BlogMapper.xml\` \`\`\`xml select \* from Blog where id = #{id} \`\`\` \#### 3. 映射接口 \`BlogMapper.java\` \`\`\`java package org.mybatis.example; public interface BlogMapper { Blog selectBlog(int id); } \`\`\` \#### 4. 实体类 \`Blog.java\` \`\`\`java package org.mybatis.example; public class Blog { private int id; private String title; private String content; // getter 和 setter 方法 } \`\`\` \#### 5. 测试类 \`TestMyBatis.java\` \`\`\`java import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.junit.Test; public class TestMyBatis { @Test public void testBlog() throws Exception { // 获取 SqlSessionFactory SqlSessionFactory sqlSessionFactory = MyBatisUtil.getSqlSessionFactory(); try (SqlSession session = sqlSessionFactory.openSession()) { // 获取 Mapper 接口的实例 BlogMapper mapper = session.getMapper(BlogMapper.class); // 执行查询 Blog blog = mapper.selectBlog(101); System.out.println(blog.getTitle()); } } } \`\`\`