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();
}
} }
Mybatis表关联多对多的更多相关文章
- Mybatis表关联多对一
在上章的 一对多 中,我们已经学习如何在 Mybatis 中关联多表,但在实际项目中也是经常使用 多对一 的情况,这些查询是如何处理的呢,在这一节中我们来学习它.多表映射的多对一关系要用到 mybit ...
- Mybatis表关联一对多、多对一、多对多
项目工程结构如下: 1. 搭建MyBatis框架环境 首先需要引入两个包:mybatis.jar 和 sqljdbc42.jar包 若分页需要导入两个包:pagehelper-5.1.0.jar 和 ...
- Mybatis表关联一对多
有了前面几章的基础,对一些简单的应用是可以处理的,但在实际项目中,经常是关联表的查询,比如:最常见到的多对一,一对多等.这些查询是如何处理的呢,这一讲就讲这个问题.前面几篇教程中介绍的都是单表映射的一 ...
- mybatis表关联彻底理解
1.多张表关联 三张表,用户表,主播表,关注表. 查询用户已经关注的主播的信息,那就要三张表关联起来啊.分别left join联在一起,通过id相同的连接在一起.最后where查找出最终条件. < ...
- MyBatis学习总结(三)——多表关联查询与动态SQL
在上一章中我们学习了<MyBatis学习总结(二)——MyBatis核心配置文件与输入输出映射>,这一章主要是介绍一对一关联查询.一对多关联查询与动态SQL等内容. 一.多表关联查询 表与 ...
- mybatis多表关联查询之resultMap单个对象
resultMap的n+1方式实现多表查询(多对一) 实体类 创建班级类(Clazz)和学生类(Student),并在Student中添加一个Clazz类型的属性,用于表示学生的班级信息. mappe ...
- mytabits表关联一对一(多对一?)
mytabits表关联一对一(多对一?) association联合 联合元素用来处理“一对一”的关系.需要指定映射的Java实体类的属性,属性的javaType(通常MyBatis 自己会识别).对 ...
- 三、mybatis多表关联查询和分布查询
前言 mybatis多表关联查询和懒查询,这篇文章通过一对一和一对多的实例来展示多表查询.不过需要掌握数据输出的这方面的知识.之前整理过了mybatis入门案例和mybatis数据输出,多表查询是在前 ...
- Spring+MyBatis框架中sql语句的书写,数据集的传递以及多表关联查询
在很多Java EE项目中,Spring+MyBatis框架经常被用到,项目搭建在这里不再赘述,现在要将的是如何在项目中书写,增删改查的语句,如何操作数据库,以及后台如何获取数据,如何进行关联查询,以 ...
随机推荐
- CentOS 6.5之zabbix2.2的简单部署
Zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案.(目前,官方长期维护的稳定版本有2.2和3.0) 其他常见的监控工具还有: (1)Cacti:Cacti是一 ...
- Django项目:CRM(客户关系管理系统)--54--45PerfectCRM实现账号快速重置密码
# gbacc_ajax_urls.py # ————————42PerfectCRM实现AJAX全局账号注册———————— from django.conf.urls import url fro ...
- 【笔记】LR中设置检查点
我们为什么需要在LR中设置检查点?? 我们在录制编写脚本后,通常会进行回放,如果回放通过没有错误.我们就认为脚本是正确的.那么LR怎么区分脚本是否回放正确:基本上所有脚本回放错误都是因为 404错 ...
- 珂朵莉树(ODT)笔记
珂朵莉树,又叫老司机树($Old\, Driver \, Tree$) 是一种暴力出奇迹,就怕数据不随机的数据结构. 适用 需要用线段树维护一些区间修改的信息…… 像是区间赋值(主要),区间加…… 原 ...
- LintCode刷题笔记-- Maximum Product Subarray
标签: 动态规划 描述: Find the contiguous subarray within an array (containing at least one number) which has ...
- JAVA ——int 类型除法保留两位小数
@Test public void txfloat() { // TODO 自动生成的方法存根 int a=9; int b=7; DecimalFormat df=new DecimalFormat ...
- NKOJ3485 【2015多校联训4】数据
问题描述 Mr_H 出了一道信息学竞赛题,就是给 n 个数排序.输入格式是这样的:试题有若干组数据.每组数据的第一个是一个整数 n,表示总共有 n 个数待排序:接下来 n 个整数,分别表示这n 个待排 ...
- POJ1991 NOI1999棋盘分割
棋盘分割 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 15581 Accepted: 5534 Description ...
- 函数的length属性
函数的length 属性指明函数的形参个数. length 是函数对象的一个属性值,指该函数有多少个必须要传入的参数,即形参的个数.形参的数量不包括剩余参数个数,仅包括第一个具有默认值之前的 ...
- Watering Grass (贪心,最小覆盖)
参考: https://blog.csdn.net/shuangde800/article/details/7828675 https://www.cnblogs.com/haoabcd2010/p/ ...