2015-05-06 5 views
2

Мне нужно разъяснить следующее, поскольку я просто взял на себя старый проект j2Ee и изучаю коды, плюс у меня не было опыта в ibatis. Извините за вопрос noob, но я искал 2 дня без ответов.ibatis resultMap свойства vs java pojo variables

Пример: У меня есть класс Pojo:

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

DB Table:

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

Mapping:

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

Вопрос:

Я заметил, что в объявление переменных id и title (в java), перед ним был знак подчеркивания (у меня есть экземпляры, в которых подчеркивание было зажато, например, tit), но в результирующей карте подчеркивания не существует. Я curiuos, как это Картография делается, так как 2 не соответствует точно.

Благодарим вас за руководство.

+0

У вас есть 'автоматического отображения = true' в вашем Ibatis отображение файла – 09Q71AO534

+0

Да ... Авто отображение = верно. Я понял, что ibatis на самом деле вызывает методы setter при сопоставлении свойств с переменными. – DanialChan

ответ

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. 

FYIP см How Auto-Mapping Works

+0

Большое спасибо. – DanialChan

+0

@ DanialChan Добро пожаловать :) – 09Q71AO534

Смежные вопросы