mybatis 实现一对一关联表查询

1      一对一查询

1.1  需求

查询订单信息,关联查询创建订单的用户信息

1.2  resultType

1.2.1    sql语句

确定查询的主表:订单表

确定查询的关联表:用户表

         关联查询使用内链接?还是外链接?

         由于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

1.2.2    创建pojo

将上边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;

  

1.2.3    mapper.xml

  

   <select id="findOrdersUser" resultType="OrdersCustom">

      SELECTorders.* ,

      user.username,user.sex, user.address FROM orders ,USER

      WHERE

      orders.user_id=user.id

   select>

1.2.4    mapper.java

      //查询订单关联查询用户信息

   publicList findOrdersUser()throws Exception;

1.3  resultMap

1.3.1    使用resultMap映射的思路

使用resultMap将查询结果中的订单信息映射到Orders对象中,在orders类中添加User属性,将关联查询出来的用户信息映射到orders对象中的user属性中。

 

1.3.2    需要Orders类中添加user属性关联user

public classOrders {

   privateInteger id;

 

   privateInteger userId;

 

   privateString number;

 

   privateDate createtime;

 

   privateString note;

   

   //用户信息

    private User user;

1.3.3    mapper.xml

1.3.3.1      定义resultMap 一对一关联查询用association  的类型为javatype定义的类型   columnsql 语句中的字段,property 为你需要映射的字段

  <resultMap type="cn.itcast.mybatis.po.Orders"id="OrdersUserResultMap">

    

    

     <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/>

    

    

    

     "user"  javaType="cn.itcast.mybatis.po.User">

       

        <id column="user_id"property="id"/>

        <result column="username"property="username"/>

        <result column="sex"property="sex"/>

        <result column="address"property="address"/>

    

  resultMap>

1.3.3.2      statement定义还是关联查询此处要注意ResultMap返回类型名称要和定义的ResultMap  id 一致

   <select id="findOrdersUserResultMap" resultMap="OrdersUserResuletMap">

      SELECTorders.* ,

      user.username,user.sex, user.address FROM orders ,USER

      WHERE

      orders.user_id=user.id

   select>

1.3.4    mapper.java

//查询订单关联查询用户使用resultMap

public List findOrdersUserResultMap()throws Exception;

测试略

摘自传智博客燕青老师的视频

你可能感兴趣的:(2.2)