创建表

创建表对应的 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();
}
} }

												

Mybatis表关联多对多的更多相关文章

  1. Mybatis表关联多对一

    在上章的 一对多 中,我们已经学习如何在 Mybatis 中关联多表,但在实际项目中也是经常使用 多对一 的情况,这些查询是如何处理的呢,在这一节中我们来学习它.多表映射的多对一关系要用到 mybit ...

  2. Mybatis表关联一对多、多对一、多对多

    项目工程结构如下: 1. 搭建MyBatis框架环境 首先需要引入两个包:mybatis.jar 和 sqljdbc42.jar包 若分页需要导入两个包:pagehelper-5.1.0.jar 和 ...

  3. Mybatis表关联一对多

    有了前面几章的基础,对一些简单的应用是可以处理的,但在实际项目中,经常是关联表的查询,比如:最常见到的多对一,一对多等.这些查询是如何处理的呢,这一讲就讲这个问题.前面几篇教程中介绍的都是单表映射的一 ...

  4. mybatis表关联彻底理解

    1.多张表关联 三张表,用户表,主播表,关注表. 查询用户已经关注的主播的信息,那就要三张表关联起来啊.分别left join联在一起,通过id相同的连接在一起.最后where查找出最终条件. < ...

  5. MyBatis学习总结(三)——多表关联查询与动态SQL

    在上一章中我们学习了<MyBatis学习总结(二)——MyBatis核心配置文件与输入输出映射>,这一章主要是介绍一对一关联查询.一对多关联查询与动态SQL等内容. 一.多表关联查询 表与 ...

  6. mybatis多表关联查询之resultMap单个对象

    resultMap的n+1方式实现多表查询(多对一) 实体类 创建班级类(Clazz)和学生类(Student),并在Student中添加一个Clazz类型的属性,用于表示学生的班级信息. mappe ...

  7. mytabits表关联一对一(多对一?)

    mytabits表关联一对一(多对一?) association联合 联合元素用来处理“一对一”的关系.需要指定映射的Java实体类的属性,属性的javaType(通常MyBatis 自己会识别).对 ...

  8. 三、mybatis多表关联查询和分布查询

    前言 mybatis多表关联查询和懒查询,这篇文章通过一对一和一对多的实例来展示多表查询.不过需要掌握数据输出的这方面的知识.之前整理过了mybatis入门案例和mybatis数据输出,多表查询是在前 ...

  9. Spring+MyBatis框架中sql语句的书写,数据集的传递以及多表关联查询

    在很多Java EE项目中,Spring+MyBatis框架经常被用到,项目搭建在这里不再赘述,现在要将的是如何在项目中书写,增删改查的语句,如何操作数据库,以及后台如何获取数据,如何进行关联查询,以 ...

随机推荐

  1. [Array]283. Move Zeroes

    Given an array nums, write a function to move all 0's to the end of it while maintaining the relativ ...

  2. Django项目:CRM(客户关系管理系统)--30--22PerfectCRM实现King_admin数据添加

    登陆密码设置参考 http://www.cnblogs.com/ujq3/p/8553784.html # king_urls.py # ————————02PerfectCRM创建ADMIN页面—— ...

  3. 读书笔记--Apache.Tomcat.6高级编程 目录

    1.Apache Tomcat 2.web的应用:Servlet.JSP及其他 3.Tomcat安装 4.Tomcat架构 5.Tomcat基本配置 6.高级Tomcat特性 7.Web应用程序配置 ...

  4. 关于 LVM

    [名词解释] 1. PV(Physical Volume):物理卷,处于LVM最底层,可以是物理硬盘或者分区.     2.PP(Physical Extend):物理区域,PV中可以用于分配的最小存 ...

  5. 学习JDK1.8集合源码之--ArrayDeque

    1. ArrayDeque简介 ArrayDeque是基于数组实现的一种双端队列,既可以当成普通的队列用(先进先出),也可以当成栈来用(后进先出),故ArrayDeque完全可以代替Stack,Arr ...

  6. List的深度序列化Demo

    今天项目中出现了这个问题...就是使用一个List去进行其他的操作,生成一个新的List.但是却将原来的List的值也给改了...这应该是引用传递的问题,查了资料发现这是浅拷贝造成的.(ps:使用ad ...

  7. 洛谷P2723 丑数 Humble Numbers [2017年 6月计划 数论07]

    P2723 丑数 Humble Numbers 题目背景 对于一给定的素数集合 S = {p1, p2, ..., pK},考虑一个正整数集合,该集合中任一元素的质因数全部属于S.这个正整数集合包括, ...

  8. DLedger —基于 raft 协议的 commitlog 存储库

    “点击获取上云帮助文档” 尊敬的阿里云用户: 您好!为方便您试用开源 RocketMQ 客户端访问阿里云MQ,我们申请了专门的优惠券,优惠券可以直接抵扣金额.请填写下您公司账号信息,点击上图,了解更多 ...

  9. web前端学习(三)css学习笔记部分(3)-- css常用操作

    5.  CSS常用操作 5.1  对齐 使用margin属性进行水平对齐 <!DOCTYPE html> <html lang="en"> <head ...

  10. 如何正确的在Android中存储特定应用文件

    原文地址:How to Correctly Store App-Specific Files in Android Christophe Versieux (Waza_be)发表了一篇rant abo ...