[英]MyBatis, insert with complex object
我有以下場景:
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.
誰能澄清我如何設置這個?
<association>
的resultMap
屬性需要引用結果映射的名稱,而不是Java類型: <association property="MyChildObject" resultMap="PrimaryKeyMap"/>
但是,如果MyChildObject
作為單獨的表存儲在數據庫中, 則不支持嵌套插入。 您需要在Java中調用兩個插入。 ResultMaps用於選擇 。
如果您只是將一個表中的幾列放在單獨的對象中,那么可以使用點表示法myChildObject.myField_4
來執行此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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.