2.4.3通过mybatis实现一对一嵌套查询详解(多表)
时间:2021-01-26
本文章向大家介绍2.4.3通过mybatis实现一对一嵌套查询详解(多表),主要包括2.4.3通过mybatis实现一对一嵌套查询详解(多表)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
需求:查询一个订单,与此同时查询该订单所属于的用户(一个订单对应一个用户)
代码详解
查询SQL语句:
-- 先查询订单 SELECT * FROM orders; -- 再根据订单uid外键,查询用户 SELECT * FROM `user` WHERE id = #{订单的uid};
orderMapper接口:在OrderMapper接口中增加 findAllWithUserNested()方法,
/** * 一对一嵌套查询:查询所有订单,并查出每个订单的用户信息(一对一信息) */ public List<Orders> findAllWithUserNested();
OrderMapper.xml映射 :
<resultMap id="OrderMapperNested" type="com.lagou.domain.Orders"> <id property="id" column="id"></id> <result property="ordertime" column="ordertime"></result> <result property="total" column="total"></result> <result property="uid" column="uid"></result> <!--通过第一条SQL的订单查询结果,取其中的uid,执行第二条SQL语句,到User表中去查询该uid对应的用户信息--> <!--问题:1.怎么去执行第二条SQL;2.执行第二条SQL时,如何把uid作为参数进行传递--> <!-- select:告诉程序去执行第二条SQL,内容就是SQL的存放位置,用namespace.id表示(需要执行的SQL存放位置,(com.lagou.mapper.UserMapper).(findById)) column:需要传递的参数名称,也就是第一条SQL中查出来的结果中的uid,对应要传给第二条SQL,通过uid去查询该订单对应的用户信息 --> <association property="user" javaType="com.lagou.domain.User" select="com.lagou.mapper.UserMapper.findById" column="uid"> </association> </resultMap> <!--一对一嵌套查询:查询所有订单,并查出每个订单的用户信息(一对一信息)--> <select id="findAllWithUserNested" resultMap="OrderMapperNested"> SELECT * FROM orders </select>
UserMapper接口
/** * 一对一嵌套查询第二条SQL执行:根据第一条的SQL,取uid参数,在user表中查询该订单对应的用户信息 */ public User findById(int id);
UserMapper.xml映射
<!--一对一嵌套查询第二条SQL执行:根据第一条的SQL,取uid参数,在user表中查询该订单对应的用户信息--> <!--此处因为根据id查询的结果是一个User对象,所以可以用resultType自动封装,而不用resultMap手动封装,内容也就是User实体的全路径--> <select id="findById" resultType="com.lagou.domain.User" parameterType="int"> <!--#{}中表示传递过来的参数,在这里也就是uid。parameterType表示的传递参数的类型,基本数据类型可以用映射名表示,其他类型用全路径名(/**/不能注释,会报错)--> SELECT * FROM user WHERE id = #{uid} </select>
测试代码
/** * 一对一嵌套查询:查询所有订单,并查出每个订单的用户信息(一对一信息) */ @Test public void test4() throws IOException { InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml"); SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream); SqlSession sqlSession = build.openSession(); OrderMapper mapper = sqlSession.getMapper(OrderMapper.class); List<Orders> orders = mapper.findAllWithUserNested(); for (Orders order : orders) { System.out.println(order); } }
原文地址:https://www.cnblogs.com/aloneme/p/14332677.html
- 【关关的刷题日记58】Leetcode 112 Path Sum
- 学大伟业Day解题报告
- Python数据增强(data augmentation)库--Augmentor 使用介绍
- Leetcode-Easy 101. Symmetric Tree
- 数据结构-栈的定义及python实现
- 【关关的刷题日记59】Leetcode 257 Binary Tree Paths
- 学大伟业 国庆Day2
- ECMAScript 6入门 - 变量的解构赋值
- 二叉排序树 python实现
- ES6新特性概览
- 数据结构-顺序表的定义及python实现
- 洛谷P1516 青蛙的约会
- python实现二叉树的创建和遍历
- python中numpy模块下的np.clip()的用法
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Centos7搭建主从DNS服务器的教程
- ubuntu 下JDK环境变量配置方法
- Linux部署msmtp+mutt发送邮件功能
- linux使用QQ实现网络邮件报警功能
- Linux初学(CnetOS7 Linux)之切换命令模式和图形模式的方法
- linux expect 自动登录交换机保存配置的方法
- CentOS7安装mysql5.7解压缩版简明教程
- Gunicorn Django部署配置方法
- Linux中使用NTP保持精确时间的方法详解
- LNMP环境下搭建yum的方法分析
- django 利用pillow 进行简单的设置验证码功能(python)
- Centos环境下安装Zend optimizer 3.3.9的方法
- Linux curl表单登录或提交与cookie使用详解
- Linux磁盘设备与LVM管理命令示例详解
- Ubuntu基础教程之apt-get命令