天天看点

【MyBatis框架】高级映射-一对一查询

一对一查询

根据上面我们分析的订单商品数据模型(链接:12.订单商品数据模型-分析思路.txt),我们来写一下有关一对一的查询,分别使用了resulttype和resultmap指定输出参数类型

1.一对一查询使用resulttype指定输出参数类型

1.1需求

查询订单信息,关联查询创建订单的用户信息

1.2resulttype

1.2.1sql语句

确定查询的主表:订单表

确定查询的关联表:用户表

关联查询使用内链接?还是外链接?

由于orders表中有一个外键(user_id),通过外键关联查询用户表只能查询出一条记录,可以使用内链接。

1.2.2创建pojo

将上边sql查询的结果映射到pojo中,pojo中必须包括所有查询列名。

下面写orders.java对映数据库表单

发现原始的orders.java不能映射全部字段,需要新创建的pojo。

创建 一个pojo继承包括查询字段较多的po类。

1.2.3mapper.xml

orderscustommapper.xml:

在sqlmapconfig.xml中我们扫描了mapper包所有的mapper映射文件,所以这里就不在sqlmapconfig.xml中单独加载mapper映射文件了。

1.2.4mapper.java

测试:

测试结果:

张三|男|河南焦作

刘莉莉|女|山东威

输出日志:

2.一对一查询使用resultmap指定输出参数类型

2.1sql语句

同resulttype实现的sql

2.2使用resultmap映射的思路

使用resultmap将查询结果中的订单信息映射到orders对象中,在orders类中添加user属性,将关联查询出来的用户信息映射到orders对象中的user属性中。

2.3需要orders类中添加user属性

2.4mapper.xml

2.4.1定义resultmap

2.4.2statement定义

2.4.3mapper.java

刘莉莉|女|山东威海

日志输出:

3.resulttype和resultmap实现一对一查询小结

实现一对一查询:

resulttype:使用resulttype实现较为简单,如果pojo中没有包括查询出来的列名,需要增加列名对应的属性,即可完成映射。

如果没有查询结果的特殊要求建议使用resulttype。

resultmap:需要单独定义resultmap,实现有点麻烦,如果对查询结果有特殊的要求(比如pojo里面又含有pojo),使用resultmap可以完成将关联查询映射pojo的属性中。

resultmap可以实现延迟加载,resulttype无法实现延迟加载。

转载请注明出处:http://blog.csdn.net/acmman/article/details/46602553