Mybatis中collection实现一对多的问题

今天在使用Mybatis中的Collection获取集合信息时,数据库中对应了多条数据,但在做单元测试时只能获取到一条数据。

纠结了很久,突然想到是不是主键的问题,结果一试,还真是这么回事。

Mybatis中id和result的唯一不同是id表示的结果将是当比较对象实例时用到的标识属性。这帮助来改进整体表现,特别是缓存和嵌入结果映射。因此在不同的数据中要对ID进行唯一处理,不然就会出现类似我只能查看一条数据。

	<resultMap type="OrderBaseInfo" id="orderBaseMap">
		<id property="orderId" column="order_id" />
		<result property="orderGroupNo" column="order_group_id" />
	</resultMap>
	<resultMap type="OrderBaseGroup" id="orderBaseGroupMap">
		<id property="orderGroupNo" column="order_group_id" />
		<result property="patientId" column="pat_id" />
		<collection property="orderItems" resultMap="orderBaseMap" />
	</resultMap>
	

例如上面mybatis文件中,orderId和orderGroupNo在数据库中对应的字段要唯一约束,只有这样你才能实现一对多的效果。

时间: 2024-08-29 17:54:21

Mybatis中collection实现一对多的问题的相关文章

Mybatis中collection和association的使用区别

1. 关联-association2. 集合-collection 比如同时有User.java和Card.java两个类 User.java如下: public class User{ private Card card_one; private List<Card> card_many; } 在映射card_one属性时用association标签, 映射card_many时用collection标签. 所以association是用于一对一和多对一,而collection是用于一对多的关

MyBatis 中一对一和一对多的映射关系

1 一对一映射 比如每位学生有一个地址. public class Address { private Integer addrId; private String street; private String city; private String state; private String zip; private String country; // setters & getters } public class Student { private Integer studId; pr

mybatis 中collection中需要 open close separator

<result property="openFactories" column="open_factories" /> The content of element type "resultMap" must match "(constructor?,id*,result*,association*,collect 2018年03月22日 10:12:55 chenxing1990 阅读数:1296 标签: mybatisr

myBatis中 collection 或 association 联合查询 中column 传入多个参数值

下面是一个树形结构表自连接 联合查询 Demo <resultMap id="BaseResultMap"  type="com.maidan.daas.entity.AccoSysmanResource" >    <id column="pid" property="pid" jdbcType="INTEGER" />    <result column="cre

mybatis中Invalid bound statement (not found) 和 Result Maps collection already contains value for...错误解决方案

一.Invalid bound statement (not found) 使用mybatis有时候会报Invalid bound statement (not found)这种错误,总结了下,可能有两种情况如下: 1.mybatis的对应的mapper.xml找不到对应的命名sql或者名称与mapper接口名称不一致. 2.xml文件与接口名称都对,但是在mybatis配置文件中漏掉了配置,也会报这种错误. 二.Result Maps collection already contains v

谈一下思考,关于mybatis中&lt;foreach collection=&quot;list&quot;&gt;中list得来的原因 没看到官方说明

<foreach> 是在sql语句中进行多个id查询 时用到的,因为mybatis代替jdbc和hibernate, 使用 在xml文件中编写sql语句,这是一个标签文件.然后在 dao层?,用sqlSession.来调用这个写好的sql语句. 有时候我想会不会jdbc更简单一些?? 然后,在xml中写sql语句,会碰到根据条件或者模糊查询,这个时候需要接收来自dao层的 查询条件参数.此时需要在xml文件中的sql语句中接收,并且应该没有接收,只是确定有几个占位符,等到预编译之后,再在dao

mybatis中的resultMap

MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在. 1.resultType 在MyBatis进行查询映射的时候,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值.当提供的返回类型属性是resultType的时候,MyBatis会将Map里

Mybatis中的resultType和resultMap

一.概述 MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在. 在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值. ①当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给r

mybatis学习笔记(11)-一对多查询

mybatis学习笔记(11)-一对多查询 mybatis学习笔记11-一对多查询 示例 小结 本文实现一对多查询,查询订单及订单明细的信息 示例 sql 确定主查询表:订单表 确定关联查询表:订单明细表 在一对一查询基础上添加订单明细表关联即可. SELECT orders.*, user.username, user.sex, user.address, orderdetail.id orderdetail_id, orderdetail.items_id, orderdetail.item