5、MyBatis 入门实例 多对多 基于xml配置
这里我们以 users 表和 groups 表为例,一个 users 可能加入多个 groups,而一个 groups 可能包含多个 users,故构成 多对多 的关联
①、在数据库中建立相应的表
users 表
groups 表
两者之间的关联表users_groups表
②、建立对应的实体类
Users.java
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
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
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
<?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文件
⑥、编写测试类
//多对多:根据根据用户 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());
}
}