创建表

创建表对应的 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. openCV图像合成

    #include <iostream> #include <opencv2/opencv.hpp> #include <opencv2/highgui/highgui.h ...

  2. Eclipse:Eclipse所有发布版本的下载地址

    官方镜像:http://eclipse.mirror.rafal.ca/technology/epp/downloads/release/ 国内镜像:http://mirrors.neusoft.ed ...

  3. Data Lake Analytics,大数据的ETL神器!

    0. Data Lake Analytics(简称DLA)介绍 数据湖(Data Lake)是时下大数据行业热门的概念:https://en.wikipedia.org/wiki/Data_lake. ...

  4. LUOGU P2939 [USACO09FEB]改造路Revamping Trails

    题意翻译 约翰一共有N)个牧场.由M条布满尘埃的小径连接.小径可 以双向通行.每天早上约翰从牧场1出发到牧场N去给奶牛检查身体. 通过每条小径都需要消耗一定的时间.约翰打算升级其中K条小径,使之成为高 ...

  5. 转var,let,const,js严格模式的详解

    最近看微信公众账号/知乎网上的文章说,现在的前端的人都注重用什么框架,一问原生js感觉都没有用到工作中.用不到的,学这些意义没有.上午我刚面试了一个前端,工作4年吧.最初是北大青鸟培训的,做后端.ne ...

  6. linux系统级别的计划任务及其扩展anacrontab

    这个是系统设置好了,清理系统垃圾或者是自动执行某些脚本的系统任务,一般我们做了解就行了,不要更改配置文件是/etc/conrtab SHELL:就是运行计划任务的解释器,默认是bash PATH:执行 ...

  7. javascript最大公约数与最小公倍数

    var a = 5 ; var b = 15 ; var min = Math.min(a,b); var max = Math.max(a,b); // for循环求最大公约数 for(var i ...

  8. Laravel(PHP)使用Swagger生成API文档不完全指南 - 基本概念和环境搭建 - 简书

    在PHPer中,很多人听说过Swagger,部分人知道Swagger是用来做API文档的,然而只有少数人真正知道怎么正确使用Swagger,因为PHP界和Swagger相关的资料实在是太少了.所以鄙人 ...

  9. 如何制作可以在 MaxCompute 上使用的 crcmod

    之前我们介绍过在 PyODPS DataFrame 中使用三方包.对于二进制包而言,MaxCompute 要求使用包名包含 cp27-cp27m 的 Wheel 包.但对于部分长时间未更新的包,例如 ...

  10. Lavavel 程序报错 MassAssignmentException in Model.php line 452: _token

    Lavarel 用类似于下面命令插入数据时候出错 Comment::create($request->all()) 错误页面截图如下: 错误原因:下面这行代码应该写到对应的Model里面,而不是 ...