当前位置:XML > XML历史

mybatis实现一对一,一对多,多对多

前言:

mybatis作为一个持久层框架,是一个致力于面向程序员,需要程序员自行编写相关的sql语句的orm框架,而开发中涉及到的sql,一较多的基本是查询的sql,由于表与表之间的关系,我们经常需要处理一对一,一对多,和多对多关系的查询语句,而针对这些关联关系,经常用到的是association标签和collection标签。

1)一对一查询:

案例:假设一个用户可以创建多个订单,而一个订单只能由一个用户创建,因此,用户与订单属于一对多关系,而订单与用户属于一对一关系。

user类:

orders类:

sql语句,根据orders表中的user_id外键与user表中的id关联

mapper接口:

测试:

先加载全局xml文件,最终得到sqlsessionfactory工厂对象

结果:

上边resultMap里边的相关标签和属性:

id标签:property编写实体类对应的主键id,column编写映射的结果集的id字段;

result标签:其他非主键使用result标签;

property:实体类中相应的属性;

column:查询映射结果集对应的列的字段;

association标签(一对一关联关系使用):该标签中的property=user,指将关联查询带的用户信息映射到user属性,也就是上边orders中的user属性;

javaType:user属性所属的pojo类;

2)一对多查询:

案例:

查询订单并关联查询订单详情,要求映射的结果集,有用户信息,订单信息,和订单详情信息。

分析:一份订单里边可以有多个商品,订单详情指针对每种商品的相关信息的描述,以及订单的创建时间,编号等。所以订单与详情属于一对多关系。

orderdetail类:

orders类:

sql语句:

关于collection标签中的相关属性和上边的association标签类似,区别之一只是一个使用的是javaType一个使用的是ofType

接口定义和上边差不多,这里就不写了,只需要知道使用mybatis实现mapper代理时,要满足:

mapper接口名和mapper.xml中的select标签的id值保持一致;

返回值和resultType或resultMap的type保持一致;

有参数时,只需要保证参数和parmentType指定的类型一致;

测试:

结果:

3)多对多查询:

案例:一份订单里边可以有多个商品,同种商品可以在多份订单中,因此,订单与商品的关系属于多对多关系;一条订单详情,描述一种商品,订单详情与商品又属于一对一关系。

在本次demo中,订单与商品关联是通过订单详情表关联起来的,即订单详情起到一个中间表的作用:

orderdetail类:

sql语句:

测试结果:




转载请注明:http://www.vviuov.com/xgyy/1063270.html

  • 上一篇文章:
  • 下一篇文章: 没有了