我需要对以下内容进行一些澄清,因为我刚刚接手了一个旧的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完全不匹配。
感谢您的指导。
答案 0 :(得分:2)
在简单的情况下,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 & 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.
FYIP参考How Auto-Mapping Works