myabtis中xml 映射文件和 MyBatis 内部数据结构之间的映射关系

有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top

全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。 https://store.amazingmemo.com/chapterDetail/1685324709017001`

MyBatis中XML映射文件和MyBatis内部数据结构的映射关系

在MyBatis中,XML映射文件定义了数据库中表和Java对象之间的映射关系,并描述了如何执行SQL语句和如何完成结果到Java对象的映射。当我们在MyBatis的配置文件中指定了映射文件的位置后,MyBatis会在启动时加载和解析这些映射文件,并将它们转换成MyBatis内部维护的一种数据结构,以便在执行SQL操作时能够使用。

MyBatis内部主要数据结构:

  1. SqlSessionFactory:

    • MyBatis通过读取配置文件(通常是mybatis-config.xml)构建SqlSessionFactory,它是创建SqlSession的工厂。

  2. SqlSession:

    • 一旦有了SqlSessionFactory,就可以通过它来获取SqlSession的实例。SqlSession是一个与数据库交互的主要接口。

  3. MappedStatement:

    • 对于XML映射文件中定义的每一个<select>、<insert>、<update>或<delete>节点,MyBatis会创建一个MappedStatement对象,它代表了一条具体的SQL语句及其相关的详细信息(如是否是动态SQL,输入参数,输出结果等)。

  4. SqlSource:

    • MappedStatement依赖SqlSource对象来获取要执行的SQL,SqlSource是解析SQL语句的来源。

  5. ResultMap:

    • 结果映射描述了如何从数据库结果集中加载对象,每个结果映射包含了一系列的结果元素或关联,它可以非常细致地控制最终的返回结果。

  6. ParameterMap:

    • 参数映射定义了如何将用户提供的参数映射到SQL语句中的占位符。

在MyBatis配置项中,你可能会看到如下例子:

<mapper namespace="com.example.mapper.UserMapper">
  <select id="selectUser" parameterType="int" resultMap="UserResultMap">
    SELECT * FROM users WHERE id = #{id}
  </select>
  
  <resultMap id="UserResultMap" type="com.example.model.User">
    <result column="id" property="id" />
    <result column="name" property="name" />
    <result column="email" property="email" />
  </resultMap>
</mapper>

在这个例子中:

  • namespace: 命名空间用于隔离SQL语句的ID。

  • select: 表明这是一个查询操作。

  • id: SQL语句的唯一标识。

  • parameterType: 入参的类型。

  • resultMap: 结果映射的唯一标识,描述了如何将SQL查询返回的结果集映射到Java对象。

当MyBatis启动时,它会解析XML映射文件中的这些信息,并将它们转换成相应的MappedStatementResultMapParameterMap等内部数据结构,这样当你通过SqlSession执行操作时,MyBatis就能知道如何构造SQL语句、如何传递参数、以及如何将结果集映射到Java对象上。

最后更新于