Mybatis多表查询

一对一查询

一对一查询的模型MapperScannerConfigurer

用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户

创建Order和User实体
public class Order {private int id;private Date ordertime;private double total;//代表当前订单从属于哪一个客户private User user;
}public class User {private int id;private String username;private String password;private Date birthday;}
创建接口
public interface OrderMapper {List<Order> findAll();
}
配置OrderMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.controller.OrderMapper">
<resultMap id="orderMap" type="com.model.Order"><result column="id" property="id" /><result column="ordertime" property="ordertime"/><result column="total" property="total"/><association property="user" javaType="com.model.User"><result column="uid" property="id"/><result column="username" property="username"/><result column="password" property="password"/><result column="birthday" property="birthday"/></association>
</resultMap><select id="findAll" resultMap="orderMap">select * from  orders o,user u where o.uid=u.id</select>
</mapper>
测试结果
    @Testpublic void tset4() {InputStream resourceAsStream = null;try {resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");} catch (IOException ioException) {ioException.printStackTrace();}SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = sqlSessionFactory.openSession(true);OrderMapper mapper = sqlSession.getMapper(OrderMapper.class);List<Order> all = mapper.findAll();System.out.println(all);}

一对多查询

一对多查询的模型

用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户

一对多查询的需求:查询一个用户,与此同时查询出该用户具有的订单

1.2.3 修改User实体
public class Order {private int id;private Date ordertime;private double total;//代表当前订单从属于哪一个客户private User user;
}public class User {private int id;private String username;private String password;private Date birthday;//代表当前用户具备哪些订单private List<Order> orderList;
}
创建UserMapper接口
public interface UserMapper {List<User> findAll();
}
配置UserMapper.xml
    <resultMap id="userMap" type="com.model.User"><result column="username" property="username" /><result column="password" property="password"/><result column="id" property="id"/><result column="birthday" property="birthday"/><collection property="orderList" ofType="com.model.Order"><result property="id" column="oid"/><result property="ordertime" column="ordertime"/><result property="total" column="total"/></collection></resultMap><select id="findAll" resultMap="userMap">select * ,o.id oid from  user u left join  orders o on u.id=o.uid</select>
测试结果
    @Testpublic void tset4() {InputStream resourceAsStream = null;try {resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");} catch (IOException ioException) {ioException.printStackTrace();}SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = sqlSessionFactory.openSession(true);userMapper mapper = sqlSession.getMapper(userMapper.class);List<User> all = mapper.findAll();System.out.println(all);}

多对多查询

多对多查询的模型

用户表和角色表的关系为,一个用户有多个角色,一个角色被多个用户使用

多对多查询的需求:查询用户同时查询出该用户的所有角色

创建Role实体,修改User实体
public class User {private int id;private String username;private String password;private Date birthday;//代表当前用户具备哪些订单private List<Order> orderList;//代表当前用户具备哪些角色private List<Role> roleList;
}public class Role {private int id;private String rolename;}
添加UserMapper接口方法
List<User> findAllUserAndRole();
配置UserMapper.xml
    <resultMap id="roleMap" type="com.model.User"><result column="username" property="username" /><result column="password" property="password"/><result column="id" property="id"/><result column="birthday" property="birthday"/><collection property="roleList" ofType="com.model.Role"><result property="id" column="rid"/><result property="rolename" column="rolename"/></collection></resultMap><select id="findAllUserAndRole" resultMap="roleMap">select u.*,r.id rid,r.* from user u left join  sys_user_role ur on u.id=ur.userid inner join  sys_role r on r.id=ur.roleid</select>
测试结果
    @Testpublic void tset4() {InputStream resourceAsStream = null;try {resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");} catch (IOException ioException) {ioException.printStackTrace();}SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = sqlSessionFactory.openSession(true);userMapper mapper = sqlSession.getMapper(userMapper.class);List<User> all = mapper.findAllUserAndRole();System.out.println(all);}

Mybatis—多表查询相关推荐

  1. MyBatis多表查询之XML和注解实现(resultMap结果集映射配置数据库字段与实体类属性一一映射)

    MyBatis多表查询 多表模型分类 一对一:在任意一方建立外键,关联对方的主键. 一对多:在多的一方建立外键,关联一的一方的主键. 多对多:借助中间表,中间表至少两个字段,分别关联两张表的主键. 数 ...

  2. java day55【 Mybatis 连接池与事务深入 、 Mybatis 的动态 SQL 语句、 Mybatis 多表查询之一对多 、 Mybatis 多表查询之多对多】...

    第1章 Mybatis 连接池与事务深入 1.1 Mybatis 的连接池技术 1.1.1 Mybatis 连接池的分类 1.1.2 Mybatis 中数据源的配置 1.1.3 Mybatis 中 D ...

  3. mybatis多表查询(一对多,多对一,多对多)

    mybatis多表查询.多对一,一对多,多对多 多对一.一对多 准备阶段 建立dept实体类和emp实体类 建立Dao接口 写Dao的Mapper映射 多对多 多对一.一对多 准备阶段 建立一个部门表 ...

  4. 7. MyBatis多表查询 - 一对一 - 一对多 - 多对多

    7. MyBatis多表查询 - 一对一 - 一对多 - 多对多 前言 在前面的篇章,我们已经熟悉了单表查询,下面我们来看看如何进行 多表查询. 数据准备 create database if not ...

  5. Mybatis多表查询之一对多、多对一

    目录 前言 一.建立数据库 二.多对一查询 2.1 编写实体类 2.2 编写接口 2.3 编写Mapper配置文件 (StudentMapper.xml) 2.4 多对一查询结果 三.一对多查询 3. ...

  6. mybatis联表查询且统计数据

    mybatis联表查询且统计数据 表1的数据+表2的数据的统计==>vo接收 前端原型图如下: 涉及到两张表 t_record t_user_record 详情A/B A:未签收人数 B:全部人 ...

  7. 7.Mybatis关联表查询(这里主要讲的是一对一和一对多的关联查询)

    视频地址:http://edu.51cto.com/sd/be679 在Mybatis中的管理表查询这里主要介绍的是一对一和一对多的关联查询的resultMap的管理配置查询,当然你也可以用包装类来实 ...

  8. Mybatis学习笔记 4:Mybatis 连表查询(一)——一对多关系

    完整代码在这 在查询数据库时,我们经常会遇到多张表联合查询的情况,而Mybatis使连表查询更加简便了,查询出的数据格式非常易于使用,省去了一大部分复杂的代码编写工作,对于关系型数据库来说,数据模型之 ...

  9. mybatis多表查询出来的实体如何映射_mybatis进阶案例之多表查询

    mybatis进阶案例之多表查询 一.mybatis中表之间的关系 在数据库中,实体型之间的关系主要有如下几种: 1.一对一 如果对于实体集A中的每一个实体,实体集B中至多有一个(也可以没有)实体与之 ...

最新文章

  1. 2016年日本信息安全市场规模分析
  2. Tony Qu的《WPF揭秘》情节
  3. 产品经理必知必会知识-竞品分析需求实战报告
  4. 没有找到合适的方法来重写_玻璃片价格太高?你可能没有找到合适的供应商
  5. 蓝桥杯练习题十六进制转十进制
  6. 腾讯开源之道:基于Apache之道的开源实践与探索
  7. 利用模板引擎配合ajax进行数据的导入
  8. java Web程序使用wro4j合并、压缩js、css等静态资源
  9. 系统学习数字图像处理之频域滤波
  10. 23. stdin, stdout, stderr
  11. 中间人攻击的实践与原理(ARP毒化、DNS欺骗)
  12. c++内存池作用和优势
  13. 什么是UI(UI百科)
  14. 希腊字母读音及其latex输入
  15. Ridge 回归和 Lasso 回归
  16. yolov5_deepsort车流量跟踪计数
  17. Maemo中如何启动应用程序。
  18. 粗读SELF-SUPERVISED LEARNING IS MORE ROBUST TO DATASET IMBALANCE
  19. PayPal开发文档整理(1)- 开发者首页
  20. Xlinx FFT IP的注意点

热门文章

  1. Makefile用法链接
  2. 【排序算法】计数排序
  3. 【大牛疯狂教学】mysqlinnodb和myisam
  4. 你知道如何用面向对象思想写好并发编程吗?
  5. 覆盖所有面试知识点,建议收藏
  6. Qt样式表之一:Qt样式表和盒子模型介绍
  7. 20101008 搬家
  8. 如何对接oracle 建立pdb
  9. Oracle【IT实验室】数据库备份与恢复之二:SQL*Loader
  10. 静态与非静态(转改)