MyBatis_02_01关联查询——实现一对一
文章目录
前言
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无法实现延迟加载