mybatis 关联查询
案例模型
po
// 用户
public class User {
private int id;
private String username;
private String sex;
private Date birthday;
private String address;
private List<Orders> ordersList;
......
}
// 订单
public class Orders {
private int id;
private String number;
private String note;
private Date createtime;
private int user_id;
private User user;
private List<Orderdetail> orderdetails;
......
}
// 订单详情
public class Orderdetail {
private int id;
private int items_id;
private int items_num;
private int orders_id;
private Items items;
......
}
// 商品实体
public class Items {
private int id;
private String name;
private float price;
private String detail;
private Date createtime;
......
}
查询之一对一
orders ----> user
方式一:自定义po类接收
sql
SELECT
orders.*,
user.username,
user.address
FROM
orders,
user
WHERE orders.user_id = user.id
po
// 自定义订单实体
public class OrdersCustom extends Orders {
private String username;
private String address;
......
}
mapper
<select id="findOrdersList" resultType="cn.ade.mybatis.po.OrdersCustom">
SELECT
user.username,
user.address
orders.*,
FROM
user u, orders o
WHERE u.id= o.user_id
</select>
方式二:resultMap之association
<!-- 订单信息resultmap -->
<resultMap id="userOrderMap" type="cn.ade.mybatis.po.Orders">
<id property="id" column="id"/>
<result property="user_id" column="user_id"/>
<result property="number" column="number"/>
<!-- 进行关联查询单条记录 -->
<association property="user" javaType="cn.itcast.mybatis.po.User">
<id property="id" column="user_id"/>
<result property="username" column="username"/>
<result property="address" column="address"/>
</association>
</resultMap>
<select id="findOrdersList" resultMap="userOrderMap">
SELECT
user.username,
user.address
orders.*,
FROM
user u, orders o
WHERE u.id= o.user_id
</select>
查询之一对多
orders ----> orderdetail
<resultMap id="ordersAndUserByResultMap" type="cn.ade.mybatis.po.Orders">
<!-- 订单信息的映射 -->
<id property="id" column="id"/>
<result property="user_id" column="user_id"/>
<result property="number" column="number"/>
<result property="createtime" column="createtime"/>
<result property="note" column="note"/>
<!-- 用户信息的映射 -->
<association property="user" javaType="cn.ade.domain.User">
<id property="id" column="user_id"/>
<result property="username" column="username"/>
<result property="address" column="address"/>
</association>
</resultMap>
<resultMap id="OrdersAndOrderDetailByResultMap" type="cn.ade.mybatis.po.Orders" extends="ordersAndUserByResultMap">
<!-- 订单和用户的信息采用继承的方式 -->
<!-- 订单详情的映射 -->
<collection property="orderdetails" ofType="cn.ade.domain.Orderdetail">
<id property="id" column="orderdetail_id"/>
<result property="items_id" column="items_id"/>
<result property="items_num" column="items_num"/>
</collection>
</resultMap>
<select id="findOrdersAndOrderDetailByResultMap" resultMap="OrdersAndOrderDetailByResultMap">
SELECT
o.*,
u.username,
u.address,
od.id orderdetail_id,
od.items_id,
od.items_num
FROM orders o, orderdetail od, user u
WHERE o.user_id = u.id AND od.orders_id = o.id;
</select>
查询之多对多
user---->items
<resultMap id="userAndItemsResultMap" type="cn.ade.domain.User">
<!-- 用户信息映射 -->
<id property="id" column="user_id"/>
<result property="username" column="username"/>
<result property="address" column="address"/>
<!-- 用户中订单集合的映射 -->
<collection property="ordersList" ofType="cn.ade.domain.Orders">
<id property="id" column="id"/>
<result property="number" column="number"/>
<result property="createtime" column="createtime"/>
<result property="note" column="note"/>
<result property="user_id" column="user_id"/>
<!-- 订单中订单详情的映射 -->
<collection property="orderdetails" ofType="cn.ade.domain.Orderdetail">
<id property="id" column="orderdetail_id"/>
<result property="items_id" column="items_id"/>
<result property="items_num" column="items_num"/>
<!-- 商品详情的映射 -->
<association property="items" javaType="cn.ade.domain.Items">
<id property="id" column="items_id"/>
<result property="name" column="name"/>
</association>
</collection>
</collection>
</resultMap>
<select id="findUserAndItems" resultMap="userAndItemsResultMap">
SELECT
o.*,
u.username,
u.address,
od.id orderdetail_id,
od.items_id,
od.items_num,
i.name
FROM orders o, orderdetail od, user u, items i
WHERE o.user_id = u.id AND od.orders_id = o.id AND od.items_id = i.id;
</select>