mybatis框架的orm机制(类和数据库表的映射)

发布时间:2023年12月18日

MyBatis框架之所以能够将数据库表映射到Java类,其核心原理是基于对象关系映射(ORM)。ORM是一种编程技术,用于在关系型数据库和面向对象编程语言之间建立映射关系,从而实现数据库表和对象之间的转换。

MyBatis实现映射的基本原理:

  1. 配置映射关系: 在MyBatis的映射文件中,开发者需要配置数据库表和Java类之间的映射关系。这通常通过XML或注解的方式完成。映射文件中包含了表的结构、字段和对应的Java类的属性,以及SQL语句的配置。

  2. 创建对应的Mapper接口,创建对应的方法,然后再对应的Mapper配置文件中进行映射

    映射的两个一致:

    1.Mapper.xml文件中的namespase需要与对应接口的全类名保持一致

    2.xml文件中的对应方法标签的id需要与mapper接口中的方法名一致

    然后sqlSession的getMappe方法在调用时,会根据对应接口的字节码文件

    自动创建该接口的实现类对象,并根据接口中的方法名去匹配对应xml文件中的id

    执行对应的sql语句,并将结果返回给mapper对象

    <!-- UserMapper.xml -->
    
    <resultMap id="BaseResultMap" type="com.example.User">
        <id column="id" property="id" jdbcType="BIGINT"/>
        <result column="username" property="username" jdbcType="VARCHAR"/>
        <result column="email" property="email" jdbcType="VARCHAR"/>
    </resultMap>
    
    <select id="getUserById" resultype="User">
        SELECT * FROM users WHERE id = #{id}
    </select>
    

    3.ORM框架的执行: 当执行数据库操作时,MyBatis根据配置的映射关系,自动将数据库查询结果映射为Java对象。这包括了查询结果集中的每一行记录,每个字段的值被映射到Java对象的相应属性上。

// 使用MyBatis进行数据库操作
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.getUserById(1L);

?4.类型处理器(Type Handler): MyBatis通过类型处理器将数据库的数据类型转换为Java中的数据类型。类型处理器负责在数据库查询和Java对象之间进行数据类型的转换,确保数据的正确映射。

public class User {
    private Long id;
    private String username;
    private String email;

    // Getters and setters
}

5.SQL语句的执行: MyBatis执行配置的SQL语句,将数据库表中的数据提取出来,然后通过ORM框架将数据映射到Java对象上。

总体而言,MyBatis的映射原理通过配置文件指定了数据库表和Java对象之间的映射关系,利用类型处理器进行数据类型的转换,然后通过SQL语句的执行将数据库表的数据映射到Java对象上。这样,开发者可以更方便地使用面向对象的方式进行数据库操作,而不必直接处理SQL语句和结果集。

在ORM框架中,将数据映射到Java对象的核心步骤涉的底层执行:

  1. ResultSet的处理: ORM框架通过JDBC从数据库中获取的查询结果是一个ResultSet对象。底层ORM框架需要对ResultSet进行处理,逐行读取数据并转换为Java对象的属性。

  2. 反射机制: 反射是Java语言的一个重要特性,它允许在运行时动态获取类的信息并操作类的成员。ORM框架使用反射机制来实现数据库表和Java对象之间的映射。通过反射,框架可以获取Java类的字段信息,然后通过字段名与数据库列的对应关系,将查询结果中的数据设置到Java对象的相应属性上。/

    // 通过反射设置属性值的示例
    Field field = User.class.getDeclaredField("username");
    field.setAccessible(true);
    field.set(userInstance, "JohnDoe");
    
  3. 类型处理器(Type Handler): ORM框架使用类型处理器来处理数据库和Java之间的数据类型转换。类型处理器负责将数据库中的数据类型转换为Java对象中对应的数据类型,以确保数据的正确映射。

    // 类型处理器示例
    public class StringTypeHandler implements TypeHandler<String> {
        @Override
        public void setParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException {
            // 设置PreparedStatement的参数
            ps.setString(i, parameter);
        }
    
        @Override
        public String getResult(ResultSet rs, String columnName) throws SQLException {
            // 从ResultSet中获取结果
            return rs.getString(columnName);
        }
    
        // 其他方法...
    }
    

    4.实例化Java对象: 在将数据设置到Java对象的属性之前,需要先实例化Java对象。ORM框架通过调用Java类的构造函数或者其他实例化的方式来创建Java对象。

    // 实例化Java对象的示例
    User user = User.class.newInstance();
    

    总体而言,底层ORM框架通过ResultSet处理、反射机制、类型处理器、实例化Java对象等步骤,将数据库查询结果映射到Java对象上。这样,开发者在使用ORM框架时无需手动编写繁琐的数据转换和赋值逻辑,通过简洁的配置和使用,实现了数据库和Java对象之间的无缝映射。

文章来源:https://blog.csdn.net/m0_73447860/article/details/135070303
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。