Mybatis关联查询

1.一对一关联查询

1.  一对一关联查询(一种需要,需要显示订单表的信息同时还需要显示订单人的信息,这就是多表查询,由于一条订单只会对应一个用户,所以说,这就是一对一一个订单对应一个人)

1.1将原来实体类中增加一个新的字段

(1)在实体类中增加对应另外一张表的实体类属性get/set toString

(2)输出映射改为resultMap手动去映射对应的属性

(3)association(1对1关联) property原来orders中的name属性,javaType User 剩下还是要手动映射。

注意:只要不手动书写映射,他都不会带你获得数据库中的值,即便名字一样。

如果名字重复了,他自己会自动增加一个1,但是不能映射,你没有起别名,他是不会帮你映射的。


<resultMap id="ordersView" type="cn.hd.query.Order">
        
<id property="id" column="id">id>
        
<result property="orderTime" column="orderTime">result>
       
<result property="eatTime" column="eatTime">result>
        
<result property="orderId" column="orderId">result>
        
<association property="user" javaType="cn.hd.pojo.User">
            
<id property="id" column="orderId">id>
            
<result property="name" column="name">result>
        
association>
resultMap>
<
select id="findOrderView" resultMap="ordersView">
   
SELECT * from `order` o leftjoin user u on o.orderId = u.id
select>

 

1.2新建一个bean类(推荐使用)数据库信息与表信息对应使用resultType

(业务需要往往不需要订单人的全部信息,只需要部分信息,根据业务建立一个新的实体类,这个实体类中包含要显示的所有字段,并且和数据库查出来的字段保持一致)

2. 新建一个实体类对应的订单的所有信息
<select id="findOrderView"resultType="cn.hd.query.OrderView">
    SELECT * from `order` o leftjoin user u on o.orderId = u.id
select>

 

2.  一对多关联查询:

结果映射中的resultType不好用了

所以只能用resultMap

其中一对多应该用collection,不能用一对一的association。

Collection里的property是user类中order属性的属性名,

JavaType:如果是集合(set/list)都是写list,并且ofType:对应的order的实体类

<resultMapid="userAndOrder" type="cn.hd.pojo.User">
   
<id property="id" column="id">id>
   
<result column="name" property="name">result>
   
<result property="address" column="address">result>
 
  <collection property="order" javaType="list" ofType="cn.hd.query.Order">
       
<id property="id" column="ordersId">id>
       
<result property="orderTime" column="orderTime">result>
       
<result property="eatTime" column="eatTime">result>
  
 collection>
resultMap>
<
select id="findUserAndOrder" resultMap="userAndOrder">
   
SELECT u.*,o.id asordersId,o.orderTime,o.eatTime from `order` o right join user u on o.orderId =u.id
select>


你可能感兴趣的:(Mybatis关联查询)