如何将mybatis和INSERT中的List <string>注入数据库中的单独行?

时间:2017-08-14 12:44:30

标签: list insert mybatis

我想知道如何在myBatis配置中传递List并根据细节插入数据库中。

用户发布包含以下详细信息的表单,其中可以添加地址次数,因此地址是列表。 发布数据库时,我希望数据库在单独的行中插入用户的deatils(可以在INSERT语句中使用循环{但不知道如何})。

details.java private int id 私有字符串名称 私有字符串地址 私人列表儿童

尝试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> 

错误 - &GT;无法为儿童设定价值

尝试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>

错误 - &gt;参数mixmatch,无法设置属性

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

1 个答案:

答案 0 :(得分:1)

我们可以使用以下语法来执行此操作:

<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>

您有一个详细信息列表,因此parameterType应为java.util.List

进一步阅读:Mybatis batch insert