(八)mybatis之多对多
一、需求分析
- 需求:查询所有用户的信息以及每个用户所属的组的信息
- 分析:一个用户可以有多个组,一个组也可以由多个用户。
- 多对多,可以设置一张中间表,该表存放的是用户表和组表的对应关系。
二、创建数据库和实体对象
User.java
- package com.shyroke.entity;
- import java.util.List;
- public class User {
- private int id;
- private String userName;
- private String passWord;
- //一个用户有多个组
- private List<Group> groupList;
//隐藏get和set方法
}
Group.java
- package com.shyroke.entity;
- import java.util.List;
- public class Group {
- private int id;
- private String group_name;
- private String group_num;
- //一个组有多个用户
- private List<User> userList;
- }
三、创建UserMapper.java接口和UserMapper.xml配置文件
UserMapper.java
- package com.shyroke.mapper;
- import java.util.List;
- import com.shyroke.entity.User;
- public interface UserMapper {
- public List<User> selectUserAndGroup();
- }
UserMapper.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.shyroke.mapper.UserMapper">
- <resultMap type="com.shyroke.entity.User" id="userMap">
- <id column="id" property="id" />
- <result column="userName" property="userName" />
- <result column="passWord" property="passWord" />
- <collection property="groupList" ofType="com.shyroke.entity.Group">
- <id column="group_id" property="id" />
- <result column="group_name" property="group_name" />
- <result column="group_num" property="group_num" />
- </collection>
- </resultMap>
- <select id="selectUserAndGroup" resultMap="userMap">
- select
- users.*,groups.*
- from
- users,groups,user_group
- where
- users.id=user_group.m_user_id
- and groups.group_id=user_group.m_group_id
- </select>
- </mapper>
四、添加mapper到总配置文件
mybatis-config.xml:
- <?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>
- <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://localhost:3306/test?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC" />
- <property name="username" value="root" />
- <property name="password" value="" />
- </dataSource>
- </environment>
- </environments>
- <mappers>
- <mapper class="com.shyroke.mapper.UserMapper"/>
- </mappers>
- </configuration>
五、测试
- package com.shyrolk.firstMybatis;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.List;
- 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 com.shyroke.entity.User;
- import com.shyroke.mapper.UserMapper;
- /**
- * Hello world!
- *
- */
- public class App {
- public static void main(String[] args) throws IOException {
- String resource = "resource/mybatis-config.xml";
- InputStream inputStream = Resources.getResourceAsStream(resource);
- SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
- SqlSession session = sessionFactory.openSession();
- UserMapper userMapper= session.getMapper(UserMapper.class);
- List<User> userList = userMapper.selectUserAndGroup();
- for(User user:userList){
- System.out.println(user.getId());
- System.out.println(user.getPassWord());
- System.out.println(user.getUserName());
- System.out.println(user.getGroupList());
- }
- }
- }
结果:
(八)mybatis之多对多的更多相关文章
- Mybatis的多对多映射
一.Mybatis的多对多映射 本例讲述使用mybatis开发过程中常见的多对多映射查询案例.只抽取关键代码和mapper文件中的关键sql和配置,详细的工程搭建和Mybatis详细的流程代码可参见& ...
- mybatis: 多对多查询[转]
加入3个包 log4j-1.2.17.jar mybatis-3.3.0.jar mysql-connector-java-5.1.8.jar log4j需要配置 log4j.properties # ...
- 5、SpringBoot+Mybatis整合------多对多
开发工具:STS 代码下载链接:https://github.com/theIndoorTrain/SpringBoot_Mybatis/tree/3baea10a3a1104bda815c20695 ...
- mybatis学习——多对一和一对多查询
首先先来说明一下数据库,数据库有两张表student表和teacher表: student表如下: teacher表如下: 两张表的关系:多个学生关联一位老师(多对一) *其中tid是外键 需要sql ...
- mybatis 14: 多对一关联查询
业务背景 根据订单id查询订单的信息,以及该订单所属的客户的基本信息(不包括该客户自己的订单信息) 两张数据表 客户表 订单表 实体类 客户实体类:Customer private Integer i ...
- 八 mybatis查询缓存(一级缓存,二级缓存)和ehcache整合
1 查询缓存 1.1 什么是查询缓存 mybatis提供查询缓存,用于减轻数据压力,提高数据库性能. mybaits提供一级缓存,和二级缓存.
- MyBatis中多对多关系的映射和查询
先说一下需求: 在页面上显示数据库中的所有图书,显示图书的同时,显示出该图书所属的类别(这里一本书可能同时属于多个类别) 创建表: 笔者这里使用 中间表 连接 图书表 和 图书类别表,图书表中 没有使 ...
- Spring+SpringMVC+MyBatis深入学习及搭建(八)——MyBatis查询缓存
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6956206.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(七)——My ...
- 【Mybatis】多对多实例
①创建数据库和表,数据库为mytest,表为users.orders和users_orders DROP TABLE IF EXISTS users; CREATE TABLE users( id I ...
随机推荐
- export命令import命令
export命令import命令 export { name1, name2, …, nameN }; export { variable1 as name1, variable2 as name2, ...
- maven报错解决
maven-resources-plugin prior to 2.4 is not supported by m2e. Use maven- resources-plugin versio < ...
- SVG-JS操作
JavaScript操作 DOM操作 如果 SVG 代码直接写在 HTML 网页之中,它就成为网页 DOM 的一部分,可以直接用 DOM 操作. <svg id="mysvg" ...
- 003-结构型-01-适配器模式(Adapter)
一.概述 将一个类的接口转换成客户期望的另一个接口.适配器模式让那些接口不兼容的类可以一起工作. 1.1.适用场景 已经存在的类,它的方法和需求不匹配时(方法结果相同或相似) 不是软件设计阶段考虑的设 ...
- myeclipse打开jsp后卡死的问题详解
myeclipse打开jsp后卡死的问题详解 1,打开 Window -> Preferences -> General -> Editors -> File Associ ...
- 服务器(三):利用github的webhooks实现自动部署
实现自动部署的关键就是利用github的webhooks,我们在github建立一个项目之后,在项目主页点击Settings,看到Webhooks点击打开可以添加一个链接,这里的意思是,github可 ...
- 123457123457#0#-----com.threeapp.renzhepaoku01----儿童跑酷游戏(忍者版)
com.threeapp.renzhepaoku01----儿童跑酷游戏(忍者版)
- PHP爬虫最全总结2-phpQuery,PHPcrawer,snoopy框架中文介绍
第一篇文章介绍了使用原生的PHP和PHP的扩展库实现了爬虫技术.本文尝试使用PHP爬虫框架来写,首先对三种爬虫技术phpQuery,PHPcrawer, snoopy进行对比,然后分析模拟浏览器行为的 ...
- 【c# 学习笔记】c#中的类
1.什么是类: 在c#中类是一种数据结构,它可以包括数据成员.函数成员(方法.属性.事件.索引器.索引符.实例构造函数.静态构造函数和析构函数.及嵌套类型). 属性是,类中字段和方法的结合体,通过定义 ...
- SMAP数据产品介绍与下载方法
1 SMAP(Soil Moisture Active and Passive)数据介绍 SMAP baseline science data products在下面的表格中展示,这些数据产品可以从两 ...