一、需求分析

  • 需求:查询所有用户的信息以及每个用户所属的组的信息
  • 分析:一个用户可以有多个组,一个组也可以由多个用户。
  • 多对多,可以设置一张中间表,该表存放的是用户表和组表的对应关系。

二、创建数据库和实体对象

User.java

  1. package com.shyroke.entity;
  2.  
  3. import java.util.List;
  4.  
  5. public class User {
  6. private int id;
  7. private String userName;
  8. private String passWord;
  9.  
  10. //一个用户有多个组
  11. private List<Group> groupList;
    //隐藏get和set方法

Group.java

  1. package com.shyroke.entity;
  2.  
  3. import java.util.List;
  4.  
  5. public class Group {
  6. private int id;
  7. private String group_name;
  8. private String group_num;
  9.  
  10. //一个组有多个用户
  11. private List<User> userList;
  12.  
  13. }

三、创建UserMapper.java接口和UserMapper.xml配置文件

UserMapper.java

  1. package com.shyroke.mapper;
  2.  
  3. import java.util.List;
  4.  
  5. import com.shyroke.entity.User;
  6.  
  7. public interface UserMapper {
  8. public List<User> selectUserAndGroup();
  9. }

UserMapper.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.shyroke.mapper.UserMapper">
  6.  
  7. <resultMap type="com.shyroke.entity.User" id="userMap">
  8. <id column="id" property="id" />
  9. <result column="userName" property="userName" />
  10. <result column="passWord" property="passWord" />
  11. <collection property="groupList" ofType="com.shyroke.entity.Group">
  12. <id column="group_id" property="id" />
  13. <result column="group_name" property="group_name" />
  14. <result column="group_num" property="group_num" />
  15. </collection>
  16. </resultMap>
  17.  
  18. <select id="selectUserAndGroup" resultMap="userMap">
  19. select
  20. users.*,groups.*
  21. from
  22. users,groups,user_group
  23. where
  24. users.id=user_group.m_user_id
  25. and groups.group_id=user_group.m_group_id
  26.  
  27. </select>
  28. </mapper>

四、添加mapper到总配置文件

mybatis-config.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
  3. <configuration>
  4. <environments default="development">
  5. <environment id="development">
  6. <transactionManager type="JDBC" />
  7. <!-- 配置数据库连接信息 -->
  8. <dataSource type="POOLED">
  9. <property name="driver" value="com.mysql.jdbc.Driver" />
  10. <property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;useJDBCCompliantTimezoneShift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC" />
  11. <property name="username" value="root" />
  12. <property name="password" value="" />
  13. </dataSource>
  14. </environment>
  15. </environments>
  16.  
  17. <mappers>
  18. <mapper class="com.shyroke.mapper.UserMapper"/>
  19. </mappers>
  20.  
  21. </configuration>

五、测试

  1. package com.shyrolk.firstMybatis;
  2.  
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.util.List;
  6.  
  7. import org.apache.ibatis.io.Resources;
  8. import org.apache.ibatis.session.SqlSession;
  9. import org.apache.ibatis.session.SqlSessionFactory;
  10. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  11.  
  12. import com.shyroke.entity.User;
  13. import com.shyroke.mapper.UserMapper;
  14.  
  15. /**
  16. * Hello world!
  17. *
  18. */
  19. public class App {
  20. public static void main(String[] args) throws IOException {
  21. String resource = "resource/mybatis-config.xml";
  22. InputStream inputStream = Resources.getResourceAsStream(resource);
  23. SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  24.  
  25. SqlSession session = sessionFactory.openSession();
  26.  
  27. UserMapper userMapper= session.getMapper(UserMapper.class);
  28. List<User> userList = userMapper.selectUserAndGroup();
  29.  
  30. for(User user:userList){
  31.  
  32. System.out.println(user.getId());
  33. System.out.println(user.getPassWord());
  34. System.out.println(user.getUserName());
  35. System.out.println(user.getGroupList());
  36. }
  37.  
  38. }
  39. }

结果:

(八)mybatis之多对多的更多相关文章

  1. Mybatis的多对多映射

    一.Mybatis的多对多映射 本例讲述使用mybatis开发过程中常见的多对多映射查询案例.只抽取关键代码和mapper文件中的关键sql和配置,详细的工程搭建和Mybatis详细的流程代码可参见& ...

  2. mybatis: 多对多查询[转]

    加入3个包 log4j-1.2.17.jar mybatis-3.3.0.jar mysql-connector-java-5.1.8.jar log4j需要配置 log4j.properties # ...

  3. 5、SpringBoot+Mybatis整合------多对多

    开发工具:STS 代码下载链接:https://github.com/theIndoorTrain/SpringBoot_Mybatis/tree/3baea10a3a1104bda815c20695 ...

  4. mybatis学习——多对一和一对多查询

    首先先来说明一下数据库,数据库有两张表student表和teacher表: student表如下: teacher表如下: 两张表的关系:多个学生关联一位老师(多对一) *其中tid是外键 需要sql ...

  5. mybatis 14: 多对一关联查询

    业务背景 根据订单id查询订单的信息,以及该订单所属的客户的基本信息(不包括该客户自己的订单信息) 两张数据表 客户表 订单表 实体类 客户实体类:Customer private Integer i ...

  6. 八 mybatis查询缓存(一级缓存,二级缓存)和ehcache整合

    1       查询缓存 1.1     什么是查询缓存 mybatis提供查询缓存,用于减轻数据压力,提高数据库性能. mybaits提供一级缓存,和二级缓存.

  7. MyBatis中多对多关系的映射和查询

    先说一下需求: 在页面上显示数据库中的所有图书,显示图书的同时,显示出该图书所属的类别(这里一本书可能同时属于多个类别) 创建表: 笔者这里使用 中间表 连接 图书表 和 图书类别表,图书表中 没有使 ...

  8. Spring+SpringMVC+MyBatis深入学习及搭建(八)——MyBatis查询缓存

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6956206.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(七)——My ...

  9. 【Mybatis】多对多实例

    ①创建数据库和表,数据库为mytest,表为users.orders和users_orders DROP TABLE IF EXISTS users; CREATE TABLE users( id I ...

随机推荐

  1. export命令import命令

    export命令import命令 export { name1, name2, …, nameN }; export { variable1 as name1, variable2 as name2, ...

  2. maven报错解决

    maven-resources-plugin prior to 2.4 is not supported by m2e. Use maven-  resources-plugin versio < ...

  3. SVG-JS操作

    JavaScript操作 DOM操作 如果 SVG 代码直接写在 HTML 网页之中,它就成为网页 DOM 的一部分,可以直接用 DOM 操作. <svg id="mysvg" ...

  4. 003-结构型-01-适配器模式(Adapter)

    一.概述 将一个类的接口转换成客户期望的另一个接口.适配器模式让那些接口不兼容的类可以一起工作. 1.1.适用场景 已经存在的类,它的方法和需求不匹配时(方法结果相同或相似) 不是软件设计阶段考虑的设 ...

  5. myeclipse打开jsp后卡死的问题详解

    myeclipse打开jsp后卡死的问题详解   1,打开 Window -> Preferences -> General -> Editors -> File Associ ...

  6. 服务器(三):利用github的webhooks实现自动部署

    实现自动部署的关键就是利用github的webhooks,我们在github建立一个项目之后,在项目主页点击Settings,看到Webhooks点击打开可以添加一个链接,这里的意思是,github可 ...

  7. 123457123457#0#-----com.threeapp.renzhepaoku01----儿童跑酷游戏(忍者版)

    com.threeapp.renzhepaoku01----儿童跑酷游戏(忍者版)

  8. PHP爬虫最全总结2-phpQuery,PHPcrawer,snoopy框架中文介绍

    第一篇文章介绍了使用原生的PHP和PHP的扩展库实现了爬虫技术.本文尝试使用PHP爬虫框架来写,首先对三种爬虫技术phpQuery,PHPcrawer, snoopy进行对比,然后分析模拟浏览器行为的 ...

  9. 【c# 学习笔记】c#中的类

    1.什么是类: 在c#中类是一种数据结构,它可以包括数据成员.函数成员(方法.属性.事件.索引器.索引符.实例构造函数.静态构造函数和析构函数.及嵌套类型). 属性是,类中字段和方法的结合体,通过定义 ...

  10. SMAP数据产品介绍与下载方法

    1 SMAP(Soil Moisture Active and Passive)数据介绍 SMAP baseline science data products在下面的表格中展示,这些数据产品可以从两 ...