Mybatis中一对多查询只有一条数据问题

探讨MyBatis中mapper.xml配置下一对多查询仅返回单条数据的问题,涉及XML映射、实体类设计及查询逻辑,分析可能的原因并提供解决思路。

Mybatis的mapper.xml中一对多查询结果的问题

问题描述:只能查询出一条数据

xml文件的配置

//<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
<mapper namespace="pm.mapper.PersonMapper">
	<resultMap type="pm.entity.Person" id="selectPAC">
		<id column="Pid" property="Pid"/>
       <result column="Pname" property="Pname"/>
       <result column="Page" property="Page"/>
       <result column="Sex" property="Sex"/>
       <collection property="list" ofType="pm.entity.Car">
           <id column="Cid" property="Cid"/>
           <result column="color" property="color"/>
           <result column="brand" property="brand"/>
           <result column="price" property="price"/>
       </collection>
	</resultMap>
	<select id="selectPerAndCar"  resultMap="selectPAC">
		select * from Person,Car where person.Pid=Car.Cid 
	</select>
</mapper>

**
它们的关系是这样的:person里面包含着一个Car集合;
Class Person

package pm.entity;
import java.util.List;

public class Person {	
	private int Pid;
	private String Pname;
	private int Page;
	private String Sex;
	private List<Car>list;

	public int getPid() {
		return Pid;
	}
	public void setPid(int pid) {
		Pid = pid;
	}
	public String getPname() {
		return Pname;
	}
	public void setPname(String pname) {
		Pname = pname;
	}
	public int getPage() {
		return Page;
	}
	public void setPage(int page) {
		Page = page;
	}
	public String getSex() {
		return Sex;
	}
	public void setSex(String sex) {
		Sex = sex;
	}
	public List<Car> getList() {
		return list;
	}
	public void setList(List<Car> list) {
		this.list = list;
	}
	@Override
	public String toString() {
		return "Person [Pid=" + Pid + ", Pname=" + Pname + ", Page=" + Page + ", Sex=" +Sex + "]";
	}
}

Class Car

package pm.entity;

public class Car {
	private int Cid;
	private String color;
	private int price;
	private String brand;
	//private Person per;
	public Car() {
		super();
	}
	
	public int getCid() {
		return Cid;
	}
	public void setCid(int cid) {
		Cid = cid;
	}
	public String getColor() {
		return color;
	}
	public void setColor(String color) {
		this.color = color;
	}
	public int getPrice() {
		return price;
	}
	public void setPrice(int price) {
		this.price = price;
	}
	public String getBrand() {
		return brand;
	}
	public void setBrand(String brand) {
		this.brand = brand;
	}
//	public Person getPer() {
//		return per;
//	}
//	public void setPer(Person per) {
//		this.per = per;
//	}

	public String toString() {
		return "Car [Cid=" + Cid + ", color=" + color + ", price=" + price + ", brand=" + brand  + "]";
	}
}
# 测试代码块

**`
```javascript
var foo = 'bar';
	public static void main(String[] args) throws IOException {
		String resource="SqlMapConfig.xml";
		InputStream iS=Resources.getResourceAsStream(resource);
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(iS);
		SqlSession sqlSession = factory.openSession();
		PersonMapper mapper = sqlSession.getMapper(pm.mapper.PersonMapper.class);
		List<Person> p=mapper.selectPerAndCar();
        System.out.println(p.get(1));
        List<Car> list = p.get(1).getList();
			for (Car car : list) {
				System.out.println(car);
			}	
		sqlSession.commit();
		sqlSession.close();
	}

输出结果
Person [Pid=2, Pname=tim, Page=25, Sex=男]
Car [Cid=2, color=cyan, price=999999, brand=Lincoln]

Car里面应该有多条数据,只输出了第一条。

原因分析

如果两表联查,主表和明细表的主键都是id的话,明细表的多条只能查询出来第一条,但这个名字不一样,应该不是这方面问题
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值