1.1 需求
查询订单信息,关联查询创建订单的用户信息
确定查询的主表:订单表
确定查询的关联表:用户表
关联查询使用内链接?还是外链接?
由于orders表中有一个外键(user_id),通过外键关联查询用户表只能查询出一条记录,可以使用内链接。关联查询,orders.* ,USER.username , USER.sex , USER.address 为关联查询的列,Orders , USER 为关联的表,orders.user_id= user.id 为关联查询的条件(注意条件中的 , 号)
SELECT
orders.* ,
USER.username ,
USER.sex ,
USER.address
FROM
Orders ,
USER
WHERE orders.user_id = user.id
将上边sql查询的结果映射到pojo中,pojo中必须包括所有查询列名。
原始的Orders.java不能映射全部字段,需要新创建的pojo。
创建 一个pojo继承包括查询字段较多的po类。
//通过此类映射订单和用户传查询的结果,让此类继承包括字段较多的POJO类
public classOrdersCustom extends Orders{
//添加用户属性
/*USER.username,
USER.sex,
USER.address */
private String username;
private String sex;
private String address;
<!-- 查询订单关联查询用户信息 -->
<select id="findOrdersUser" resultType="OrdersCustom">
SELECTorders.* ,
user.username,user.sex, user.address FROM orders ,USER
WHERE
orders.user_id=user.id
</select>
//查询订单关联查询用户信息
publicList<OrdersCustom> findOrdersUser()throws Exception;
使用resultMap将查询结果中的订单信息映射到Orders对象中,在orders类中添加User属性,将关联查询出来的用户信息映射到orders对象中的user属性中。
public classOrders {
privateInteger id;
privateInteger userId;
privateString number;
privateDate createtime;
privateString note;
//用户信息
private User user;
<!-- 订单查询关联用户的resultMap
将整个查询的结果映射到cn.itcast.mybatis.po.Orders中
-->
<resultMap type="cn.itcast.mybatis.po.Orders"id="OrdersUserResultMap">
<!-- 配置映射的订单信息 -->
<!-- id:指定查询列中的唯一标识,订单信息的中的唯一标识,如果有多个列组成唯一标识,配置多个id
column:订单信息的唯一标识列
property:订单信息的唯一标识列所映射到Orders中哪个属性
-->
<id column="id"property="id"/>
<result column="user_id"property="userId"/>
<result column="number"property="number"/>
<result column="createtime"property="createtime"/>
<result column="note"property=note/>
<!-- 配置映射的关联的用户信息 -->
<!-- association:用于映射关联查询单个对象的信息
property:要将关联查询的用户信息映射到Orders中哪个属性
-->
<associationproperty="user" javaType="cn.itcast.mybatis.po.User">
<!-- id:关联查询用户的唯一标识
column:指定唯一标识用户信息的列
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="findOrdersUserResultMap" resultMap="OrdersUserResuletMap">
SELECTorders.* ,
user.username,user.sex, user.address FROM orders ,USER
WHERE
orders.user_id=user.id
</select>
//查询订单关联查询用户使用resultMap
public List<Orders> findOrdersUserResultMap()throws Exception;
测试略
摘自传智博客燕青老师的视频