mybatis的一对一查询

一对一查询:

  有两个表:

    user   

   orders

查询要求查询创建订单的用户信息

    查询语句:

SELECT 
  orders.*,
  USER.username,
  USER.sex,
  USER.address 
FROM
  orders,
  USER 
WHERE orders.user_id = user.id 

   order通过user_id和user连接在一起。而且在order的实体中,既有User属性也有user_id属性

 第一种实现方式:

   resultType:

                1.新建一个类,继承orders,并且加入 查询结果里面有,但result的属性没有的属性。

               2.对于select的编写。

<select id="findOrdersUser"  resultType="com.iot.mybatis.po.OrdersCustom">
  SELECT
      orders.*,
      user.username,
      user.sex,
      user.address
    FROM
      orders,
      user
    WHERE orders.user_id = user.id
</select>

    将查询的结果resultType设置为新建的类。

   

对于测试:将接口和mapper名字一样在一个包里面。

                 接口的方法,返回值和输入参数和mapper一致

                 测试类中,导入sqlsessionfactory。在@before方法进行sqlsessionfactory的创建

                 测试方法中,创建sqlsession

                通过sqlsession来创建代理对象

             // OrderMapper ordermapaper=sqlsession.getMapper(OrderMapper.class);

                通过代理对象进行方法的调用

resultMap的调用

    多余resultmap 就是将返回对象还是设置为原来的对象,对于不存在的属性进行map映射

               首先将select中的resultType改为resultMap 

             重点是 map的编写

              map中首先是orders中的属性的映射

              第二部分就是映射对象的映射

            通过associate的来配置。

             associate中的属性:property用来说明配置的是orders即映射结果的那个属性

                                             JavaType就是那个属性的pojo对象

<association property="user"  javaType="com.iot.mybatis.po.User">
        <!-- id:关联查询用户的唯 一标识
        column:指定唯 一标识用户信息的列
       property:映射到user的哪个属性
         -->
        <id column="user_id" property="id"/>
        <result column="username" property="username"/>
        <result column="sex" property="sex"/>
        <result column="address" property="address"/>
    </association>









猜你喜欢

转载自blog.csdn.net/lilibo123/article/details/80683462