Mybatis表关联多对多

创建表

 

 

创建表对应的 JavaBean 对象

 

package com.tanlei.newer.model;

import java.util.List;

/**
 * @author:Mr.Tan
 * @Create:2018-11-05-15-07
 **/
public class User {
    private int id;
    private String username;
    private String mobile;
    private List<Group> groups;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    public List<Group> getGroups() {
        return groups;
    }

    public void setGroups(List<Group> groups) {
        this.groups = groups;
    }
}

  


package com.tanlei.newer.model;

import java.util.List;

/**
 * @author:Mr.Tan
 * @Create:2018-11-05-15-07
 **/
public class Group {
        private int groupId;
        private String groupName;
        private List<User> users;

    public int getGroupId() {
        return groupId;
    }

    public void setGroupId(int groupId) {
        this.groupId = groupId;
    }

    public String getGroupName() {
        return groupName;
    }

    public void setGroupName(String groupName) {
        this.groupName = groupName;
    }

    public List<User> getUsers() {
        return users;
    }

    public void setUsers(List<User> users) {
        this.users = users;
    }
}

  


package com.tanlei.newer.model;

/**
 * @author:Mr.Tan
 * @Create:2018-11-05-15-08
 **/
public class UserGroup {
    private int userId;
    private int groupId;

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public int getGroupId() {
        return groupId;
    }

    public void setGroupId(int groupId) {
        this.groupId = groupId;
    }
}

  


配置文件 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC   "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeAliases>
        <typeAlias alias="User" type="com.tanlei.newer.model.User" />
        <typeAlias alias="UserGroup" type="com.tanlei.newer.model.UserGroup" />
        <typeAlias alias="Group" type="com.tanlei.newer.model.Group" />
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8" />
                <property name="username" value="root" />
                <property name="password" value="password" />
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <!-- // power by http://www.yiibai.com -->
        <mapper resource="com/tanlei/newer/model/UserMaper.xml" />
        <mapper resource="com/tanlei/newer/model/GroupMaper.xml" />
        <mapper resource="com/tanlei/newer/model/UserGroupMaper.xml" />
    </mappers>
</configuration>

  

Group.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="com.tanlei.newer.model.GroupMaper">
    <parameterMap type="Group" id="parameterGroupMap">
        <parameter property="groupId"/>
        <parameter property="groupName"/>
    </parameterMap>
    <insert id="insertGroup" parameterMap="parameterGroupMap">
		INSERT INTO 'group' (group_name)
		VALUES(#{groupName});
	</insert>

    <resultMap type="Group" id="resultGroupMap_1">
        <result property="id" column="id" />
        <result property="groupName" column="group_name" />
        <collection property="users" column="group_id"
                    select="com.tanlei.newer.model.UserGroupMaper.getUsersByGroupId" />
    </resultMap>
    <select id="getGroup" resultMap="resultGroupMap_1"
            parameterType="int">
		SELECT *
		FROM 'group'
		WHERE group_id=#{id}
	</select>
</mapper>

  


 

User.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="com.tanlei.newer.model.UserMaper">
    <parameterMap type="User" id="parameterUserMap">
        <parameter property="id"/>
        <parameter property="username"/>
        <parameter property="mobile"/>
    </parameterMap>

    <insert id="insertUser" parameterMap="parameterUserMap">
		INSERT INTO user(username,mobile)
		VALUES(#{username},#{mobile});
	</insert>

    <resultMap type="User" id="resultUser">
        <result property="id" column="group_id"/>
        <result property="name" column="name"/>
        <collection property="groups" column="id" select="com.tanlei.newer.model.UserGroupMaper.getGroupsByUserId"/>
    </resultMap>

    <select id="getUser" resultMap="resultUser" parameterType="int">
		SELECT *
		FROM user
		WHERE id=#{id}
	</select>
</mapper>

  


UserGroup.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="com.tanlei.newer.model.UserGroupMaper">
    <parameterMap type="UserGroup" id="parameterUserGroupMap">
        <parameter property="userId"/>
        <parameter property="groupId"/>
    </parameterMap>

    <insert id="insertUserGroup"  parameterMap="parameterUserGroupMap">
		INSERT INTO user_group(user_id, group_id)
		VALUES(#{userId},#{groupId})
	</insert>

    <!-- 根据一个用户组ID,查看这个用户组下的所有用户 -->
    <resultMap type="User" id="resultUserMap_2">
        <result property="id" column="id"/>
        <result property="username" column="username"/>
        <result property="mobile" column="mobile"/>
    </resultMap>

    <select id="getUsersByGroupId" resultMap="resultUserMap_2" parameterType="int">
		SELECT u.*, ug.group_id
		FROM user u, user_group ug
		WHERE u.id=ug.user_id AND ug.group_id=#{group_id}
	</select>

    <!-- 根据一个用户ID,查看这个用户所对应的组-->
    <resultMap type="Group" id="resultGroupMap_2">
        <result property="groupId" column="group_id"/>
        <result property="groupName" column="group_name"/>
    </resultMap>

    <select id="getGroupsByUserId" resultMap="resultGroupMap_2" parameterType="int">
		SELECT g.*, u.user_id
		FROM group g, user_group u
		WHERE g.group_id=u.group_id AND u.user_id=#{user_id}
	</select>
</mapper>

 

测试程序运行 

 

 
package com.tanlei.newer.test;

import com.tanlei.newer.model.*;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.Reader;
import java.util.List;

/**
 * @author:Mr.Tan
 * @Create:2018-11-07-13-14
 **/
public class UserGroup {
    public  static Reader reader;
    public  static SqlSessionFactory sqlSessionFactory;

    static {
        try {
            reader= Resources.getResourceAsReader("config/UGP.xml");
            sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static  SqlSessionFactory getSqlSession(){
        return  sqlSessionFactory;
    }

    public static void main(String[] args) {
         //添加一个组织
        //testAddGroup();
        //添加一个用户
        //testAddUser();
        //添加一个用户和组织
        //testAddUserGroup();
        //根据组织id查询用户信息
        //testGetGroupAndUsers();
        //根据用户id查询对应的组织
        //getGroupsByUserId();
    }

    private static void getGroupsByUserId() {
        SqlSession session=sqlSessionFactory.openSession();
        try {
            //通过接口类
            UserGroupMapper userGroupMapper=session.getMapper(UserGroupMapper.class);
            //调用接口类的添加方法
            List<Group> groups=userGroupMapper.getGroupsByUserId(1);
            for(Group group:groups){
                System.out.println(group.getGroupName());
                System.out.println(group.getGroupId());
            }
            //提交会话
            session.commit();
        }finally {
            //关闭会话
            session.close();
        }
    }

    private static void testGetGroupAndUsers() {
        SqlSession session=sqlSessionFactory.openSession();
        try {
            //通过接口类
            UserGroupMapper userGroupMapper=session.getMapper(UserGroupMapper.class);
            //调用接口类的添加方法
            List<User> users=userGroupMapper.getUsersByGroupId(1);
            for(User user:users){
                System.out.println(user.getUsername());
                System.out.println(user.getMobile());
                System.out.println(user.getId());
            }
            //提交会话
            session.commit();
        }finally {
            //关闭会话
            session.close();
        }
    }


    public static  void testAddUserGroup(){
        SqlSession session=sqlSessionFactory.openSession();
        try {
            UserGroups usergroup=new UserGroups();
            usergroup.setUserId(2);
            usergroup.setGroupId(2);
            //通过接口类
            UserGroupMapper userGroupMapper=session.getMapper(UserGroupMapper.class);
            //调用接口类的添加方法
            userGroupMapper.insertUserGroup(usergroup);
            //提交会话
            session.commit();
        }finally {
            //关闭会话
            session.close();
        }
    }

    public static  void testAddUser(){
        SqlSession session=sqlSessionFactory.openSession();
        try {
           User user=new User();
            user.setUsername("User-name-1");
            user.setMobile("13838009988");
            //通过接口类
            UserMapper userMapper=session.getMapper(UserMapper.class);
            //调用接口类的添加方法
            userMapper.insertUser(user);
            //提交会话
            session.commit();
        }finally {
            //关闭会话
            session.close();
        }
    }
    public static  void testAddGroup(){
        SqlSession session=sqlSessionFactory.openSession();
        try {
            Group  group=new Group();
            group.setGroupName("用户组-1");
            //通过接口类
            GroupMaper groupMaper=session.getMapper(GroupMaper.class);
            //调用接口类的添加方法
            groupMaper.insertGroup(group);
            //提交会话
            session.commit();
            System.out.println(group.getGroupId());
            //返回一个组织信息
            System.out.println(groupMaper.getGroup(2));
        }finally {
            //关闭会话
            session.close();
        }
    }


}

 


 

posted @ 2018-11-07 14:40  言西早石头侠  阅读(320)  评论(0编辑  收藏  举报