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(); } } }