[JAVA] ResultType se comporte étrangement dans MapperXML de MyBatis

Mes Batis l'ont encore fait

Suite de la dernière fois, j'ai entendu dire que j'étais à nouveau accro à l'étrange mouvement de My Batis. Cela dit, au fond, je suis un peu bâclé et celui qui a commis une erreur est une mauvaise affaire. Je ne pense pas que MyBatis est mauvais (non, je pense que c'est mauvais) Étonnamment, je ne trouve aucune erreur moi-même et je passe du temps perdu. Je pense que c'est rare, alors je vais le laisser pour que si quelqu'un a un jour un problème similaire, je puisse le résoudre immédiatement.

La version de MyBatis est 3.2.

Qu'est-il arrivé

Pour une raison quelconque, les données détenues par ʻInteger de Java ne sont pas entrées dans la colonne NUMERIC` de la base de données. (Je n'ai pas eu l'erreur qui a été réellement crachée, donc je la collerai plus tard!) Certainement

** Si vous voulez mettre des données String dans une colonne NUMERIC, CAST explicitement! ** **

Je pense que c'était un contenu d'erreur comme ça.

e? Pourquoi String? J'ai ʻInteger` ...? C'est le contenu.

ItemService.java


//Diverses omissions
...
...
...
List<Integer> itemMasterIds = itemMasterMapper.getIdsByCategoryName("Tapioca");
//↓ ↓ J'obtiens une erreur ici ↓ ↓
userItemsMapper.add(user.getId(), itemMasterIds);

ItemMasterMapper.java


List<Integer> getIdsByCategoryName(@Param("categoryName") String categoryName);

ItemMasterMapper.xml


<select id="getIdsByCategoryName" resultType="string">
    SELECT item_master_id FROM item_master WHERE category = #{categoryName}
</select>

UserItemsMapper.java


void add(@Param("userId") long userId, @Param("itemMasterIds") List<Integer> itemMasterIds); 

UserItemsMapper.xml


<insert id="add">
    INSERT INTO user_items (user_id, item_master_id)
    VALUES
    <foreach collection="itemMasterIds" item="item" separator=",">
    (#{userId}, #{item})
    </foreach>
</insert>

Cause

Peut-être que la plupart des gens le découvriront instantanément simplement en regardant le code ci-dessus. ʻDans ItemMasterMapper.xml, définissez resultTypedegetIdsByItemCategory`, Vous avez écrit «string».

<select id="getIdsByItemCategory" resultType="string">

Normalement, le type de retour défini dans l'interface Mapper et Si le resultType défini dans Mapper XML ne correspond pas, Je pense qu'une erreur se produira à ce stade, mais pour une raison quelconque, ʻitem_master.item_master_id ʻis Vous pouvez l'obtenir avec List of String, n'est-ce pas?

Je ne peux pas trouver une erreur comme celle-ci tout de suite, ou c'est déjà la limite.

Recommended Posts

ResultType se comporte étrangement dans MapperXML de MyBatis
Comment utiliser le type d'énumération Java (Enum) dans Mapper XML de MyBatis
Comment stocker des objets dans PostgreSQL au format JSON avec MyBatis (Mapper XML)
Formater XML en Java
Comment passer un objet à Mapper dans MyBatis sans passer par un argument