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
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中 使用场景 清单明细
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中 使用场景 清单明细
相关文章推荐
- 【MyBatis】的高级关系映射和查询缓存详解
- mybatis中的resultMap的映射关系详解
- mybatis关系映射之一对多和多对一详解
- Java的MyBatis框架中关键的XML字段映射的配置参数详解
- 基于Castle ActiveRecord开发Domain Model详解(一)对象关系到数据表的映射
- Mybatis框架中的注解应用之关系映射
- MyBatis中多对多关系的映射和查询
- Mybatis的注解应用之关系映射
- Mybatis学习笔记:(二) java中的实体(对象、List、Set)关系怎样与数据库关联映射
- Hibernate对象关系映射详解之“一对多”关系映射
- Hibernate 关系映射配置inverse与cascade详解
- Mybatis映射关系-多对一映射
- mybatis关系映射之一对多和多对一
- mybatis对象之间映射关系以及数据库表建立的时候外键的添加
- mybatis学习笔记(十二) 映射配置文件详解
- Hibernate框架详解(三)框架中的关系映射
- MyBatis JdbcType 与Oracle、MySql数据类型对应关系详解
- 关于hibernate中持久化类之间的映射关系的详解(一)
- MyBatis映射配置文件详解
- mybatis关系映射之一对多和多对一