Mybatis之快速入门

什么是MyBatis?

MyBatis是一个优秀的持久层框架,它简化了数据库访问和操作的过程,同时提供了强大的SQL解析和映射功能,使得开发人员可以通过简单的配置来实现复杂的数据库操作。MyBatis是一种ORM(Object Relational Mapping)框架,它能够将关系型数据库中的数据映射成为面向对象的Java对象,从而实现对象与数据库之间的无缝转换。

Mybatis整体架构

在这里插入图片描述

基础支持层

基础支持层主要负责与数据库交互的基本功能,包括连接数据库、执行SQL语句、处理事务等。这部分功能主要由SqlSession接口和SqlSessionFactory接口定义。SqlSessionFactory是一个工厂类,用于创建SqlSession对象,而SqlSession则负责执行SQL语句和管理事务。

接口层

接口层是MyBatis的重要特性之一,它将Mapper接口与XML配置文件进行绑定,使得开发人员可以通过Java接口来调用SQL语句,而无需编写繁琐的SQL语句和结果映射代码。接口层主要由org.apache.ibatis.annotations包中的注解和接口组成,以及org.apache.ibatis.binding.MapperProxy类实现.

核心处理层

核心处理层主要包含了MyBatis框架的核心功能,包括SQL解析、参数处理、结果映射等。这部分功能主要由org.apache.ibatis.executor.Executor接口和相关实现类完成。Executor接口定义了数据库操作的基本方法,而具体的实现类负责具体的SQL执行和结果处理。

Mybatis对比传统JDBC

JDBC方式

我们先来看使用传统JDBC来查询数据库数据处理

public User getUserById(int id) {
    Connection connection = null;
    PreparedStatement statement = null;
    ResultSet resultSet = null;
    User user = null;
    
    try {
        // 建立数据库连接
        connection = DriverManager.getConnection(url, username, password);
        
        // 定义SQL语句
        String sql = "SELECT * FROM user WHERE id = ?";
        
        // 创建预编译的SQL语句
        statement = connection.prepareStatement(sql);
        statement.setInt(1, id); // 设置SQL语句中的参数
        
        // 执行查询并获取结果集
        resultSet = statement.executeQuery();
        
        // 处理结果集
        if (resultSet.next()) {
            user = new User();
            user.setId(resultSet.getInt("id"));
            user.setName(resultSet.getString("name"));
            user.setAge(resultSet.getInt("age"));
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        // 关闭资源,释放数据库连接
        try {
            if (resultSet != null) resultSet.close();
            if (statement != null) statement.close();
            if (connection != null) connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    
    return user;
}

Mybatis方式

// 1.创建XML配置文件mybatis-config.xml,用于配置数据库连接信息和映射文件位置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/test" />
                <property name="username" value="root" />
                <property name="password" value="123456" />
            </dataSource>
        </environment>
    </environments>
    
    <mappers>
        <mapper resource="org/apache/ibatis/demo/dao/UserMapper.xml"/>
    </mappers>
</configuration>

// 2.创建MyBatis的映射文件UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.apache.ibatis.demo.dao.UserMapper">

  <select id="selectById" resultType="org.apache.ibatis.demo.domain.User">
    select * from user where id = #{id}
  </select>

</mapper>
// 3.创建Java类User,用于映射数据库表中的数据
@Data
public class User {
    private int id;
    private String name;
    private int age;
}
// 4.创建一个UserMapper接口,用于定义MyBatis映射文件中的SQL操作方法
public interface UserMapper {
    User selectById(int id);
}
// 5.操作数据
public class Main {
    public static void main(String[] args) {
        // 创建MyBatis的SqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
        
        // 获取SqlSession对象
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            // 获取UserMapper接口的实现类
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            
            // 查询id为1的用户数据
            User user = userMapper.getUserById(1);
            System.out.println(user);
        }
    }
}

对比

// 相比传统的JDBC方式,MyBatis具有以下优势:
1.简化SQL编写
MyBatis通过XML配置或注解来生成SQL语句和结果映射,使得开发人员不再需要手动编写大量的SQL语句和结果集映射代码。

2.提供对象关系映射
MyBatis支持将数据库表和Java对象之间进行映射,开发人员可以通过面向对象的方式来操作数据库,减少了数据转换的工作。

3.动态SQL支持
 MyBatis可以根据不同的条件生成不同的SQL语句,实现动态SQL,而传统JDBC需要手动拼接SQL语句。

4.缓存机制
MyBatis支持缓存查询结果,可以提高查询性能,减少对数据库的访问次数。

源码编译

后续我们将结合源码来学习Mybatis,可以通过下面地址(https://www.cnblogs.com/mokingone/p/9108999.html)编译Mybatis源码,方便后面的学习.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值