这是我的包结构

mybatis的多对多的resultmap元素测试_mysql

这是我的实体类

public class Order implements Serializable {
private Integer id;
private String number;
private int user_id;
private List<product> productList;
private List<Ordersitem> ordersitem;

public Integer getId() {
return id;
}

@Override
public String toString() {
return "Order{" +
"id=" + id +
", number='" + number + '\'' +
", user_id=" + user_id +
", productList=" + productList +
", ordersitem=" + ordersitem +
'}';
}

public void setId(Integer id) {
this.id = id;
}

public String getNumber() {
return number;
}

public void setNumber(String number) {
this.number = number;
}

public int getUser_id() {
return user_id;
}

public void setUser_id(int user_id) {
this.user_id = user_id;
}

public List<product> getProductList() {
return productList;
}

public void setProductList(List<product> productList) {
this.productList = productList;
}

public List<Ordersitem> getOrdersitem() {
return ordersitem;
}

public void setOrdersitem(List<Ordersitem> ordersitem) {
this.ordersitem = ordersitem;
}
}
public class Ordersitem implements Serializable {
private Integer id;
private Integer order_id;
private Integer product_id;

public Integer getId() {
return id;
}

@Override
public String toString() {
return "Ordersitem{" +
"id=" + id +
", order_id=" + order_id +
", product_id=" + product_id +
'}';
}

public void setId(Integer id) {
this.id = id;
}

public Integer getOrder_id() {
return order_id;
}

public void setOrder_id(Integer order_id) {
this.order_id = order_id;
}

public Integer getProduct_id() {
return product_id;
}

public void setProduct_id(Integer product_id) {
this.product_id = product_id;
}
}
public class product implements Serializable {
private Integer id;
private String name;



private double price;
private List<Order> orderList;

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

@Override
public String toString() {
return "product{" +
"id=" + id +
", name='" + name + '\'' +
", price=" + price +
", orderList=" + orderList +
'}';
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public double getPrice() {
return price;
}

public void setPrice(double price) {
this.price = price;
}

public List<Order> getOrderList() {
return orderList;
}

public void setOrderList(List<Order> orderList) {
this.orderList = orderList;
}
}

这是我的测试类

public class MybatisTest {
private InputStream in;
private SqlSession sqlSession;
private Orderlist userdao;

@Before//用于在测试方法执行之前执行
public void init()throws Exception{
//1.读取配置文件,生成字节输入流
in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2.获取SqlSessionFactory
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
//3.获取SqlSession对象
sqlSession = factory.openSession(true);
//4.获取dao的代理对象
userdao= sqlSession.getMapper(Orderlist.class);
}

@After//用于在测试方法执行之后执行
public void destroy()throws Exception{
//提交事务
// sqlSession.commit();
//6.释放资源
sqlSession.close();
in.close();
}

/**
* 测试查询所有
*/
@Test
public void find(){
List<Order> orderList=userdao.find(3);
for(Order orderList1:orderList){
System.out.println(orderList1);
}



}








}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--配置环境-->
<environments default="mysql">
<!-- 配置mysql的环境-->
<environment id="mysql">
<!-- 配置事务 -->
<transactionManager type="JDBC"></transactionManager>

<!--配置连接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/ssh?characterEncoding=utf8&allowMultiQueries=true"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>


</dataSource>
</environment>
</environments>
<!-- 配置映射文件的位置 -->
<mappers>

<mapper resource="com/itheima/dao/product.xml"></mapper>
</mappers>

</configuration>
<?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="com.itheima.dao.Orderlist">
<select id="find" resultMap="Orderlist" parameterType="int">
select o.id from tb_product p,tb_orders o,tb_ordersitem c where c.prouct_id=p.id and p.id=#{id} and c.order_id=o.id
</select>
<resultMap id="Orderlist" type="com.itheima.domin.Order" >
<id property="id" column="id"></id>
<result property="number" column="number"></result>
<result property="user_id" column="user_id"></result>
<collection property="productList" ofType="com.itheima.domin.product">
<id property="id" column="id"></id>
<result property="name" column="name"></result>
<result property="price" column="price"></result>
</collection>
<collection property="ordersitem" ofType="com.itheima.domin.Ordersitem">
<id property="id" column="id"></id>
<id property="order_id" column="order_id"></id>
<id property="product_id" column="product_id"></id>
</collection>

</resultMap>


</mapper>

这时我的sql文件(注意创建的先后顺序)

create table tb_product(
id int(32) primary key auto_increment,
name varchar(32),
price double
)
create table tb_ordersitem(
id int(32) primary key auto_increment ,
order_id int(32),
prouct_id int(32),
FOREIGN key(order_id) references tb_orders(id),
FOREIGN key(prouct_id) references tb_product(id)
)
create table tb_user(
id int(32) primary key auto_increment,
username varchar(32),
address varchar(256)
)
create table tb_orders(
id int(32) PRIMARY key auto_increment,
number varchar(32) not null,
user_id int(32) not null,
FOREIGN key(user_id) REFERENCES tb_user(id)

)