当前位置: 首页 > 面试题库 >

MyBatis,插入带有复杂对象

双浩涆
2023-03-14
问题内容

我有以下情况:

public class MyObj{
    private String myField_1
    private String myField_2
    private MyChildObj myChild
    // Constructor & get/set
}

public class MyChildObj{
    private String myField_3
    private String myField_4
    // Constructor & get/set
}

在我的Query.xml中,我以这种方式编写了插入内容:

<insert id="insertMyObj" parameterType="MyObj">
    INSERT INTO MY_TABLE    (   FIELD_1,
                                FIELD_2,
                                FIELD_3,
                                FIELD_4)
    values  (   #{myField_1},
                #{myField_2},
                #{myField_3},
                #{myField_4},
    )
</insert>

阅读mybatis结果地图指南后,我尝试在mybatis-config.xml文件中添加以下行:

<typeAliases>
    <typeAlias alias="MyObj"        type="myPackage.MyObj"/>
    <typeAlias alias="MyChildObj"   type="myPackage.MyChildObj"/>
</typeAliases>

<resultMap id="insertObj" type="MyObj">
    <result property="myField_1"  column="FIELD_1"/>
    <result property="myField_2"  column="FIELD_2"/>
    <association property="PrimaryKeyMap" resultMap="PrimaryKey"/>
</resultMap>

<resultMap id="PrimaryKeyMap" type="PrimaryKey">
    <result property=myField_3  column="FIELD_3"/>
    <result property="myField_4"  column="FIELD_4"/>
</resultMap>

但我一直收到以下错误:

### Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance.  Cause: org.xml.sax.SAXParseException; lineNumber: xx; columnNumber: xx; Element type "resultMap" must be declared.

谁能告诉我该如何设置?


问题答案:

中的resultMap属性<association>需要引用结果映射的名称,而不是Java类型:<association property="MyChildObject" resultMap="PrimaryKeyMap"/>

但是,如果MyChildObject作为单独的表存储在数据库中,则不支持嵌套插入。您将需要在Java中调用两个插入。ResultMaps供 选择

如果您只是将一个表中的几列放在一个单独的对象中,则可以使用点符号来实现myChildObject.myField_4。像这样:

<insert id="insertMyObj" parameterType="MyObj">
  INSERT INTO MY_TABLE    (   FIELD_1,
                              FIELD_2,
                              FIELD_3,
                              FIELD_4)
  values  (   #{myField_1},
              #{myField_2},
              #{myChildObject.myField_3},
              #{myChildObject.myField_4},
  )
</insert>


 类似资料:
  • 我对这两种算法的时间复杂度感到困惑。 usingTreeMap算法的时间复杂度正确吗?我知道在treemap中插入时间是log(n ),但是如果我们遍历一个包含10个元素的数组,它会变成nlog(n)吗?

  • 我得到和错误当我执行 错误是: 未处理的异常:com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期BEGIN_OBJECT但BEGIN_ARRAY在第1行第52列路径$. f 这是 json 响应 我有这个班级 和这个其他

  • 问题内容: 我在Spring(3.1)中使用以下@Cacheable: Spring: Maven: 要缓存的方法: las,当我调试代码时,我看到即使param1和param2相同(即未使用cahce),也多次调用了该缓存方法。 有任何想法吗? 问题答案: 密钥显示不正确- 您可能是说- 此外,如果在没有调试信息的情况下完成编译,则param1,param2参数名称将对表达式求值器不可用。相反,

  • 问题内容: 这个问题已经在这里有了答案 : 使用PDO插入多行 (1个答案) 4年前关闭。 我有数据库表:和 当前,唯一要插入类别表的函数与此类似: 我有一种形式来输入标题和插入URL图像的可能性。 通过单击提交标题,我要转到类别表,到目前为止,图像应该转到表图像,每个图像都有一个ID,但内部连接到该类别的ID。 桌子: 我无法正确执行此操作 我想要的结果示例: html表格 提交后 表类别: 表

  • 我主要是想理解在堆中插入一个新元素的大O和Omega背后的原因。我知道我可以在网上找到答案,但我真的喜欢有一个彻底的理解,而不是仅仅在网上找到答案,只是一味地记忆。 例如,如果我们有以下堆(以数组格式表示) 如果我们决定插入一个新元素“4”,那么我们的数组现在将如下所示 它将被放置在索引9中,由于这是第0个基于索引的数组,它的父数组将是索引4,也就是元素5。在这种情况下,我们不需要做任何事情,因为

  • 本文向大家介绍老生常谈 MyBatis 复杂查询,包括了老生常谈 MyBatis 复杂查询的使用技巧和注意事项,需要的朋友参考一下 一对一查询 在实际开发中,经常会遇到一对一查询,一对多查询等。这里我们先来看一对一查询。例如:每本书都有一个作者,作者都有自己的属性,根据这个,我来定义两个实体类: 然后,在数据库中,添加两张表: 添加成功后,我们新建一个 BookMapper,BookMapper