一个mybatis动态 SQL查询的完整小案例。包含多表联合查询。
多表联合查询
一个根据机场查询航线的例子。有两张表,机场表包含机场信息:机场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查询的完整小案例。包含多表联合查询。相关推荐
- mysql 多表 查询慢_详解Mysql多表联合查询效率分析及优化
1. 多表连接类型1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用',' 如: SELECT * FROM table1 CROSS JOI ...
- mysql多表联查分页_sqlserver多表联合查询和多表分页查询的代码讲解
sqlserver多表联合查询和多表分页查询的代码讲解 发布时间:2020-05-14 14:42:07 来源:亿速云 阅读:700 作者:Leah 这篇文章主要为大家详细介绍了sqlserver多表 ...
- MyBatis Dynamic SQL(一)— 真正的Mybatis动态sql — MyBatis Dynamic SQL
目录 现状 MyBatis Dynamic SQL 项目地址 官方文档 项目介绍 作者 Mybatis Generator 简介 特性 目标 提示 快速使用 步骤 定义常量Tables和Columns ...
- MyBatis动态SQL(认真看看, 以后写SQL就爽多了)
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:cnblogs.com/homejim/p/9909657. ...
- 认真看看, 以后写 SQL 就爽多了:MyBatis 动态 SQL:
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 阿进的写字台 来源 | cnblogs.com ...
- MyBatis动态SQL,写SQL更爽
点击上方 好好学java ,选择 星标 公众号重磅资讯,干货,第一时间送达 今日推荐:分享一套基于SpringBoot和Vue的企业级中后台开源项目,这个项目有点哇塞!个人原创100W +访问量博客: ...
- 认真看看, 以后写 SQL 就爽多了:MyBatis 动态 SQL
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达今日推荐:2020年7月程序员工资统计,平均14357元,又跌了,扎心个人原创100W+访问量博客:点击前往,查看更多 整理 ...
- mybatis注解动态sql_超全MyBatis动态SQL详解
MyBatis 令人喜欢的一大特性就是动态 SQL.在使用 JDBC 的过程中, 根据条件进行 SQL 的拼接是很麻烦且很容易出错的.MyBatis 动态 SQL 的出现, 解决了这个麻烦. MyBa ...
- Mybatis 动态Sql语句《常用》
MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的空格,还要注意省掉 ...
最新文章
- Android移动开发之【Android实战项目】DAY11-App实现截图分享qq,微信
- python编程if语法-Python中的if语句——参考Python编程从入门到实践
- vs 服务容器中已存在服务_容器中某Go服务GC停顿经常超过100ms排查
- wstring与string相互转换
- 【JavaScript】JS事件机制学习
- vba 定义类_VBA中类的介绍及应用简介
- harmonyos升级名单,鸿蒙系统升级名单已曝光:超46款旗舰设备可升级
- SELECT语句“加锁选项”功能说明
- cosine_similarity和torch.cosine_similarity速度差异(人间奇事)
- php统计用户留存脚本,SQL 统计用户留存
- Appfuse下载及安装步骤
- CNN进行新闻文本分类代码实战,包含分类文本
- soapui返回值类型都有哪些_滚珠丝杠的常用类型都有哪些?
- eclipse中提示“java application configureation name i”
- linux查看硬盘分区类型,linux 下查看硬盘分区类型
- python123平台第三周作业答案_python123第一周作业
- 好的编程习惯受益的是自己 之一
- 背景设置透明度字体不透明
- 机器人程序设计入门(C++/Arduino/ROS)(转载2020版)
- 达人评测 机械革命Z3 Air怎么样
热门文章
- SSL/TLS 服务器瞬时 Diffie-Hellman 公共密钥过弱
- uni-app基础入门
- 跟i9处理器差不多的服务器芯片,AMD下一代服务器处理器代号“星河舰队”
- Activity启动过程源码分析
- rar有损解压和无损解压是什么意思
- 用计算机弹音乐乐谱小幸运,小幸运——歌词和弦版本钢琴谱
- [cnblogs镜像]脑图工具MindNode附属节点是什么意思 图解
- 六西格玛奠基人之张驰染阳杂记
- Python3-word文档操作(九):给word文档添加/删除一张图片-利用docx库
- java 余弦定理_文本相似度计算之余弦定理