创建表

创建表对应的 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. agc033

    A题意:给你个黑白矩阵,每次黑的周围一圈会变黑,求多少次之后全黑.n <= 1000 解:BFS即可. #include <bits/stdc++.h> ; , , -, }; , ...

  2. DevCloud会员权益升级!日常领码豆,轻松换好礼!

    为了回馈每一位用户的使用和支持, 华为云DevCloud上线了会员中心, 大家在会员中心可以通过完成任务赚取码豆, 并在兑换商城兑换精美礼品. 如何通过任务获得码豆? 我们为大家准备了各种日常任务, ...

  3. js的几种继承方式

    1.原型链方式 function Super(){ this.val = 1; this.arr = [1]; } function Sub(){ // ... } Sub.prototype = n ...

  4. vw单位相关

    1.相对于视口的宽度.视口被均分为100单位的vw h1 { font-size: 8vw; } 如果视口的宽度是200mm,那么上述代码中h1元素的字号将为16mm,即(8x200)/100 2.相 ...

  5. 使用线程 Monitor.Wait() 和 Monitor.Pulse()

      Wait() 和 Pulse() 机制用于线程间交互.当在一个对象上使用Wait() 方法时,访问这个对象的线程就会一直等待直到被唤醒.Pulse() 和 PulseAll() 方法用来通知等待的 ...

  6. Shell 常用特性

       管道(|) 管道 (|): 将一个命令的输出作为另外一个命令的输入.   管道同样可以在标准输入输出和标准错误输出间做代替工作,这样一来,可以将某一个程序的输出送到另一个程序的输入,其语法如下: ...

  7. android 复制到剪切板

    The Clipboard Framework 当使用clipboard framework时,把数据放在一个剪切对象(clip object)里,然后这个对象会放在系统的剪贴板里. clip obj ...

  8. Java是如何实现跨平台的

    一.Java是如何实现跨平台的 1.我们编写的Java源码,编译后会生成一种 .class 文件,称为字节码文件 2.Java虚拟机JVM就是负责将字节码文件翻译成特定平台下的机器码然后运行.也就是说 ...

  9. 洛谷P2178 [NOI2015]品酒大会

    题目描述 一年一度的“幻影阁夏日品酒大会”隆重开幕了.大会包含品尝和趣味挑战 两个环节,分别向优胜者颁发“首席品酒家”和“首席猎手”两个奖项,吸引了众多品酒师参加. 在大会的晚餐上,调酒师 Rainb ...

  10. 【模板】LIS模板 洛谷P1091 [NOIP2004提高组]合唱队形 [2017年4月计划 动态规划11]

    以题写模板. 写了两个:n^2版本与nlogn版本 P1091 合唱队形 题目描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队 ...