MyBatis多对多映射查询

5、MyBatis 入门实例  多对多  基于xml配置

  这里我们以 users 表和 groups 表为例,一个 users 可能加入多个 groups,而一个 groups 可能包含多个 users,故构成 多对多 的关联

  ①、在数据库中建立相应的表

  users 表

  

  groups 表

  

  两者之间的关联表users_groups表

  

  ②、建立对应的实体类

  Users.java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

package many.to.many;

import java.util.Set;

public class Users {

    private int uid;

    private String uname;

    private Set<Groups> groups;

    public int getUid() {

        return uid;

    }

    public void setUid(int uid) {

        this.uid = uid;

    }

    public String getUname() {

        return uname;

    }

    public void setUname(String uname) {

        this.uname = uname;

    }

    public Set<Groups> getGroups() {

        return groups;

    }

    public void setGroups(Set<Groups> groups) {

        this.groups = groups;

    }

    @Override

    public String toString() {

        return "User [uid=" + uid + ", uname=" + uname + ", groups=" + groups + "]";

    }

     

}

    Groups.java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

package many.to.many;

import java.util.Set;

public class Groups {

    private int gid;

    private String gname;

    private Set<Users> users;

    public int getGid() {

        return gid;

    }

    public void setGid(int gid) {

        this.gid = gid;

    }

    public String getGname() {

        return gname;

    }

    public void setGname(String gname) {

        this.gname = gname;

    }

    public Set<Users> getUsers() {

        return users;

    }

    public void setUsers(Set<Users> users) {

        this.users = users;

    }

    @Override

    public String toString() {

        return "Group [gid=" + gid + ", gname=" + gname + ", users=" + users + "]";

    }

     

}

    Users_Groups.java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

package many.to.many;

public class Users_Groups {

    private Users user;

    private Groups group;

    public Users getUser() {

        return user;

    }

    public void setUser(Users user) {

        this.user = user;

    }

    public Groups getGroup() {

        return group;

    }

    public void setGroup(Groups group) {

        this.group = group;

    }

}

  ③、多对多:定义操作 sql映射文件userMapper.xml

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

<?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="many.to.many.userMapper">

    <!-- 给一个用户 id,查看该用户下的所有用户组信息 -->

    <select id="getUsers" resultMap="getGroupMap">

        select g.gid,g.gname from users_groups ug,groups g

            where ug.group_id=g.gid and ug.user_id=#{uid}

    </select>

    <resultMap type="many.to.many.Groups" id="getGroupMap">

        <id column="gid" property="gid"/>

        <result column="gname" property="gname"/>

        <collection property="users" ofType="many.to.many.Users">

            <id column="uid" property="uid"/>

        <result column="uname" property="uname"/>

        </collection>

    </resultMap>

     

</mapper>

  

  ⑤、向 mybatis-configuration.xml 配置文件中注册 userMapper.xml文件

  ⑥、编写测试类

1

2

3

4

5

6

7

8

9

//多对多:根据根据用户 id 查询所有的用户组信息

    @Test

    public void testGetGroups(){

        String statement = "many.to.many.userMapper.getUsers";

        List<Groups> listGroup = session.selectList(statement,1);

        for(Groups g : listGroup){

            System.out.println(g.toString());

        }

    }

猜你喜欢

转载自blog.csdn.net/weixin_41577923/article/details/84236833