2017-08-14 1 views
0

Je veux savoir comment passer Liste dans la configuration de myBatis et d'être inséré dans la base de données selon les détails.Comment injecter la liste <String> dans mybatis et INSERT dans des lignes séparées dans la base de données?

Un utilisateur poste un formulaire avec les détails suivants où l'adresse peut être ajoutée nombre de fois donc l'adresse est une liste. Lors de la publication de la base de données, je souhaite que la base de données insère les réponses des utilisateurs dans des lignes séparées (il est possible d'utiliser la boucle dans l'instruction INSERT {mais je ne sais pas comment}}.

details.java id private int privé Nom de la chaîne privée String adresse enfants de liste privée

Tentative 1

detailsMapper.xml 
<resultMap id="details" type="Details"> 
<result property="id" column="ID"/> 
<result property="name" column="NAME"/> 
<result property="address" column="ADDRESS"/> 
<result property="children" column="CHILDREN" javaType="java.lang.List"/> 
</resultMap> 

erreur-> ne peut pas valeur définie pour les enfants

Tentative 2

<resultMap id="detailMapper" type="String"> 
<result property="children" column="CHILDREN" javaType="java.lang.List"/> 
</resultMap> 

<resultMap id="details" type="Details"> 
<result property="id" column="ID"/> 
<result property="name" column="NAME"/> 
<result property="address" column="ADDRESS"/> 
<collection property="children" resultMap="detailMapper"/> 
</resultMap> 

Erreur -> Argument mixmatch, ne peut pas définir la propriété

<insert id="submitDetails" parameterType="Details"> 
INSERT INTO USER_DETAILS (NAME, ADDRESS, CHILDREN) 
VALUES(
#{name, jdbcType=VARCHAR}, 
#{address, jdbcType=VARCHAR}, 
#{children, jdbcType=VARCHAR} 
) 
</insert> 

Répondre

0

Nous pouvons utiliser la syntaxe suivante pour le faire:

<insert id="submitDetails" parameterType="java.util.List"> 
INSERT INTO USER_DETAILS (NAME, ADDRESS, CHILDREN) 
VALUES 
    <foreach item="item" collection="list" separator=","> 
    (#{item.name}, #{item.address}, #{item.children}) 
    </foreach> 
</insert> 

Vous avez une liste des détails si parameterType devrait être java.util.List.

Autres lectures: Mybatis batch insert

+0

Salut merci. Savez-vous comment injecter la liste ou String [] dans mybatis? –

+0

@JohnSmith, vous pouvez utiliser la même syntaxe pour tous les types de 'List'. – Hariraj

+0

@JohnSmith Je peux voir cela, vous avez mentionné 'java.lang.List' dans la configuration du mappeur. Toutes les classes de collection, y compris la classe List, se trouvent sous le paquet 'java.util'. – Hariraj