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>
那么此时就实现了多对多的配置关系。