1、使用的数据脚本为:

DROP DATABASE IF EXISTS mybatisdb ;
CREATE DATABASE mybatisdb CHARACTER SET UTF8 ;
USE mybatisdb ;
-- 创建数据表
CREATE TABLE role (rid         INT AUTO_INCREMENT ,title       VARCHAR(50) ,CONSTRAINT pk_rid PRIMARY KEY(rid)
) ;
CREATE TABLE groups (gid     INT AUTO_INCREMENT ,title       VARCHAR(50) ,CONSTRAINT pk_gid PRIMARY KEY(gid)
) ;
CREATE TABLE role_groups(rid         INT ,gid         INT ,CONSTRAINT fk_rid FOREIGN KEY(rid) REFERENCES role(rid) ON DELETE CASCADE ,CONSTRAINT fk_gid FOREIGN KEY(gid) REFERENCES groups(gid) ON DELETE CASCADE
) ;
INSERT INTO role(title) VALUES ('超级管理员') ;
INSERT INTO groups(title) VALUES ('人事管理') ;
INSERT INTO groups(title) VALUES ('任务管理') ;
INSERT INTO groups(title) VALUES ('商品采购') ;
INSERT INTO groups(title) VALUES ('商品检修') ;
INSERT INTO groups(title) VALUES ('后勤保障') ;
INSERT INTO groups(title) VALUES ('财务管理') ;
INSERT INTO role_groups(rid,gid) VALUES (1,1) ;
INSERT INTO role_groups(rid,gid) VALUES (1,2) ;

2、准备好对应的vo类

public class Role implements Serializable { private Integer rid ; private String title ; private List<Groups> allGroups ;
}
public class Groups implements Serializable { private Integer gid ; private String title ; private List<Role> allRoles ;
}
public class RoleGroupsLink implements Serializable { private Role role ; private Groups groups ;
}
//省略set和get方法

3、准备MyBatis需要的配置文件;
①创建Type.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="vo.mapping.RoleNS"><resultMap type="Type" id="TypeMap"> <id property="tid" column="tild"/> <result property="title" column="title"/> </resultMap>
</mapper>

②创建MemberDetails.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="vo.mapping.GroupsNS"><resultMap type="Subtype" id="SubtypeMap"> <id property="stid" column="stid"/> <result property="title" column="title"/> </resultMap>
</mapper>

③定义操作别名和映射路径

<typeAliases> <typeAlias type="cn.mldn.vo.Role" alias="Role"/> <typeAlias type="cn.mldn.vo.Groups" alias="Groups"/> <typeAlias type="cn.mldn.vo.RoleGroupsLink" alias="RoleGroupsLink"/>
</typeAliases>
<mapper namespace="vo/mapping/Role"/>
<mapper resource="vo/mapping/Groups.xml" />

4、在Mybatis里面针对于这些数据的级联操作查询控制,一定要通过resultMap完成。
· 在Role.xml文件里面定义resultMap:

<resultMap type="Role" id="RoleMap"> <id property="rid" column="rid"/> <result property="title" column="title"/> <collection property="allGroups" javaType="java.util.List" ofType="Groups" select="vo.mapping.GroupsNS.findAllByRole" column="rid"/>
</resultMap>
<select id="findById" parameterType="Integer" resultMap="RoleMap"> SELECT rid,title FROM role WHERE rid=#{rid}
</select>
在Groups.xml文件里面定义resultMap:
<resultMap type="Groups" id="GroupsMap"> <id property="gid" column="gid"/> <result property="title" column="title"/>
</resultMap>
<select id="findAllByRole" parameterType="integer" resultMap="GroupsMap"> SELECT gid,title FROM groups WHERE gid IN ( SELECT gid FROM role_groups WHERE rid=#{rid})
</select>
那么此时就实现了多对多的配置关系。

MyBatis多对多关系映射相关推荐

  1. SpringDataJpa的使用 -- 一对一、一对多、多对多 关系映射

    SpringDataJpa的使用 – 一对一.一对多.多对多 关系映射 本文主要讲述 @OneToOne.@OneToMany.@ManyToOne.@ManyToMany 这四个关系映射注解的使用, ...

  2. Spring Boot 入门系列(二十八) JPA 的实体映射关系,一对一,一对多,多对多关系映射!...

    前面讲了Spring Boot 使用 JPA,实现JPA 的增.删.改.查的功能,同时也介绍了JPA的一些查询,自定义SQL查询等使用.JPA使用非常简单,功能非常强大的ORM框架,无需任何数据访问层 ...

  3. (经典)Hibernate多对一关系映射(四)

    多对一关系主要应用在添加,修改,列表上,删除功能用不到多对一关系.(实际开发中多对一的应用较多) 例:这里多加入一张新闻类型表,完成新闻的分类功能. 在新闻表中多加入一个分类的字段,表示该新闻属于某一 ...

  4. (经典)Hibernate多对多关系映射(五)

    多对多关系是产生在三张表的关系中的,必须有一张中间表,必须保证中间表只有两个字段,必须是复合主键,必须是另两张表的外键. 一.用多对多关系来设计类 例如:学生选课 这里只创建学生和课程类,中间表不生成 ...

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

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

  6. hibernate中多对多关系映射时的xml文件

    2019独角兽企业重金招聘Python工程师标准>>> <?xml version="1.0" encoding="UTF-8"?> ...

  7. MyBatis一对多关系映射

    1.使用的数据脚本为: DROP DATABASE IF EXISTS mybatisdb ; CREATE DATABASE mybatisdb CHARACTER SET UTF8 ; USE m ...

  8. Hibernate一对多/多对一关系映射详解及相应的增删查改操作

    以客户与订单的关系为例 1.在实体模型类中绑定两者关系: 客户类: public class Customer {private Integer id;//客户idprivate String nam ...

  9. MyBatis 多对多关联映射

    示例[通过班级查询老师信息] 创建t_classes 创建t_classessTeacher 创建t_teacher 创建Classes package com.po; import java.uti ...

最新文章

  1. Nativefier 网页转桌面程序 app
  2. Hadoop集群搭建及MapReduce应用
  3. opencv copyto函数
  4. zend studio配置mysql_Zend studio for eclipse中使php可以调用mysql相关函数的设置方法
  5. linux如何加载镜像,linux可以加载iso镜像文件到启动项吗
  6. python-双层嵌套循环-打印小星星
  7. 并发编程(十四)—— ScheduledThreadPoolExecutor 实现原理与源码深度解析 之DelayWorkQueue...
  8. 分布式系统统一登录的实现
  9. Python实现问卷星表单机刷
  10. jQuery获取兄弟元素
  11. 服务启动类型:自动、自动(延时启动)、手动、禁用
  12. 宽带连接错误 651
  13. QT编写USB PRINTER驱动
  14. 3D软件中怎么绘制杯子?
  15. 高校圆桌派-第二期直播预告
  16. 英语高考计算机阅读答案解析,2021考研英语一阅读理解试题及答案解析(中公考研版)...
  17. 报错 -Uncaught ReferenceError: axios is not defined
  18. Flutter基础-(3)Widget之文本Text
  19. 讯飞董事长刘庆峰:人工智能是数字经济发展最核心的引擎
  20. orbslam2可视化_[Ubuntu] ORB SLAM2 编译调试

热门文章

  1. 【kong系列九】之限流rate-limiting插件
  2. oracle中栓锁,oracle 闩锁介绍
  3. 如何做好线上活动策划及执行的思路与框架
  4. python 基于PHP在线音乐网站
  5. 用PowerPoint巧做特效字幕(转)
  6. android 11 antutu AID64 等检测软件电池容量不匹配
  7. 风控概要和内容安全,反欺诈(营销风控)
  8. uni-app 生命周期
  9. 东芝推出具备限流器检测功能的有刷直流电机驱动器IC
  10. Apache Calcite入门