Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как правильно использовать Mybatis вместе с Mysql и JSON / 7 сообщений из 7, страница 1 из 1
26.01.2016, 12:23
    #39155403
Zhazhah
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно использовать Mybatis вместе с Mysql и JSON
Здравствуйте, третий день читаю уже голова пухнет, так как опыта мало.
Есть поле в mysql в json формате вывожу его с помощью mybatis как строку. Как его вывести десериализованым в виде HashMap например ?
Первое что пришло в голову это прям в геттере обработать, но наверняка должна быть возможность указать аннотацией, что вот конкретное поле должно парситься в из JSON в объект.

Код: java
1.
2.
3.
4.
5.
6.
7.
import org.apache.ibatis.annotations.Select;
import ru.mark.yourmood.domain.UserDomain;

public interface UserMapper {
    @Select("SELECT id, avatar FROM users WHERE id = #{id}")
    public UserDomain getUserById(int id);
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
import java.io.Serializable;
import com.fasterxml.jackson.databind.ObjectMapper;

public class UserDomain implements Serializable {
    private int id;
    private String avatar;
 
    public Map getAvatar() throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        Map readValue = mapper.readValue(avatar, Map.class);
        return readValue;
    }
 
    public void setAvatar(String avatar) {
        this.avatar = avatar;
    }
}



Особенно если понадобится List<UserDomain> этот способ окажется не лучшим.
...
Рейтинг: 0 / 0
26.01.2016, 13:34
    #39155495
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно использовать Mybatis вместе с Mysql и JSON
...
Рейтинг: 0 / 0
26.01.2016, 14:24
    #39155586
Zhazhah
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно использовать Mybatis вместе с Mysql и JSON
Вот хорошее руководство http://www.baeldung.com/jackson-annotations по аннотациям в Jackson
Если я правильно понял, есть два варианта:

1. Пропускать через Jackson всю модель, которая должна быть расписанно что игнорить, а что десериализовать и как именно. Все это через аннотации.
2. Если через Spring, то можно забинить ObjectMapper как Singleton и вызывать с @Autowired прям в модели.

Второй вариант мне кажется более быстрым (если со спрингом).
...
Рейтинг: 0 / 0
27.01.2016, 07:21
    #39156190
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно использовать Mybatis вместе с Mysql и JSON
ZhazhahВот хорошее руководство http://www.baeldung.com/jackson-annotations по аннотациям в Jackson
Если я правильно понял, есть два варианта:

1. Пропускать через Jackson всю модель, которая должна быть расписанно что игнорить, а что десериализовать и как именно. Все это через аннотации.
2. Если через Spring, то можно забинить ObjectMapper как Singleton и вызывать с @Autowired прям в модели.

Второй вариант мне кажется более быстрым (если со спрингом).

Можно и без аннотаций в Map замапить.
Spring то же работает ч/з Jackson ObjectMapper.
...
Рейтинг: 0 / 0
27.01.2016, 10:23
    #39156260
Zhazhah
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно использовать Mybatis вместе с Mysql и JSON
mad_nazgul,

2.Не работает, мубатис забирает модель и юзает ее, спринговская аннотация не работает.
3. ResultHandler но он туо отдает весь результат.

Уже начал скучать по JDBC.

Гореть разработчикам мубатис в аду за такую документацию!
...
Рейтинг: 0 / 0
27.01.2016, 11:51
    #39156356
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно использовать Mybatis вместе с Mysql и JSON
Zhazhahmad_nazgul,

2.Не работает, мубатис забирает модель и юзает ее, спринговская аннотация не работает.
3. ResultHandler но он туо отдает весь результат.

Уже начал скучать по JDBC.

Гореть разработчикам мубатис в аду за такую документацию!

Берете модель. ваш JSON находится в строке.
Строку с помощью ObjectMapper преобразуете либо в POJO, либо в Map.

Ну пример хоть посмотрите, что я скидывал :-)
...
Рейтинг: 0 / 0
27.01.2016, 12:15
    #39156391
Zhazhah
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно использовать Mybatis вместе с Mysql и JSON
mad_nazgul, я смотрел, там обычное how to jackson) Меня интересовала возможность десериализации без создания лишних ObjectMapper при каждой итерации, например когда List<Model>.
Поэтому я искал и нашел такую возможность (но это уже не актуально для меня, можно поюзать если нельзя использовать static объекты)

Код: java
1.
2.
3.
4.
5.
@Results({
     @Result(property = "avatar", column = "avatar", javaType = String.class, typeHandler = ExampleTypeHandler.class) 
})
@Select("SELECT id, avatar FROM users WHERE id IN(1,3)")
public List<UserDomain> getUsers();



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
@MappedJdbcTypes(JdbcType.VARCHAR)
public class ExampleTypeHandler extends BaseTypeHandler<HashMap> {
    // Не статические объекты
    private final ObjectMapper mapper = new ObjectMapper();

    @Override
    public HashMap getNullableResult(ResultSet rs, String columnName) throws SQLException {

        HashMap value = null;

        try {
            value = mapper.readValue(rs.getString(columnName), HashMap.class);
        } catch (IOException ex) {

        }
        return value;
    }
}


В модели уже можно указывать непосредственно HashMap
Код: java
1.
2.
3.
4.
5.
6.
7.
public HashMap getAvatar() {
    return avatar;
}

public void setAvatar(HashMap avatar) {
    this.avatar = avatar;
}




А, в итоге, достаточно было сделать так и юзать JSON прямо в модели)

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public class Jackson {
    
    private static final ObjectMapper mapper = new ObjectMapper();

    static {
        mapper.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false);
    }

    public static ObjectMapper mapper() {
        return mapper;
    }

}
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как правильно использовать Mybatis вместе с Mysql и JSON / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]