[JAVA] ResultType verhält sich in MapperXML von MyBatis seltsam

Mein Batis hat es wieder getan

Fortsetzung vom letzten Mal, hörte ich, dass ich wieder süchtig nach der seltsamen Bewegung von My Batis war. Das heißt, im Grunde bin ich ein bisschen schlampig, und derjenige, der einen Fehler gemacht hat, ist ein schlechtes Geschäft. Ich denke nicht, dass MyBatis schlecht ist (nein, ich denke, es ist schlecht) Überraschenderweise kann ich selbst keine Fehler finden und verschwendete Zeit verbringen. Ich denke, es ist selten, also lasse ich es, damit ich es sofort lösen kann, wenn jemand eines Tages ein ähnliches Problem hat.

Die Version von MyBatis ist 3.2.

Was ist passiert

Aus irgendeinem Grund wurden die von Javas "Integer" gespeicherten Daten nicht in die Spalte "NUMERIC" der Datenbank eingegeben. (Ich habe den Fehler, der tatsächlich ausgespuckt wurde, nicht erhalten, also werde ich ihn später einfügen!) Bestimmt

** Wenn Sie "String" -Daten in eine "NUMERIC" -Spalte einfügen möchten, geben Sie explizit CAST! ** ** **

Ich denke, es war so ein Fehlerinhalt.

e? Warum "String"? Ich habe eine Ganzzahl ...? Es ist der Inhalt.

ItemService.java


//Verschiedene Auslassungen
...
...
...
List<Integer> itemMasterIds = itemMasterMapper.getIdsByCategoryName("Tapioka");
//↓ ↓ Ich erhalte hier einen Fehler ↓ ↓
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>

Ursache

Vielleicht werden die meisten Leute es sofort herausfinden, indem sie sich den obigen Code ansehen. Setzen Sie in ItemMasterMapper.xml`` resultType von getIdsByItemCategory, Du hast "string" geschrieben.

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

Normalerweise ist der Rückgabetyp in der Mapper-Schnittstelle und definiert Wenn der in Mapper XML definierte resultType nicht übereinstimmt, Ich denke, dass an diesem Punkt ein Fehler auftreten wird, aber aus irgendeinem Grund ist "item_master.item_master_id" Sie können es mit List of String bekommen, nicht wahr?

Ich kann einen solchen Fehler nicht sofort finden, oder er ist bereits die Grenze.

Recommended Posts

ResultType verhält sich in MapperXML von MyBatis seltsam
Verwendung des Java-Aufzählungstyps (Enum) in Mapper XML von MyBatis
Speichern von Objekten in PostgreSQL als JSON mit MyBatis (Mapper XML)
Formatieren Sie XML in Java
So übergeben Sie ein Objekt in MyBatis an Mapper, ohne ein Argument durchzugehen