今天我们来复习一下 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 一对一、一对多、多对多相关推荐

  1. mybatis的一对一 一对多 多对多

    mybatis的一对一 一对多 多对多 1.表 2.建表语句 order_t表 CREATE TABLE `order_t` ( `id` int(11) NOT NULL, `user_id` in ...

  2. 7. MyBatis多表查询 - 一对一 - 一对多 - 多对多

    7. MyBatis多表查询 - 一对一 - 一对多 - 多对多 前言 在前面的篇章,我们已经熟悉了单表查询,下面我们来看看如何进行 多表查询. 数据准备 create database if not ...

  3. SQLAlchemy_定义(一对一/一对多/多对多)关系

    SQLAlchemy_定义(一对一/一对多/多对多)关系 目录 Basic Relationship Patterns One To Many One To One Many To Many Basi ...

  4. Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作

    Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作,单表查询,多表查询 一丶表与表之间的关系 背景: ​ ​ ​  ​ ​ 由于如果只使用一张表存储所有的数据,就会操作数 ...

  5. day 69-70 一对一 一对多 多对一联表查询

    day 69 orm操作之表关系,多对多,多对一多对一/一对多,多对多{类中的定义方法}day691. 昨日内容回顾1. 单表增删改查2. 单表查询API返回QuerySet对象的:1. .all() ...

  6. JPA 一对一 一对多 多对一 多对多配置

    1 JPA概述 1.1 JPA是什么 JPA (Java Persistence API) Java持久化API.是一套Sun公司 Java官方制定的ORM 方案,是规范,是标准 ,sun公司自己并没 ...

  7. Django一对一 ,一对多,多对多

    Django 数据库一对多,多对多 目录 app01/models.py app01/views.py app01/urls.py Python_Django/urls.py 目录 app01/mod ...

  8. Mybatis中的关系映射(一对一,一对多,多对多)

    在网上寻了很久,大多数讲关系性的文章都是大篇幅的去将表照搬上来,本来就很生硬,此文就不在讲述关系性映射的具体实现,转而从浅层来讲讲其概念性. 1.1 关联关系概述 在关系型数据库中,多表之间存在着三种 ...

  9. JAVA日记之mybatis-3一对一,一对多,多对多xml与注解配置 ----喝最烈的酒.

    1.Mybatis多表查询 1.1 一对一查询 1.1.1 一对一查询的模型 用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户 一对一查询的需求:查询一个订单,与此同时查询出该订单 ...

  10. 初学者易上手的SSH-hibernate04 一对一 一对多 多对多

    这章我们就来学习下hibernate的关系关联,即一对一(one-to-one),一对多(one-to-many),多对多(many-to-many).这章也将是hibernate的最后一章了,用于初 ...

最新文章

  1. 2018-3-5(论文——网络中非结构信息的表示与应用)笔记二 (歧义词,未登录词,禁用词)
  2. python函数的用法详解(作用、定义、调用、函数参数、函数返回值、函数说明文档、函数嵌套使用)
  3. android世界时钟代码大全,世界时钟精美时钟代码
  4. row height
  5. Scala比较器:Ordered与Ordering
  6. 这不应该是19岁女孩的结局,这不应该是围观者该有的表达!
  7. 11产品经理要懂的-人性行为之善良友好的本质
  8. 亚马逊全面发力AI,推机器学习托管服务、四项新工具,还有AI硬件
  9. Android开发 Facebook取得key-hashes
  10. Jquery简单幻灯片
  11. Linux进程的管理与调度(四) -- Linux下的进程类别以及其创建方式
  12. CSS——div垂直居中及div内文字垂直居中
  13. 系统桌面常见问题处理
  14. excel设置行高和列宽
  15. sql语句操作(2)
  16. 三极管NPN在开关电路中的应用
  17. 线段树开4N空间证明
  18. 百田游戏2014笔试题——找到有序序列中某个值第一次出现的位置,并打印
  19. JAVA Spring 事务管理事务不回滚问题
  20. 【AI特训营】:柯西分布 Paddle API实现

热门文章

  1. 短波红外 、 近红外、中波红外、长波红外区别
  2. matlab 电场线公式,基于Matlab的静电场电场线和等势线(面)的数值模拟
  3. 根据身份证前2位判断属于哪个省
  4. python语言包含的错误_Python语言环境错误:不支持的语言环境设置
  5. 自学Java半年多,我掌握了这些技术!!!
  6. “营改增”真的来了 用友推解决方案让企业税负平衡
  7. Ubuntu14.04安装wineqq国际版出现无法输入中文的解决方法
  8. 首位跨界艺术圈的链游平台:链游玩家与悦尚里达成战略合作
  9. 【示波器专题】示波器最基本的电压测量和时间测量
  10. 前途一片光明的移动开发