1、案例分析
多对多映射其实就是一个双向的一对多映射,因为两边都是一对多。多对多主要是关联关系要找好,然后根据关联去查询。
由于前面的案例员工和部门一方是一对一,一方是一对多,所以不能形成多对多的条件,我重新换了一个案例——用户和角色。
一个用户可以拥有多个角色,User—>Role(一对多)。
一个角色可以赋予多个用户,Role—>User(一对多)。
这样就是形成了一个双向的一对多,从而变成了多对多,其实前面掌握了一对多就已经完全足够了,我为了再巩固一下所以继续写了个多对多的例子。数据库表如下:
对应mysql的sql脚本如下:
创建步骤分析:
User表和Role表具有多对多关系,需要使用中间表(t_user_role)关联,中间表中包含各自的主键,在中间表中是外键;
建立两个实体类:用户实体类中包含对角色的集合引用,角色实体类中包含对用户的集合引用;
建立两个Mapper接口:用户的Mapper接口和角色的Mapper接口;
建立两个配置文件:用户的配置文件和角色的配置文件;
实现功能:
查询用户时,同时得到用户所包含的角色信息;
查询角色时,同时得到角色对应的用户信息;
编写测试代码并查看运行结果,能否查询出相应的数据;
2、用户到角色的多对多查询
①、查询所有数据的sql语句
运行结果如下:
②、编写User实体类和UserMapper接口
User实体类:
UserMapper接口:
③、配置映射文件UserMapper.xml
④、编写测试类
⑤、运行结果
查询所有用户信息:
根据用户id查询用户信息:
3、角色到用户的多对多查询
①、查询所有数据的sql语句
运行结果如下:
②、编写Role实体类和RoleMapper接口
Role实体类:
RoleMapper接口:
③、配置映射文件RoleMapper.xml
④、编写测试类
⑤、运行结果
查询所有角色信息:
根据用户id查询角色信息: