mybatis 高级映射
一对一关联映射
需求:查询订单信息,关联查询用户信息(一个订单对应一个用户)
(1)通过 resultType 实现
sql 语句:
创建 pojo 类
select
orders.* ,
USER.username,
USER. sex ,
USER.address
FROM orders , USER
WHERE orders.userid = USER .id
由于 orders.java 不能全部映射字段,所以要新建 pojo
创建一个 pojo 继承包括查询字段较多的 · 一个 po 类
OrdersCustom.java (订单扩展类)
mapper.xml 文件
//订单扩展类
public class OrdersCustom extends Orders {
//添加用户属性
private String username;
private String sex;
private String address;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
(2)resultMap 实现
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.mapper.OrdersMapperCustom">
<select id="findOrdersUser" parameterType="" resultType="cn.po.OrdersCustom">
select
orders.* ,
USER.username,
USER. sex ,
USER.address
FROM orders , USER
WHERE orders.userid = USER .id
</select>
</mapper>
sql 语句
在 orders 类中添加 user
select
orders.* ,
USER.username,
USER. sex ,
USER.address
FROM orders , USER
WHERE orders.userid = USER .id
生成 get ,set 方法
//用户信息
private User user;
mapper.xml
<!-- 定义订单查询关联用户resultMap 将整合查询结果映射到cn.po.Orders-->
<resultMap type="cn.po.Orders" id="OrdersUserResultMap">
<!-- 映射订单信息,非关联 -->
<!-- id唯一标识,如果有多个配置多个id -->
<id column="id" property="id">
</id>
<result column=user_id " property="userid "></result>
<result column=number" property="number">
</result>
<result column=createtime " property="createtime "></result>
<result column="note " property="note "></result>
<!-- 配置映射的关联用户信息 -->
<!-- association用于映射关联查询单个对象的信息
property 要将关联查询的用户信息映射到Orders的那个属性
-->
<association property="user " javaType="cn.po.User ">
<!-- id关联用户的唯一标识
colimn 指定唯一标识用户列
javaType映射到user的那个属性
-->
<id column="user_id " property="id "/>
<result column="username " property="username "/>
<result column="sex " property="sex "/>
<result column="address " property="address "/>
</association>
</resultMap>
<select id="findOrdersUser " parameterType=" " resultMap="OrdersUserResultMap ">
select
orders.* ,
USER.username,
USER. sex ,
USER.address
FROM orders , USER
WHERE orders.userid = USER .id
</select>
一对多关联映射
需求:查询订单及订单明细(一个订单里有多个商品明细)
sql 语句
select
orders.* ,
orderdetail.id orderdetail_id,
orderdetail.items_id,
orderdetail.items_num,
orderdetail.orders_id
FROM orders ,orderdetail
WHERE orderdetail.orders_id = orders.id
在 Orders 类中添加订单明细(orderdetail.java)的 list 集合
//订单明细
private List < Orderdetail > orderdetail;
mapper.xml
<resultMap type="cn.po.Orders " id="OrdersOrderdetailResultMap ">
<!-- 映射订单信息,非关联 -->
<!-- id唯一标识,如果有多个配置多个id -->
<id column="id " property="id ">
</id>
<result column=user_id " property="userid ">
</result>
<result column=number " property="number ">
</result>
<result column=createtime " property="createtime ">
</result>
<result column="note " property="note ">
</result>
<!-- 配置映射的关联用户信息 -->
<!-- collection用于映射关联查询多个记录映射到集合当中
property 要将关联查询的用户信息映射到Orders的那个属性
ofType指定映射到集合属性中类型
-->
<collection property="orderdetail " ofType="cn.po.Orderdetail ">
<id column="orderdetail_id " property="id "></id>
<result column="items_id " property="itemsid "></result>
<result column="items_num " property="itemsnum "></result>
<result column="orders_id " property="ordersid "></result>
</collection>
</resultMap>
<select id="findOrdersUser " parameterType=" " resultMap="OrdersOrderdetailResultMap
">
select
orders.* ,
orderdetail.id orderdetail_id,
orderdetail.items_id,
orderdetail.items_num,
orderdetail.orders_id
FROM orders ,orderdetail
WHERE orderdetail.orders_id = orders.id
</select>
来源: https://www.cnblogs.com/durui/p/8251142.html