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的话,明细表的多条只能查询出来第一条,但这个名字不一样,应该不是这方面问题