在myBatis 中传递多个列

我想知道,我们如何在myBatis关联标记中传递多个列。

例如,我在一个mapper.xml文件中有以下xml片段:

      

如您所见,带有property订阅的只有一列, course_id

我想传递2列,因此产生的代码,我们如何做到这一点?

我尝试了以下组合,没有效果:

 column="{course_id,user_id}" // null,null are passed as parameters column="course_id,user_id" // null,null are passed as parameters column="{COURSE_ID=course_id,USER_ID=user_id}" // null,null are passed as parameters 

但如果我传递单个,column =“{course_id}”或column =“course_id”

工作没有任何问题。

任何想法的家伙?

您应该对复合键使用以下语法:

 column="{prop1=col1,prop2=col2}". 

其中prop1, prop2是关联查询和col1, col2参数col1, col2是传递给该查询的sql列。

在你的情况下:

CourseMapper.xml

 column="{courseId=id,userId=user_id}" ... select id, user_id, ... from course ... 

CourseSubscriptionMapper.xml

  

我刚刚检查过它对我来说很好。 如果您有任何疑问,请随时提出。

多个列名称可以作为键值对传递

 @Results(value = { @Result(property = "CourseSubscription", column = "{courseId=id,userId=user_id} 

有关详细信息,请参阅

org.apache.ibatis.builder.MapperBuilderAssistant.parseCompositeColumnName(String).columnName – 解析@ Result.column()的元数据的API

 private List parseCompositeColumnName(String columnName) { List composites = new ArrayList(); if (columnName != null && (columnName.indexOf('=') > -1 || columnName.indexOf(',') > -1)) { StringTokenizer parser = new StringTokenizer(columnName, "{}=, ", false); while (parser.hasMoreTokens()) { String property = parser.nextToken(); String column = parser.nextToken(); ResultMapping.Builder complexBuilder = new ResultMapping.Builder(configuration, property, column, configuration.getTypeHandlerRegistry().getUnknownTypeHandler()); composites.add(complexBuilder.build()); } } return composites; }