MyBatis详解

MyBatis是一个基于Java的持久层ORM(对象关系映射)框架。它的主要作用是将Java程序中的数据对象映射到关系数据库中,实现数据的交互。MyBatis支持定制化SQL、存储过程以及高级映射,通过MyBatis,开发者可以免除大部分的JDBC代码以及设置参数和获取结果集的工作,极大地简化了数据库操作。

运行原理:

加载配置并初始化

当MyBatis启动时,它会加载配置文件(如mybatis-config.xml),这些配置文件包含了数据库连接信息、插件设置、类型别名等。同时,MyBatis还会加载映射文件(如mapper.xml),这些文件定义了SQL语句、参数映射和结果映射。这些配置和映射信息会被解析并生成MappedStatement对象,存储在内存中。
*

创建SqlSession

MyBatis应用程序会根据这些配置信息创建SqlSessionFactory工厂,进而获取SqlSession对象。SqlSession是MyBatis的核心,它包含了执行SQL所需要的所有方法。
*

SQL解析与执行

通过SqlSession,应用程序可以直接运行映射的SQL语句。这些SQL语句会被解析并执行,完成对数据的增删改查操作。
*

结果映射

执行完SQL语句后,MyBatis会将操作结果按照映射配置进行转换。这通常涉及到将数据库的记录转换为Java对象(如JavaBean),或者是将查询结果转换为HashMap等数据结构。
*

事务处理与关闭

在完成数据操作后,如果需要,MyBatis会进行事务提交。之后,SqlSession会被关闭,返回操作结果。

MyBatis 的基本使用方法:

配置数据源:

首先,在 MyBatis 中需要配置数据源,包括数据库连接信息、用户名、密码等。这通常在 XML 格式的配置文件中完成。
*

定义 SQL 映射文件:

在 MyBatis 中,需要编写 SQL 映射文件来定义 SQL 查询、更新、插入和删除操作。这些映射文件通常包含 SQL 语句以及映射到 Java 对象的结果集处理方式。
*

创建 DAO 接口:

为每个数据访问对象(DAO)定义一个 Java 接口,接口中定义的方法对应 SQL 映射文件中的 SQL 操作。
*

编写 SQL 映射配置:

将 SQL 映射文件和 DAO 接口进行关联配置,通常也是在 XML 格式的配置文件中完成。
*

使用 MyBatis API 进行数据库交互:

在应用程序中,通过获取 MyBatis 的 SqlSession 实例,调用其中的方法执行 SQL 操作,例如查询、插入、更新和删除等。
*

处理结果:

根据需要,处理从数据库中返回的结果集,并将其转换为 Java 对象进行进一步处理或展示。

总体来说,MyBatis 的使用方法主要包括配置数据源、定义 SQL 映射文件、创建 DAO 接口、编写 SQL 映射配置以及通过 MyBatis API 进行数据库交互。

示例代码:

配置数据源(mybatis-config.xml):

复制代码
<configuration>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC" />
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/mydatabase" />
        <property name="username" value="root" />
        <property name="password" value="password" />
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="com/example/mapper/UserMapper.xml" />
  </mappers>
</configuration>

定义 SQL 映射文件(UserMapper.xml):

复制代码
<mapper namespace="com.example.mapper.UserMapper">
  <!-- 根据用户ID查询用户信息 -->
  <select id="getUserById" resultType="User">
    SELECT * FROM users WHERE id = #{id}
  </select>
</mapper>

创建 DAO 接口(UserMapper.java):

复制代码
package com.example.mapper;

import com.example.model.User;

public interface UserMapper {
    // 根据用户ID查询用户信息
    User getUserById(int id);
}

使用 MyBatis API 进行数据库交互:

复制代码
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.example.mapper.UserMapper;
import com.example.model.User;

public class MyBatisExample {

    public static void main(String[] args) {
        String resource = "mybatis-config.xml";
        try (InputStream inputStream = Resources.getResourceAsStream(resource)) {
            // 创建 SqlSessionFactory 实例
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

            try (SqlSession session = sqlSessionFactory.openSession()) {
                // 获取 UserMapper 接口实例
                UserMapper userMapper = session.getMapper(UserMapper.class);
                
                // 调用接口方法查询用户信息
                User user = userMapper.getUserById(1);
                
                // 打印查询结果
                System.out.println(user);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

这个示例代码包含了配置数据源、定义 SQL 映射文件、创建 DAO 接口以及使用 MyBatis API 进行数据库交互的全部步骤,

相关推荐
好奇的菜鸟1 小时前
Spring Boot 事务失效问题:同一个 Service 类中方法调用导致事务失效的原因及解决方案
数据库·spring boot·sql
岁岁岁平安2 小时前
Redis基础学习(五大值数据类型的常用操作命令)
数据库·redis·学习·redis list·redis hash·redis set·redis string
小光学长4 小时前
基于vue框架的防疫科普网站0838x(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库
极限实验室4 小时前
使用 Docker Compose 简化 INFINI Console 与 Easysearch 环境搭建
数据库·docker·devops
飞翔的佩奇4 小时前
Java项目:基于SSM框架实现的旅游协会管理系统【ssm+B/S架构+源码+数据库+毕业论文】
java·数据库·mysql·毕业设计·ssm·旅游·jsp
float_六七6 小时前
SQL六大核心类别全解析
数据库·sql·oracle
慧一居士6 小时前
MyBatis-Plus的完整使用示例,完整使用示例手册
mybatis
Code季风8 小时前
将 gRPC 服务注册到 Consul:从配置到服务发现的完整实践(上)
数据库·微服务·go·json·服务发现·consul
Boilermaker19928 小时前
【Java EE】SpringIoC
前端·数据库·spring
霸王龙的小胳膊8 小时前
泛微虚拟视图-数据虚拟化集成
数据库