Mybatis 一对一、一对多、多对多
今天我们来复习一下 Mybatis 框架吧
总所周知,Mybatis 是一款优秀的 基于ORM
半自动
轻量化
的 持久层框架
ORM:对象关系映射,简单的说就是表结构对应实体类
半自动:可灵活配置SQL,优化代码性能
轻量化:简单好用
持久层框架:把数据存储在磁盘上
我知道你都懂,我只是自己复述一下
一对一关系
现有订单表和用户表,要求在查询订单的同时查询该订单所属用户
查询SQL
select * from orders o,user u where o.uid = u.id
实体类
public class Order {private Integer id;private String orderTime;private Double total;private User user;
}public class User{private Integer id;private String username;// 省略
}
Mapper 关键字:association
<resultMap id="orderMap" type="com.liuyuncen.Order"><result property="id" column="id"></result><result property="orderTime" column="orderTime"></result><result property="total" column="total"></result><association property="user" javaType="com.liuyuncen.User"><result property="id" column="uid"></result><result property="username" column="username"></result></association>
</resultMap><select id="findOrderAndUser" resultMap="orderMap">select * from orders o,user u where o.uid = u.id
</select>
mapper 的加载方式有4种
如果是采用 包内映射接口注册,需要保证 xml 文件和 java 文件在同名包下。
一对多关系
还是刚刚的表模型,刚实验的一对一关系中,一个订单只能对应一个用户
现在要求查询一个订单并包括其下的所有订单
大多数情况下,一个用户肯定存在多个订单的情况,这就是一对多关系
但也有可能有些用户一个订单都没有,这样我们就不能使用内连接的方式,应该采用左外连接或右外连接
查询SQL是
select * from user u left join orders o on u.id = o.uid
修改实体类
public class Order {private Integer id;private String orderTime;private Double total;
}public class User {private Integer id;private String username;// 多个订单private List<Order> orderList;
}
Mapper 关键字collection
<resultMap id="userMap" type="com.liuyuncen.User"><result property="id" column="uid"></result><result property="username" column="username"></result><collection property="orderList" ofType="com.liuyuncen.Order"><result property="id" column="id"></result><result property="orderTime" column="orderTime"></result><result property="total" column="total"></result></collection>
</resultMap><select id="findAll" resultMap="userMap">select * from user u left join orders o on u.id = o.uid
</select>
多对多关系
用户表和角色的关系为,一个用户有多个角色,一个角色被多个用户使用
sys_user_role 的两个字段既作为联合主键也作为外键,这就是 多对多关系体现
多对多查询需求:查询所有用户同时查询出该用户的所有角色
查询SQL
# 查询所有用户同时查询出该用户的所有角色
select * from user u left join sys_user_role sur on u.id = sur.userid inner join sys_role sr on sur.roleid = sr.id
修改实体类
public class User {private Integer id;private String username;private List<Role> roleList;
}
Mapper
<resultMap id="userRoleMap" type="com.liuyuncen.User"><result property="id" column="userid"></result><result property="username" column="username"></result><collection property="roleList" ofType="com.liuyuncen.Role"><result property="id" column="roleid"></result><result property="roleName" column="roleName"></result><result property="roleDesc" column="roleDesc"></result></collection>
</resultMap><select id="findAllUserAndRole" resultMap="userRoleMap">select * from user u left join sys_user_role ur on u.id = ur.useridleft join sys_role r on r.id = ur.roleid
</select>
控制台打印信息
ok 今天的分享就到这里了,既然都看到这里了,不妨透露个小秘密,明天分享基于注解的关系查询!
Mybatis 一对一、一对多、多对多相关推荐
- mybatis的一对一 一对多 多对多
mybatis的一对一 一对多 多对多 1.表 2.建表语句 order_t表 CREATE TABLE `order_t` ( `id` int(11) NOT NULL, `user_id` in ...
- 7. MyBatis多表查询 - 一对一 - 一对多 - 多对多
7. MyBatis多表查询 - 一对一 - 一对多 - 多对多 前言 在前面的篇章,我们已经熟悉了单表查询,下面我们来看看如何进行 多表查询. 数据准备 create database if not ...
- SQLAlchemy_定义(一对一/一对多/多对多)关系
SQLAlchemy_定义(一对一/一对多/多对多)关系 目录 Basic Relationship Patterns One To Many One To One Many To Many Basi ...
- Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作
Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作,单表查询,多表查询 一丶表与表之间的关系 背景: 由于如果只使用一张表存储所有的数据,就会操作数 ...
- day 69-70 一对一 一对多 多对一联表查询
day 69 orm操作之表关系,多对多,多对一多对一/一对多,多对多{类中的定义方法}day691. 昨日内容回顾1. 单表增删改查2. 单表查询API返回QuerySet对象的:1. .all() ...
- JPA 一对一 一对多 多对一 多对多配置
1 JPA概述 1.1 JPA是什么 JPA (Java Persistence API) Java持久化API.是一套Sun公司 Java官方制定的ORM 方案,是规范,是标准 ,sun公司自己并没 ...
- Django一对一 ,一对多,多对多
Django 数据库一对多,多对多 目录 app01/models.py app01/views.py app01/urls.py Python_Django/urls.py 目录 app01/mod ...
- Mybatis中的关系映射(一对一,一对多,多对多)
在网上寻了很久,大多数讲关系性的文章都是大篇幅的去将表照搬上来,本来就很生硬,此文就不在讲述关系性映射的具体实现,转而从浅层来讲讲其概念性. 1.1 关联关系概述 在关系型数据库中,多表之间存在着三种 ...
- JAVA日记之mybatis-3一对一,一对多,多对多xml与注解配置 ----喝最烈的酒.
1.Mybatis多表查询 1.1 一对一查询 1.1.1 一对一查询的模型 用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户 一对一查询的需求:查询一个订单,与此同时查询出该订单 ...
- 初学者易上手的SSH-hibernate04 一对一 一对多 多对多
这章我们就来学习下hibernate的关系关联,即一对一(one-to-one),一对多(one-to-many),多对多(many-to-many).这章也将是hibernate的最后一章了,用于初 ...
最新文章
- 2018-3-5(论文——网络中非结构信息的表示与应用)笔记二 (歧义词,未登录词,禁用词)
- python函数的用法详解(作用、定义、调用、函数参数、函数返回值、函数说明文档、函数嵌套使用)
- android世界时钟代码大全,世界时钟精美时钟代码
- row height
- Scala比较器:Ordered与Ordering
- 这不应该是19岁女孩的结局,这不应该是围观者该有的表达!
- 11产品经理要懂的-人性行为之善良友好的本质
- 亚马逊全面发力AI,推机器学习托管服务、四项新工具,还有AI硬件
- Android开发 Facebook取得key-hashes
- Jquery简单幻灯片
- Linux进程的管理与调度(四) -- Linux下的进程类别以及其创建方式
- CSS——div垂直居中及div内文字垂直居中
- 系统桌面常见问题处理
- excel设置行高和列宽
- sql语句操作(2)
- 三极管NPN在开关电路中的应用
- 线段树开4N空间证明
- 百田游戏2014笔试题——找到有序序列中某个值第一次出现的位置,并打印
- JAVA Spring 事务管理事务不回滚问题
- 【AI特训营】:柯西分布 Paddle API实现
热门文章
- 短波红外 、 近红外、中波红外、长波红外区别
- matlab 电场线公式,基于Matlab的静电场电场线和等势线(面)的数值模拟
- 根据身份证前2位判断属于哪个省
- python语言包含的错误_Python语言环境错误:不支持的语言环境设置
- 自学Java半年多,我掌握了这些技术!!!
- “营改增”真的来了 用友推解决方案让企业税负平衡
- Ubuntu14.04安装wineqq国际版出现无法输入中文的解决方法
- 首位跨界艺术圈的链游平台:链游玩家与悦尚里达成战略合作
- 【示波器专题】示波器最基本的电压测量和时间测量
- 前途一片光明的移动开发