MyBatis多对多关系映射

来源:互联网 发布:域名有什么作用 编辑:程序博客网 时间:2024/06/06 10:43

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>
那么此时就实现了多对多的配置关系。
0 0
原创粉丝点击