多表联合查询

一个根据机场查询航线的例子。有两张表,机场表包含机场信息:机场id、机场名字、机场城市。

航班包含航线信息:航班id、飞机编号、飞行时间、票价、起飞机场id、降落机场id.

需要查询的结果表包含:飞机编号、起飞机场、起飞城市、>降落机场、降落城市、航行时间、票价。

数据库里新建两个表,在新建几条测试数据:

/*
机场信息表
*/
CREATE  TABLE airport(
id INT(10) PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
portname VARCHAR(20) COMMENT '机场名字',
cityname VARCHAR(20) COMMENT '城市名字'
)ENGINE=INNODB;-- 增加数据
INSERT INTO airport VALUES(DEFAULT,'延安机场','延安');
INSERT INTO airport VALUES(DEFAULT,'北京机场','北京');
INSERT INTO airport VALUES(DEFAULT,'西安机场','西安');/*
飞机信息表
*/
CREATE  TABLE airplane(
id INT(10) PRIMARY KEY AUTO_INCREMENT COMMENT '主键id',
airno VARCHAR(20) COMMENT '飞机编号',
times INT(5) COMMENT '飞行时间',
price DOUBLE COMMENT '票价',
takeid INT(10) COMMENT '起飞机场id',
landid INT(10) COMMENT '降落机场id'
)ENGINE=INNODB;INSERT INTO airplane VALUES(DEFAULT,'海军一号',100,1200,1,2);
INSERT INTO airplane VALUES(DEFAULT,'空军一号',200,1000,3,2);
INSERT INTO airplane VALUES(DEFAULT,'陆军一号',300,1100,2,1);

根据起飞机场id和降落机场id查询需要的结果。(id后边案例分析在具体解释,如何获取起降机场id),

需要用到 LEFT JOIN 关键字,如下示例就可以查出结果了。

SELECT a.*,p.portname takeportname,p.cityname,t.portname,t.cityname
FROM airplane a
LEFT JOIN airport p ON a.takeid=p.id
LEFT JOIN airport t ON t.id=a.landid
WHERE takeid = 1 AND landid = 2

takeportnam是别名,多表查询可能要用到别名,不然结果容易混淆。

mybatis动态 SQL多表联合查询小案例:

案例就是上面这条sql的具体实现,首先建两个表的实体类。然后建映射xml文件:

机场实体类:

public class Airport {private int id;private String portName;private String cityName;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getPortName() {return portName;}public void setPortName(String portName) {this.portName = portName;}public String getCityName() {return cityName;}public void setCityName(String cityName) {this.cityName = cityName;}}

航班实体类,航班实体类中包含机场实体类对象:

public class Airplane {private int id;private String airNo;private int time;private double price;private Airport takePort;private Airport landPort;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getAirNo() {return airNo;}public void setAirNo(String airNo) {this.airNo = airNo;}public int getTime() {return time;}public void setTime(int time) {this.time = time;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public Airport getTakePort() {return takePort;}public void setTakePort(Airport takePort) {this.takePort = takePort;}public Airport getLandPort() {return landPort;}public void setLandPort(Airport landPort) {this.landPort = landPort;}
}

接口及xml配置文件:

public interface AirplaneMapper {//条件查询接口,param映射。List<Airplane> selByTakeidLandid(@Param("takeid")int takeid,@Param("landid")int landid);
}

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.*******.mapper.AirplaneMapper"><!-- //返回结果映射 --><resultMap type="airplane" id="mymap"><!-- 前边数据库,后边属性。 --><id column="id" property="id" /><result column="time" property="time" /><result column="price" property="price" /><result column="airno" property="airNo" /><association property="takePort" javaType="airport"><id column="takeid" property="id" /><result column="takecityname" property="cityName" /><result column="takeportname" property="portName" /></association><association property="landPort" javaType="airport"><id column="landid" property="id" /><result column="landcityname" property="cityName" /><result column="landportname" property="portName" /></association></resultMap><select id="selByTakeidLandid" resultMap="mymap">select a.*,p.id takeid,p.portname takeportname,p.citynametakecityname,t.id landid,t.portname landportname,t.citynamelandcitynamefrom airplane a LEFT JOIN airport p on a.takeid=p.idLEFTJOIN airport t on t.id=a.landid<where><if test="takeid>0">and takeid=#{takeid}</if><if test="landid>0">and landid=#{landid}</if></where></select>
</mapper>

上边是返回结果的映射,下边是查询语句。重点是这个查询语句,就是将sql语句写在这里。然后在Service里调用这个方法传入takeid和landid就可以查询出结果了。id可以从机场表中获取,通过下拉菜单获取id。

熟读唐诗三百首,不会作诗也会吟。

一个mybatis动态 SQL查询的完整小案例。包含多表联合查询。相关推荐

  1. mysql 多表 查询慢_详解Mysql多表联合查询效率分析及优化

    1. 多表连接类型1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用','  如: SELECT * FROM table1 CROSS JOI ...

  2. mysql多表联查分页_sqlserver多表联合查询和多表分页查询的代码讲解

    sqlserver多表联合查询和多表分页查询的代码讲解 发布时间:2020-05-14 14:42:07 来源:亿速云 阅读:700 作者:Leah 这篇文章主要为大家详细介绍了sqlserver多表 ...

  3. MyBatis Dynamic SQL(一)— 真正的Mybatis动态sql — MyBatis Dynamic SQL

    目录 现状 MyBatis Dynamic SQL 项目地址 官方文档 项目介绍 作者 Mybatis Generator 简介 特性 目标 提示 快速使用 步骤 定义常量Tables和Columns ...

  4. MyBatis动态SQL(认真看看, 以后写SQL就爽多了)

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:cnblogs.com/homejim/p/9909657. ...

  5. 认真看看, 以后写 SQL 就爽多了:MyBatis 动态 SQL:

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 阿进的写字台 来源 | cnblogs.com ...

  6. MyBatis动态SQL,写SQL更爽

    点击上方 好好学java ,选择 星标 公众号重磅资讯,干货,第一时间送达 今日推荐:分享一套基于SpringBoot和Vue的企业级中后台开源项目,这个项目有点哇塞!个人原创100W +访问量博客: ...

  7. 认真看看, 以后写 SQL 就爽多了:MyBatis 动态 SQL

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达今日推荐:2020年7月程序员工资统计,平均14357元,又跌了,扎心个人原创100W+访问量博客:点击前往,查看更多 整理 ...

  8. mybatis注解动态sql_超全MyBatis动态SQL详解

    MyBatis 令人喜欢的一大特性就是动态 SQL.在使用 JDBC 的过程中, 根据条件进行 SQL 的拼接是很麻烦且很容易出错的.MyBatis 动态 SQL 的出现, 解决了这个麻烦. MyBa ...

  9. Mybatis 动态Sql语句《常用》

    MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的空格,还要注意省掉 ...

最新文章

  1. Android移动开发之【Android实战项目】DAY11-App实现截图分享qq,微信
  2. python编程if语法-Python中的if语句——参考Python编程从入门到实践
  3. vs 服务容器中已存在服务_容器中某Go服务GC停顿经常超过100ms排查
  4. wstring与string相互转换
  5. 【JavaScript】JS事件机制学习
  6. vba 定义类_VBA中类的介绍及应用简介
  7. harmonyos升级名单,鸿蒙系统升级名单已曝光:超46款旗舰设备可升级
  8. SELECT语句“加锁选项”功能说明
  9. cosine_similarity和torch.cosine_similarity速度差异(人间奇事)
  10. php统计用户留存脚本,SQL 统计用户留存
  11. Appfuse下载及安装步骤
  12. CNN进行新闻文本分类代码实战,包含分类文本
  13. soapui返回值类型都有哪些_滚珠丝杠的常用类型都有哪些?
  14. eclipse中提示“java application configureation name i”
  15. linux查看硬盘分区类型,linux 下查看硬盘分区类型
  16. python123平台第三周作业答案_python123第一周作业
  17. 好的编程习惯受益的是自己 之一
  18. 背景设置透明度字体不透明
  19. 机器人程序设计入门(C++/Arduino/ROS)(转载2020版)
  20. 达人评测 机械革命Z3 Air怎么样

热门文章

  1. SSL/TLS 服务器瞬时 Diffie-Hellman 公共密钥过弱
  2. uni-app基础入门
  3. 跟i9处理器差不多的服务器芯片,AMD下一代服务器处理器代号“星河舰队”
  4. Activity启动过程源码分析
  5. rar有损解压和无损解压是什么意思
  6. 用计算机弹音乐乐谱小幸运,小幸运——歌词和弦版本钢琴谱
  7. [cnblogs镜像]脑图工具MindNode附属节点是什么意思 图解
  8. 六西格玛奠基人之张驰染阳杂记
  9. Python3-word文档操作(九):给word文档添加/删除一张图片-利用docx库
  10. java 余弦定理_文本相似度计算之余弦定理