您的位置:首页 > 其它

Mybatis多对多映射关系详解

2018-03-23 12:00 316 查看
首先数据库的创建    如图



user表属性



orders表属性



进行主外键关联如图



创建ordersdemo



进行主外键关联 如图



创建item



这样数据库就设计好了 测试一下



 需求: 查询用户及购买商品的信息 由于用户没有和商品没有直接的关系,关系是建立在orders和orderdemo中

 创建bean类 User.java

package com.hp.bean;

import java.util.List;

public class User {
//用户表
private Integer id;
private String name;
private int ses;
//商品订单
private List<Orders> orders;

public List<Orders> getOrders() {
return orders;
}
public void setOrders(List<Orders> orders) {
this.orders = orders;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

public int getSes() {
return ses;
}
public void setSes(int ses) {
this.ses = ses;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", ses=" + ses + "]";
}

}
Orders.java

package com.hp.bean;

import java.util.List;

public class Orders {
//商品订单表
private Integer o_id;
private String o_name;
private Integer u_id;
//用户表
private User user;
//订单明细表
private List<OrdersDemo> ordersDemos;

public List<OrdersDemo> getOrdersDemos() {
return ordersDemos;
}
public void setOrdersDemos(List<OrdersDemo> ordersDemos) {
this.ordersDemos = ordersDemos;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public Integer getO_id() {
return o_id;
}
public void setO_id(Integer o_id) {
this.o_id = o_id;
}
public String getO_name() {
return o_name;
}
public void setO_name(String o_name) {
this.o_name = o_name;
}
public Integer getU_id() {
return u_id;
}
public void setU_id(Integer u_id) {
this.u_id = u_id;
}
@Override
public String toString() {
return "Orders [o_id=" + o_id + ", o_name=" + o_name + ", u_id=" + u_id
+ ", user=" + user + ", ordersDemos=" + ordersDemos + "]";
}

}
OrdersDemo.java

package com.hp.bean;

public class OrdersDemo {

private Integer d_id;
private Integer d_num;
private double d_price;
private Integer orders_id;
//商品信息
private Items items;

public Items getItems() {
return items;
}
public void setItems(Items items) {
this.items = items;
}
public Integer getD_id() {
return d_id;
}
public void setD_id(Integer d_id) {
this.d_id = d_id;
}
public Integer ge
b608
tD_num() {
return d_num;
}
public void setD_num(Integer d_num) {
this.d_num = d_num;
}
public double getD_price() {
return d_price;
}
public void setD_price(double d_price) {
this.d_price = d_price;
}
public Integer getOrders_id() {
return orders_id;
}
public void setOrders_id(Integer orders_id) {
this.orders_id = orders_id;
}
@Override
public String toString() {
return "OrdersDemo [d_id=" + d_id + ", d_num=" + d_num + ", d_price="
+ d_price + ", orders_id=" + orders_id + "]";
}

}
Items.java

package com.hp.bean;

public class Items {
//商品信息表
private Integer i_id;
private String i_text;
private double i_price;
private String i_desc;
public Integer getI_id() {
return i_id;
}
public void setI_id(Integer i_id) {
this.i_id = i_id;
}
public String getI_text() {
return i_text;
}
public void setI_text(String i_text) {
this.i_text = i_text;
}
public double getI_price() {
return i_price;
}
public void setI_price(double i_price) {
this.i_price = i_price;
}
public String getI_desc() {
return i_desc;
}
public void setI_desc(String i_desc) {
this.i_desc = i_desc;
}

}

mapper.xml配置
<!-- 查询用户和商品信息的resultmap -->
<resultMap type="com.hp.bean.User" id="UserItemFinadAllResultMap">
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="ses" property="ses"/>

<!-- 一个用户对应有多个订单信息 -->
<collection property="orders" ofType="com.hp.bean.Orders">
<id column="o_id" property="o_id"/>
<result column="o_name" property="o_name"/>
<result column="u_id" property="u_id"/>

<!-- 一个商品订单有多个商品信息 -->
<collection property="ordersDemos" ofType="com.hp.bean.OrdersDemo">
<id column="d_id" property="d_id"/>
<result column="d_num" property="d_num"/>
<result column="d_price" property="d_price"/>
<result column="orders_id" property="orders_id"/>

<!-- 一个订单详细 有一个商品信息 -->
<association property="items" javaType="com.hp.bean.Items">
<id column="i_id" property="i_id"/>
<result column="i_text" property="i_text" />
<result column="i_price" property="i_price" />
<result column="i_desc" property="i_desc" />
</association>

</collection>

</collection>

</resultMap>

<!--查询用户 和商品信息 多对多查询 由于用户 和商品信息没有直接关系所以 -->
<select id="UserItemFinadAll" resultMap="UserItemFinadAllResultMap">

select id,name,ses,o_id,o_name,u_id,d_id,d_num,d_price,orders_id,i_text,i_desc,i_price,i_id
from orders,USER,ordersdemo,item
WHERE orders.u_id=user.id AND ordersdemo.orders_id=orders.o_id
AND ordersdemo.item_id=item.i_id

</select>

mapper.java

//查询用户和商品信息
public List<User> UserItemFinadAll();

测试结果



总结:
使用ResultMap是针对于对查询结果映射有特殊的要求;比如list里面包括list集合.使用association和collection来完成多对多的查询 使用场景 对结果有特殊的要求.

使用ReslutType将结果按照sql列名pojo属性名一致映射到pojo中  使用场景 清单明细
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: