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>
那麼此時就實現了多對多的配置關係。