Mybatis学习第四天——一对一&&一对多

两表关系:

1.Mybatis中一对一关系

 1     <!-- 两表联查,通过相同属性user_id
 2         left join 表示以左边的表为主表
 3      -->
 4     <select id="findOrdersByUser" parameterType="User" resultMap="orders_user">
 5         select
 6         o.id,
 7         o.number,
 8         o.createtime,
 9         o.user_id,
10         u.username,
11         u.address 
12         from orders o
13         left join  user u
14         on o.user_id = u.id
15     </select>

一对一查询的sql代码,这里采用的是resultMap方式查询,即在Orders类中定义一对一的User对象 private User user;

 1     <!-- (均采用别名方式)
 2         type:返回类型,同时也是主要依照的表
 3         注意:在一对一关联中不能省略属性
 4         association:一对一标签
 5             property:在Orders类中对应User的属性名,Orders与type中的类型需一致
 6             javaType:该一对一关系,对应的pojo类 8      -->
 9     <resultMap type="Orders" id="orders_user">
10         <id column="id" property="id"/>
11         <result column="number" property="number"/>
12         <result column="createtime" property="createtime"/>
13         <result column="user_id" property="userId"/>
14         
15         <association property="user" javaType="User">
16             <id column="user_id" property="id"/>
17             <result column="username" property="username"/>
18             <result column="address" property="address"/>
19         </association>
20     </resultMap>

注意:id标签表示唯一性,一般是选取该表的id字段,当出现一对一、一对多关系时涉及2个id,那么可以选取表中(能访问的任意属性)能够表示该表唯一性的属性放在id标签中,上面代码此时order表中user_id字段与user表中id一致,故可以作为唯一性标志,若只能找到该表的id为唯一性属性,同时另一张表中已采用id为唯一标签,此时可以对id进行别名区别。别名操作在sql语句中执行。

2.Mybatis中一对多关系

一对多关系与一对一相似,主要在标签方面有些区别

 1     <!-- 此次将user表作为主表,主表中不可能出现重复id -->
 2     <select id="findUserByOrders" parameterType="Orders" resultMap="user_orders">
 3         select
 4         o.id,
 5         o.number,
 6         o.createtime,
 7         u.id uid,
 8         u.username,
 9         u.address 
10         from user u
11         left join orders o
12         on o.user_id = u.id
13     </select>
 1     <resultMap type="User" id="user_orders">
 2         <id column="uid" property="id"/>
 3         <result column="username" property="username"/>
 4         <result column="address" property="address"/>
 5         
 6         <!-- 一对多中不能简单地将javaType赋为Orders类型
 7             此时Mybatis不能自动区别是否为集合属性,此时须通过ofType设置属性类型
 8          -->
 9         <collection property="order" ofType="Orders">
10             <id column="id" property="id"/>
11             <result column="number" property="number"/>
12             <result column="createtime" property="createtime"/>        
13         </collection>
14     </resultMap>

 

posted @ 2019-01-16 16:37  洞若观火  阅读(564)  评论(0编辑  收藏  举报