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 & userName
列 will be auto-mapped
和 hashed_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.
由于我刚刚接手一个旧的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 & userName
列 will be auto-mapped
和 hashed_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.