• MyBatis(六):MyBatis复杂映射


    1. 一对一、多对一

      一对一/多对一都是使用association标签来进行关联,并制定javaType属性,定义resultMap接收查询结果

      例如:查询订单的时候需要一并把用户信息查出来,一个订单对应一个用户,同时多个订单对应同一个用户,Order实体增加user属性

      <select id="findAll" resultMap="orderMap">
          SELECT *,U.`name`,U.address FROM `order` O LEFT JOIN `user` U ON O.uid = U.id
      </select>
      
      <resultMap id="orderMap" type="com.rangers.entity.Order">
          <result column="id" property="id"></result>
          <result column="time" property="time"></result>
          <result column="total" property="total"></result>
          <result column="uid" property="uid"></result>
          <association property="user" javaType="com.rangers.entity.User">
              <result column="uid" property="id"></result>
              <result column="name" property="name"></result>
              <result column="address" property="address"></result>
          </association>
      </resultMap>
      
    2. 一对多

      一对多使用collection标签进行关联,并指定ofType属性,主要在于在一方定义collection标签,定义resultMap接收查询结果

      例如:一个用户对用多个订单,查询用户时把订单信息也查出来,User实体增加orderList属性

      <select id="findAll" resultMap="userMap">
          SELECT U.*,O.id oid,O.time,O.total FROM `user` U LEFT JOIN `order` O ON U.id = O.uid
      </select>
      
      <resultMap id="userMap" type="com.rangers.entity.User">
        <result column="id" property="id"></result>
        <result column="name" property="name"></result>
        <result column="address" property="address"></result>
      
        <collection property="orderList" ofType="com.rangers.entity.Order">
          <result column="oid" property="id"></result>
          <result column="time" property="time"></result>
          <result column="total" property="total"></result>
          <result column="id" property="uid"></result>
        </collection>
      </resultMap>
      
    3. 多对多

      多对多依然使用collection标签来进行关联,并指定ofType属性,在主查询表上定义collection标签,定义resultType接收查询结果

      例如:一个用户对应多个角色,一个角色可以被多个用户使用,就是个经典的多对多关系,下面查询用户同时查询出该用户的所有角色,User实体增加roleList属性

      <select id="findAllUserAndRole" resultMap="userRoleMap">
          select u.*,r.rolename,r.id rid from user u left join user_role ur on u.id=ur.user_id inner join role r on ur.role_id=r.id;
      </select>
      
      <resultMap id="userRoleMap" type="com.rangers.entity.User"> 
        <result column="id" property="id"></result> 
        <result column="name" property="name"></result> 
        <result column="address" property="address"></result> 
        <collection property="roleList" ofType="com.rangers.entity.Role"> 
          <result column="rid" property="id"></result> 
          <result column="rolename" property="rolename"></result> 
        </collection> 
      </resultMap> 
      
  • 相关阅读:
    Visual Studio调试器指南---Disassembly窗口
    Visual Studio调试器指南---Register窗口
    Visual Studio调试器指南---Threads窗口
    关于System.Convert.ToInt16(float value)抛异常System.OverflowException---值对于 Int32 太大或太小的原因的探究
    关于System.OverflowException异常
    Visual Studio调试器指南---Memory 1-4窗口
    关于异常System.NullReferenceException
    关于C++标准异常之std::out_of_range
    VC调试器高级应用----高级断点篇
    Visual Studio调试器指南---CallStack窗口
  • 原文地址:https://www.cnblogs.com/rangers-sun/p/14514408.html
Copyright © 2020-2023  润新知