1.一对一关联查询

  需求:查询出每条orders记录和其关联的user信息

在orders实体类中添加属性与set、get方法

  1. /**
  2. * 测试1对1关联查询
  3. */
  4. private User user;
  5. public User getUser() {
  6. return user;
  7. }
  8. public void setUser(User user) {
  9. this.user = user;
  10. }

接口:

  1. public interface OrdersMapper {
  2.  
  3. /**
  4. * 测试1对1关联查询
  5. */
  6. public List<Orders> findAllOrdersCNUser();
  7.  
  8. }

映射:

  1. <!-- 1对1的返回map
  2. 不能省略映射,必须把所有想要查询出来的属性都手动映射
  3. -->
  4. <resultMap type="Orders" id="orders">
  5. <id property="id" column="id"/>
  6. <result property="userId" column="user_id"/>
  7. <result property="number" column="number"/>
  8. <result property="createtime" column="createtime"/>
  9. <result property="note" column="note"/>
  10. <!-- 1对1属性 -->
  11. <!-- javaType必须写!! -->
  12. <association property="user" javaType="user">
  13. <id property="id" column="id"/>
  14. <result property="username" column="username"/>
  15. <result property="sex" column="sex"/>
  16. <result property="birthday" column="birthday"/>
  17. <result property="address" column="address"/>
  18. </association>
  19. </resultMap>
  20.  
  21. <!-- 测试一对1关联查询 -->
  22. <select id="findAllOrdersCNUser" resultMap="orders">
  23. select
  24. *
  25. from
  26. orders o left join user u
  27. on o.user_id=u.id
  28. </select>

测试:

  1. /**
  2. * 1对1关联查询
  3. */
  4. @Test
  5. public void m01() {
  6. // 获取sqlSession,和Spring整理后由Spring管理
  7. SqlSession sqlSession = this.sqlSessionFactory.openSession();
  8. // 从sqlSession中获取Mapper接口的代理对象
  9. OrdersMapper ordersMapper = sqlSession.getMapper(OrdersMapper.class);
  10.  
  11. // 执行查询
  12. List<Orders> list = ordersMapper.findAllOrdersCNUser();
  13. for (Orders orders : list) {
  14. System.out.println(orders);
  15. System.out.println(orders.getUser());
  16. }
  17.  
  18. // 和Spring整理后由Spring管理
  19. sqlSession.close();
  20. }

2.一对多关联查询

  需求:查询出所有的user和与其对应的orders信息

在user实体类中添加属性和set、get方法

  1. /**
  2. * 测试1对多
  3. */
  4. List<Orders> ordersList;
  5. public List<Orders> getOrdersList() {
  6. return ordersList;
  7. }
  8. public void setOrdersList(List<Orders> ordersList) {
  9. this.ordersList = ordersList;
  10. }

接口:

  1. /**
  2. * 测试1对多
  3. */
  4. public List<User> findAllUserCNOrders();

映射:

  1. <!-- 1对多返回映射 -->
  2. <resultMap type="User" id="user">
  3. <id property="id" column="id" />
  4. <result property="username" column="username" />
  5. <result property="sex" column="sex" />
  6. <result property="birthday" column="birthday" />
  7. <result property="address" column="address" />
  8. <!-- javaType && ofType必须写!! -->
  9. <collection property="ordersList" javaType="List" ofType="Orders">
  10. <id property="id" column="id" />
  11. <result property="userId" column="user_id" />
  12. <result property="number" column="number" />
  13. <result property="createtime" column="createtime" />
  14. <result property="note" column="note" />
  15. </collection>
  16. </resultMap>
  17.  
  18. <!-- 测试1对多 -->
  19. <select id="findAllUserCNOrders" resultMap="user">
  20. select * from
  21. user u
  22. left join orders o
  23. on u.id = o.user_id
  24. </select>

测试:

  1. /**
  2. * 测试1对多
  3. */
  4. @Test
  5. public void m01() {
  6. // 获取sqlSession,和Spring整理后由Spring管理
  7. SqlSession sqlSession = this.sqlSessionFactory.openSession();
  8. // 从sqlSession中获取Mapper接口的代理对象
  9. UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
  10.  
  11. // 执行查询
  12. List<User> list = userMapper.findAllUserCNOrders();
  13. for (User user : list) {
  14. System.out.println(user);
  15. System.out.println(user.getOrdersList());
  16. }
  17.  
  18. // 和Spring整理后由Spring管理
  19. sqlSession.close();
  20. }

06.Mybatis关联查询的更多相关文章

  1. Mybatis关联查询和数据库不一致问题分析与解决

    Mybatis关联查询和数据库不一致问题分析与解决 本文的前提是,确定sql语句没有问题,确定在数据库中使用sql和项目中结果不一致. 在使用SpringMVC+Mybatis做多表关联时候,发现也不 ...

  2. MyBatis基础:MyBatis关联查询(4)

    1. MyBatis关联查询简介 MyBatis中级联分为3中:association.collection及discriminator. ◊ association:一对一关联 ◊ collecti ...

  3. MyBatis关联查询,一对多关联查询

    实体关系图,一个国家对应多个城市 一对多关联查询可用三种方式实现: 单步查询,利用collection标签为级联属性赋值: 分步查询: 利用association标签进行分步查询: 利用collect ...

  4. mybatis 关联查询实现一对多

    场景:最近接到一个项目是查询管理人集合  同时每一个管理人还存在多个出资人   要查询一个管理人列表  每个管理人又包含了出资人列表 采用mybatis关联查询实现返回数据. 实现方式: 1 .在实体 ...

  5. MyBatis关联查询、多条件查询

    MyBatis关联查询.多条件查询 1.一对一查询 任务需求; 根据班级的信息查询出教师的相关信息 1.数据库表的设计 班级表: 教师表: 2.实体类的设计 班级表: public class Cla ...

  6. Mybatis关联查询之二

    Mybatis关联查询之多对多 多对多 一.entity实体类 public class Student { private Integer stuid; private String stuname ...

  7. mybatis关联查询基础----高级映射

    本文链接地址:mybatis关联查询基础----高级映射(一对一,一对多,多对多) 前言: 今日在工作中遇到了一个一对多分页查询的问题,主表一条记录对应关联表四条记录,关联分页查询后每页只显示三条记录 ...

  8. MyBatis关联查询和懒加载错误

    MyBatis关联查询和懒加载错误 今天在写项目时遇到了个BUG.先说一下背景,前端请求更新生产订单状态,后端从前端接收到生产订单ID进行查询,然后就有问题了. 先看控制台报错: org.apache ...

  9. Mybatis关联查询(嵌套查询)

    上一篇文章介绍了基于Mybatis对数据库的增.删.改.查.这一篇介绍下关联查询(join query). 三张表:user article blog 表的存储sql文件: /* Navicat My ...

随机推荐

  1. 并发编程(五)——GIL全局解释器锁、死锁现象与递归锁、信号量、Event事件、线程queue

    GIL.死锁现象与递归锁.信号量.Event事件.线程queue 一.GIL全局解释器锁 1.什么是全局解释器锁 GIL本质就是一把互斥锁,相当于执行权限,每个进程内都会存在一把GIL,同一进程内的多 ...

  2. ubuntu 搭建嵌入式开发环境tftp的方法

    网上很多安装的时候都要安装tftpd-hpa tftp-hpa xinetd三个安装包,经我测试,xinetd无需安装,安装好前两个后,修改tftpd-hpa的配置文件即可:etc/default/t ...

  3. [已解决]报错:execjs._exceptions.ProgramError: ReferenceError: window is not defined

    问题: execjs._exceptions.ProgramError: ReferenceError: window is not defined 解决: 定义一个就行 var window = { ...

  4. 牛客练习赛51 B 子串查询 https://ac.nowcoder.com/acm/contest/1083/B

    题目描述 给出一个长度为n的字符串s和q个查询.对于每一个查询,会输入一个字符串t,你需要判断这个字符串t是不是s的子串.子串的定义就是存在任意下标a<b<c<d<e,那么”s ...

  5. 2018湘潭大学程序设计竞赛【E】

    题目链接:https://www.nowcoder.com/acm/contest/105/E 题意:给你美食种类和查询次数,告诉你美味度和价格,给你固定钱数,问你最多能吃到多少美味度的食物.(X真是 ...

  6. vue swiper上下无缝轮播

    参考:https://www.jianshu.com/p/5e5e59065e9c 效果: index.html: <link href="https://cdn.bootcss.co ...

  7. useradd -帐号建立或更新新使用者的资讯

    总览 SYNOPSIS useradd [-c comment] [-d home_dir] [-e expire_date] [-f inactive_time] [-g initial_group ...

  8. uniq - 删除排序文件中的重复行

    总览 (SYNOPSIS) ../src/uniq [OPTION]... [INPUT [OUTPUT]] 描述 (DESCRIPTION) 从 INPUT (或 标准输入) 数据 中 忽略 (但是 ...

  9. 2019_8_1python

    #函数 #函数是用来重复使用哒 #定义函数套路 ''' 1.首先要会写出裸代码,然后看看哪里是重复需要使用的 2.接下来将需要重复使用的代码转换成参数,带入到函数中 函数格式 def funcName ...

  10. Mysql ibd恢复(delete 数据)

    转载:https://www.linuxidc.com/Linux/2017-05/143870.htm 首先呢,请各位注意Percona Data Recovery Tool for InnoDB工 ...