0
点赞
收藏
分享

微信扫一扫

MyBatis学习:高级映射之一对一查询

云上笔记 2021-09-30 阅读 42
日记本

模拟这些需求,事先要建立几个表,不同的表之间将对应上面提到的不同的映射,为此,我建立4个表,如下:

每个表对应的po就不写了。从上面的表中,可以分析出下面的一些关系:

        主要总结mybatis中一对一的映射,所以我选择左边orders和user之间的一对一关系来总结,主要是查询订单信息,关联查询创建订单的用户信息。

        查询结果可以使用resultType,也可以使用resultMap,在这里我两种方法都使用一下,然后对比一下各个方法的特点。

1. resultType

        1)sql查询语句        写查询语句的时候首先得确定查询的主表,这里是订单表,然后关联表是用户表。由于orders表中有一个外键(user_id),通过此外键关联查询用户表只能查询出一条记录,所以使用内连接。查询的sql如下:

        2)创建pojo

        使用resultType的话,有个前提就是查询结果要想映射到pojo中去,pojo中必须包括所有查询出的列名才行。这里不仅查询出order表中的所有字段,而且还查询出了用户表中的部分字段,所以我们要自己新建一个pojo来包含所有的这些查询出来的字段才行。 

创建pojo的原则是继承包括查询字段较多的po类。

        3)UserMapperOrders.xml

        4)UserMapperOrder.java

注意接口和映射文件要放在同一个目录下,因为SqlMapConfig.xml文件中配置的是批量加载mapper,到这里就完成了使用resultType方法来实现一对一查询了,下面测试一下:

可以看出,使用resultType的流程很简单,还是和之前的一样,关键还是在sql语句上,这也是mybatis的强大之处,自己写sql语句,想怎么查就怎么查。下面再总结一下使用resultMap方法来实现一对一查询。

2. resultMap

        使用resultMap方法的思路如下:使用resultMap将查询结果中的订单信息映射到Orders对象中,在Orders类中添加User属性,将关联查询出来的用户信息映射到Orders对象中的User属性中。所以现在Orders类中添加一项User属性。 

            学过Hibernate就会感觉这里和Hibernate有点像,如果用Hibernate,这里也是在Orders类中添加一个User属性,将查询Orders关联出的User放到User属性中。

    1)定义resultMap

主要用到了<association>标签,值用来映射关联查询单个对象的信息。

        2)UserMapperOrder.xml

配置和上面resultType一样的,唯一区别在于id和resultMap,注意一下就行了。

    3)UserMapperOrder.java

也很简单,不再多说了。下面测试一下:

3. resultType和resultMap

实现一对一查询:


参考:https://mp.weixin.qq.com/s/wSuMkV4pOWQOJGaiuguTYA

举报

相关推荐

0 条评论