mybatis3.2.7应用_高级映射(一对一、一对多、多对多)
1. 一对一查询
需求:查询订单信息,关联查询创建订单的用户信息
1.1 使用resultType实现
1.1.1 sql语句
确定查询的主表:订单表
确定查询的关联表:用户表
关联查询:使用外连接,还是内连接??
--由于orders表中有一个外键(user_id),通过外键关联查询用户表只能查询出一条记录,可以使用内连接
select t.*,
u.username, u.sex, u.address
from orders t, user u
where t.user_id = u.id
1.1.2 创建pojo
将上边sql查询结果映射到pojo中,pojo中必须包含所有查询列名。
原始的Orders不能映射全部字段,需要新创建pojo。创建一个pojo继承包括查询字段较多的po类。
//通过此类映射订单和用户和用户查询的结果,让此类继承包括字段较多的pojo类
public class OrdersCustom extends Orders{
//添加用户属性
//u.username, u.sex, u.address
private String username;
private String sex;
private String address;
}
1.1.3 mapper.xml
<!-- 查询订单,关联查询用户信息 -->
<select id="findOrderUser" resultType="cn.itcast.mybatis.po.OrdersCustom">
select t.*, u.username, u.sex, u.address
from orders t, user u
where t.user_id = u.id
</select>
1.1.4 mapper.java
public List<OrdersCustom> findOrderUser() throws Exception;
1.2 使用resultMap实现
1.2.1 sql语句
同resultType实现的sql
1.2.2 使用resultType映射的思路
使用resultType将查询结果中的订单信息映射到Orders对象中,在Orders对象中添加user属性,将关联查询出来的用户信息映射到Orders对象中user属性中。
需要Orders类中添加user属性。
public class Orders{
private Integer id;
private Integer userId;
private String number;
private Date createTime;
private String note;
//用户信息
private User user;
}
1.2.3 mapper.xml 定义resultMap(一对一使用association来映射用户信息)
<!-- 订单查询关联查询用户信息 的 resultMap
将整个查询的结果映射到cn.itcast.mybatis.po.Orders中
-->
<resultMap type="cn.itcast.mybatis.po.Orders" id="ordersUserResultMap">
<!-- 配置映射的订单信息-->
<!-- id: 指定查询列中的唯一标识,订单信息中的唯一标识,如果有多个列组成唯一标识,配置多个id
column: 订单信息中的唯一标识列
property:订单信息中的唯一标识列所映射到Orders中的哪个属性-->
<id column="id" property="id"/>
<result column="user_id" property="userId"/>
<result column="number" property="number"/>
<result column="createTime" property="createTime"/>
<result column="note" property="note"/> <!-- 配置映射的关联的用户信息
association: 用于映射关联查询单个对象的信息
property: 要将关联查询的用户信息映射到Orders中哪个属性
javaType: 指定映射到关联用户的pojo类型中-->
<association property="user" javaType="cn.itcast.mybatis.po.User">
<!-- id: 关联查询用户的唯一标识
column: 指定唯一标识用户信息的列
property:映射到user的哪个属性-->
<id column="user_id" property="id"/>
<result column="username" property="username"/>
<result column="sex" property="sex"/>
<result column="address" property="address"/>
</association>
</resultMap>
1.2.4 mapper.xml statement
<!-- 查询订单,关联查询用户信息 -->
<select id="findOrdersUserResultMap" resultMap="ordersUserResultMap">
select t.*, u.username, u.sex, u.address
from orders t, user u
where t.user_id = u.id
</select>
1.2.5 mapper.java
public List<Orders> findOrdersUserResultMap() throws Exception;
1.3 resultType 和 resultMap 实现一对一查询小结
resultType: 使用resultType较为简单,如果pojo中没有包括查询出来的列名,需要增加列名对应的属性,即可完成映射。
如果没有查询结果的特殊要求,建议使用resultType。
resultMap: 需要单独定义resultMap,实现有点麻烦,如果对查询结果有特殊的要求,使用resultMap可以完成关联查询映射到pojo属性中。
resultMap可以实现延时加载。而resultType无法实现延时加载。
mybatis3.2.7应用_高级映射(一对一、一对多、多对多)的更多相关文章
- JPA级联(一对一 一对多 多对多)注解【实际项目中摘取的】并非自己实际应用
下面把项目中的用户类中有个:一对一 一对多 多对多的注解对应关系列取出来用于学习 说明:项目运行正常 问题类:一对多.一对一.多对多 ============一对多 一方的设置 @One ...
- Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作
Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作,单表查询,多表查询 一丶表与表之间的关系 背景: 由于如果只使用一张表存储所有的数据,就会操作数 ...
- mybatis 一对一 一对多 多对多
一对一 一对多 多对多
- 【mybatis深度历险系列】mybatis中的高级映射一对一、一对多、多对多
学习hibernate的时候,小编已经接触多各种映射,mybatis中映射有到底是如何运转的,今天这篇博文,小编主要来简单的介绍一下mybatis中的高级映射,包括一对一.一对多.多对多,希望多有需要 ...
- mybatis入门基础(六)----高级映射(一对一,一对多,多对多)
一:订单商品数据模型 1.数据库执行脚本 创建数据库表代码: CREATE TABLE items ( id INT NOT NULL AUTO_INCREMENT, itemsname ) NOT ...
- Mybatis实现高级映射一对一、一对多查询
终于把论文写得差不多了,系统也不急着完成,可以抽出点时间来完成这个系列的博客了.在写本博客之前我是惶恐不安的,高级映射一贯是持久层框架里的重中之重,小到自己开发小系统,大到企业级开发,表的存在从来就不 ...
- Mybatis学习总结(六)——高级映射(一对一,一对多,多对多)
一.订单商品数据模型 1.数据库执行脚本 创建数据库表代码: /*Table structure for table `t_user` */ CREATE TABLE t_user ( id INT ...
- mybatis入门基础----高级映射(一对一,一对多,多对多)
阅读目录 一:订单商品数据模型 二.一对一查询 三.一对多查询 四.多对多查询 回到顶部 一:订单商品数据模型 1.数据库执行脚本 创建数据库表代码: CREATE TABLE items ( id ...
- 使用NHibernate(7)-- 一对一 && 一对多 && 多对多
1, 一对一. 对于数据量比较大的时候,考虑查询的性能,肯能会把一个对象的属性分到两个表中存放:比如用户和用户资料,经常使用的一般是Id和用户名,用户资料(学校,籍贯等)是不经常被查询的,所以就会分成 ...
随机推荐
- win10 安装VMware Workstation Pro提示无法在windows上运行
win10 安装vm无法在windows上运行 之前还可以用 网上搜了一下 要安装最新15.5.0就不会报错了 没毛病!! 不想注册下载 百度网盘(2019年9月19日版本) https://pan ...
- Data Visualization and D3.js 笔记(1)
课程地址: https://classroom.udacity.com/courses/ud507 什么是数据可视化? 高效传达一个故事/概念,探索数据的pattern 通过颜色.尺寸.形式在视觉上表 ...
- 2000字谏言,给那些想学Python的人,建议收藏后细看!
1. 这几天陆续收到很多读者.球友的留言.私信,说要怎么学Python?有没有基础的,偏小白的学习方法?我的回答是:等我统一答复. 小胖从不食言,今天就来说说我觉得一个零基础.想转行.一直不得法的人应 ...
- [PyTorch入门]之从示例中学习PyTorch
Learning PyTorch with examples 来自这里. 本教程通过自包含的示例来介绍PyTorch的基本概念. PyTorch的核心是两个主要功能: 可在GPU上运行的,类似于num ...
- module in JavaScript
JavaScript 在ES6之前没有给出官方模块的定义,因此社区自己搞了两个模块加载方案: CommonJS (node) AMD (browser) 本文略 CommonJS规范 module定义 ...
- Oops 的栈信息分析
MTK MT55 F3600 平台 现象:播放MP4文件不断快退或者快进系统重启. 关键log: Kernel panic - not syncing: x_msg_q_receive(): not ...
- 代工黑马,纬创如何强吞iPhone?
现在,智能手机市场非常得意兴阑珊,以苹果为首的最强大脑似乎再也想不出什么好的创意,iPhone7也只不过是旧机种的翻新款式,看上去跟一块板砖.一块镜子差不多:软体方面则出现了大批的"过度 ...
- 解决getImageData跨域问题
在项目开发过程中要用到html5增加的getImageData方法来实现刮刮卡的效果,后台上传图片,手机端用手刮.在本地开发没遇到问题,上线之后发现刮不了,提示"Uncaught Secur ...
- 万字硬核干货!6大技巧,极速提升kubectl的生产力!
明晚8:30,k3s实战课程开启!将由Rancher研发总监带你畅游k3s与边缘AI的奇妙世界.课程内容完全由实际使用场景中总结而来,别错过啦~!访问以下链接即可传送到课程现场: http://z-m ...
- 《自拍教程35》段位二_Python面向过程函数
Python批处理脚本只能处理较为简单的顺序执行的语句, 语句太多了,就有点乱...是时候升级一下了. 函数可以将多条语句分组封装,实现面向过程的,简单的模块化管理. 方便将语句实行"网格& ...