MyBatis_02_01关联查询——实现一对一
文章目录
- MyBatis_02_01关联查询——实现一对一
- 前言
- 一对一 的实现 —— resultType方式实现
- 第一步:写个订单的扩展类
- 第二步 订单单接口和配套的映射文件
- 第三步:加载映射文件
- 第五步:测试
- 一对一 的实现 —— resultMap的方式实现
- 总结
前言
mybatis里面实现上一篇文章讲的关联查询的 一对一
一对一 的实现 —— resultType方式实现
我们使用mybatis的时候,怎么把这个数据查出来呢
我们先不要在模型里面套模型,先写个订单的扩展类
理解为什么一定要使用扩展类,因为是联合查询,没有任何一个标准的model会有这么多字段
(标准model是跟数据库的某一张表相对应的),
它是多个表联合查出来的
复杂查询时,单表对应的po(即model类)类已不能满足输出结果集的映射。所以要根据需求建立一个扩展类来作为resultType的类型
#查找某个定单id的信息,包括用户名字和地址
SELECT o.*,u.username,u.address FROM orders o,user u
WHERE o.user_id = u.id AND o.id = 3
第一步:写个订单的扩展类
下面我们具体写写,注意代码是活的,按照上面文档写也可以,
只要思路的对的就可以。就好像变量命名,不要求完全一致的,只要编程思想的对的即可
把之前测试的order 改个名字orders,或者新建一个model 命名为 orders
注意不仅要提供set/set方法 也要提供toString方法
然后让它去继承Orders就好了,这样它就有所有的Orders的属性了,
然后我们再根据查询出来的sql 在扩展类里面添加应该新加的属性即可
注意根据需求来
根据需求只要加这两个就行了
不仅要提供get./set,为了后面方便调试,还要提供toString
super.toString( )很实用
下一步是啥?
映射文件不要忘记了
第二步 订单单接口和配套的映射文件
文档内容
详细讲解:
我们肯定不能还在之前的UserMapper里面去写东西
新建好OrderMapp和OrderMapp.xml
第三步:加载映射文件
详细讲解
注意,如果别名里面已经配置了包名就不需要再配置具体的xml文件了(这块知识在前面)
第五步:测试
详细讲解
这样就实现了
这种使用扩展类的方式当然没有问题
但是我们可能会更倾向于使用下一篇文章所讲的
模型里面嵌套模型的方式
即这种方式
下一篇文章探讨一下模型里面嵌套模型的方式
一对一 的实现 —— resultMap的方式实现
掌握association的使用
1、OrdersMapper.java添加一个方法
2、OrdersMapper.xml
测试
这样就完成了
需要注意的是,resultMap还需要扩展类吗?
其实不需要了
因为
需要改成
我们运行项目 是死活都是报错的,看来文档没有说得很明白,留了个坑
一对一 的实现 —— resultMap的方式实现 具体实现看下一篇文章,
这里只把疑问提出来,这样也许印象会更深刻
从来就没有一帆风顺的人生,下一篇填坑应该不算过分
总结
resultType:
使用resultType实现较为简单,如果pojo中没有包括查询出来的列名,需要增加列名对应的属性,即可完成映射。如果没有查询结果的特殊要求建议使用resultType。
resultMap:
需要单独定义resultMap,实现有点麻烦,如果对查询结果有特殊的要求,使用resultMap可以完成将关联查询映射pojo的对象属性中。
resultMap可以实现延迟加载,resultType无法实现延迟加载