ibatis resultMap属性vs java pojo变量

时间:2015-05-06 15:59:53

标签: java-ee ibatis

我需要对以下内容进行一些澄清,因为我刚刚接手了一个旧的j2Ee项目并正在研究代码,而且我没有ibatis的经验。对于noob问题我很抱歉,但我搜索了2天没有答案。

实施例: 我有一个pojo课:

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

数据库表:

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中),前面有一个下划线(我有下划线后面的实例,例如.title)但是在resultmap中,下划线不存在。我是如何完成映射的,因为2完全不匹配。

感谢您的指导。

1 个答案:

答案 0 :(得分: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使用大写字母&amp;单词之间的下划线 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.

FYIP参考How Auto-Mapping Works