ibatis resultMap 属性 vs java pojo 变量

ibatis resultMap properties vs java pojo variables

由于我刚刚接手一个旧的j2Ee项目并正在研究代码,所以我需要澄清以下内容,而且我没有使用ibatis的经验。很抱歉这个菜鸟问题,但我搜索了 2 天没有答案。

示例: 我有一个 pojo class :

public class Document
{
          private int _id;
          private string _title;
          ..........
}

DB Table :

CREATE TABLE [Documents] (
       [Document_ID] [int] NOT NULL ,
       [Document_Title] [varchar] (32) NULL ,
)

映射:

<resultMap id="document" class="Document">
     <result property="id" column="Document_ID"/>
     <result property="title" column="Document_Title"/>
</resultMap>

问题:

我注意到在id和title变量的声明中(在java中),前面有一个下划线(我有下划线在后面的例子,eg.title)但是在结果图,下划线不存在。我很好奇映射是如何完成的,因为 2 不完全匹配。

感谢您的指导。

MyBatis is a fork from iBATIS.

在简单的情况下,MyBatis 可以为您 auto-map 结果,而在其他情况下,您将需要构建结果图。但您也可以混合使用这两种策略。让我们更深入地了解 auto-mapping 的工作原理。

auto-mapping 结果时,MyBatis 将获取 column name 并寻找具有相同名称的 属性 忽略大小写 。这意味着如果找到名为 ID 和 属性 的名为 id 的列,则 MyBatis will set the id property with the ID column value.

通常 database columns 在单词之间使用 大写字母和下划线命名 java properties 通常遵循 驼峰命名约定。 要启用它们之间的自动映射,请将设置 mapUnderscoreToCamelCase 设置为 true

即使有特定的结果图,自动映射也能正常工作。发生这种情况时,对于每个结果映射,将自动映射 ResultSet 中没有手动映射的所有列,然后处理手动映射。

在以下示例中 id & userNamewill be auto-mappedhashed_password column will be mapped

<select id="selectUsers" resultType="User">
  select
    user_id             as "id",
    user_name           as "userName",
    hashed_password
  from some_table
  where id = #{id}
</select>

<resultMap id="userResultMap" type="User">
  <result property="password" column="hashed_password"/>
</resultMap>

共有三个自动映射级别:

NONE - disables auto-mapping. Only manually mapped properties will be set.
PARTIAL - will auto-map results except those that have nested result mappings defined inside (joins).
FULL - auto-maps everything.

转投参考How Auto-Mapping Works