Mybatis xxxMapper.xml 三表关联,配置文件
VideoMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="net.ybclass.online_ybclass.mapper.VideoMapper">
<resultMap id="videoDetailResultMap" type="Video">
<id column="id" jdbcType="INTEGER" property="id"/>
<result column="title" jdbcType="VARCHAR" property="title"/>
<result column="summary" jdbcType="VARCHAR" property="summary"/>
<result column="cover_img" jdbcType="VARCHAR" property="coverImg"/>
<result column="price" jdbcType="INTEGER" property="price"/>
<result column="point" jdbcType="DOUBLE" property="point"/>
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
<collection property="chapterList" ofType="Chapter">
<id column="chapter_id" jdbcType="INTEGER" property="id"/>
<result column="chapter_title" jdbcType="VARCHAR" property="title"/>
<result column="ordered" jdbcType="INTEGER" property="ordered"/>
<result column="chapter_create_time" jdbcType="TIMESTAMP" property="createTime"/>
<collection property="episodeList" ofType="Episode">
<id column="episode_id" jdbcType="INTEGER" property="id"/>
<result column="episode_title" jdbcType="VARCHAR" property="title"/>
<result column="num" jdbcType="INTEGER" property="num"/>
<result column="episode_ordered" jdbcType="INTEGER" property="ordered"/>
<result column="chapter_id" jdbcType="INTEGER" property="chapterId"/>
<result column="video_id" jdbcType="INTEGER" property="videoId"/>
<result column="play_url" jdbcType="VARCHAR" property="playUrl"/>
<result column="free" jdbcType="INTEGER" property="free"/>
<result column="play_create_time" jdbcType="TIMESTAMP" property="createTime"/>
</collection>
</collection>
</resultMap>
<select id="findDetailById" resultMap="videoDetailResultMap">
SELECT v.id,v.title,v.summary,v.cover_img,v.price,v.create_time,v.point,
c.id chapter_id,c.video_id,c.title chapter_title,c.ordered,c.create_time chapter_create_time,
e.id episode_id,e.num,e.chapter_id,e.video_id,e.title episode_title,e.ordered episode_ordered,e.play_url,e.free,e.create_time play_create_time
FROM video v
LEFT JOIN chapter c ON v.id=c.video_id
LEFT JOIN episode e ON c.id=e.chapter_id
WHERE v.id=#{video_id}
ORDER BY c.ordered,e.num ASC
</select>
</mapper>
Video.java
package net.ybclass.online_ybclass.domain; import java.util.Date;
import java.util.List; /**
* 视频对象
*/
public class Video {
private Integer id;
private String title;
private String summary;
private String coverImg;
private Integer price;
private Date createTime;
private Double point;
private List<Chapter> chapterList; public List<Chapter> getChapterList() {
return chapterList;
} public void setChapterList(List<Chapter> chapterList) {
this.chapterList = chapterList;
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public String getSummary() {
return summary;
} public void setSummary(String summary) {
this.summary = summary;
} public String getConverImg() {
return coverImg;
} public void setConverImg(String converImg) {
this.coverImg = converImg;
} public Integer getPrice() {
return price;
} public void setPrice(Integer price) {
this.price = price;
} public Date getCreateTime() {
return createTime;
} public void setCreateTime(Date createTime) {
this.createTime = createTime;
} public Double getPoint() {
return point;
} public void setPoint(Double point) {
this.point = point;
} @Override
public String toString() {
return "Video{" +
"id=" + id +
", title='" + title + '\'' +
", summary='" + summary + '\'' +
", converImg='" + coverImg + '\'' +
", price=" + price +
", createTime=" + createTime +
", point=" + point +
", chapterList=" + chapterList +
'}';
}
}
Chapter.java
package net.ybclass.online_ybclass.domain; import java.util.Date;
import java.util.List; /**
* 章
*/
public class Chapter {
private Integer id;
private Integer videoId;
private String title;
private Integer ordered;
private Date createTime;
private List<Episode> episodeList; public List<Episode> getEpisodeList() {
return episodeList;
} public void setEpisodeList(List<Episode> episodeList) {
this.episodeList = episodeList;
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public Integer getVideoId() {
return videoId;
} public void setVideoId(Integer videoId) {
this.videoId = videoId;
} public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public Integer getOrdered() {
return ordered;
} public void setOrdered(Integer ordered) {
this.ordered = ordered;
} public Date getCreateTime() {
return createTime;
} public void setCreateTime(Date createTime) {
this.createTime = createTime;
} @Override
public String toString() {
return "Chapter{" +
"id=" + id +
", videoId=" + videoId +
", title='" + title + '\'' +
", ordered=" + ordered +
", createTime=" + createTime +
", episodeList=" + episodeList +
'}';
}
}
Episode.java
package net.ybclass.online_ybclass.domain; import java.util.Date;
import java.util.List; /**
* 集
*/
public class Episode {
private Integer id;
private String title;
private Integer num;
private Integer ordered;
private String playUrl;
private Integer chapterId;
private Integer free;
private Integer videoId;
private Date createTime;
public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public Integer getNum() {
return num;
} public void setNum(Integer num) {
this.num = num;
} public Integer getOrdered() {
return ordered;
} public void setOrdered(Integer ordered) {
this.ordered = ordered;
} public String getPlayUrl() {
return playUrl;
} public void setPlayUrl(String playUrl) {
this.playUrl = playUrl;
} public Integer getChapterId() {
return chapterId;
} public void setChapterId(Integer chapterId) {
this.chapterId = chapterId;
} public Integer getFree() {
return free;
} public void setFree(Integer free) {
this.free = free;
} public Integer getVideoId() {
return videoId;
} public void setVideoId(Integer videoId) {
this.videoId = videoId;
} public Date getCreateTime() {
return createTime;
} public void setCreateTime(Date createTime) {
this.createTime = createTime;
} @Override
public String toString() {
return "Episode{" +
"id=" + id +
", title='" + title + '\'' +
", num=" + num +
", ordered=" + ordered +
", playUrl='" + playUrl + '\'' +
", chapterId=" + chapterId +
", free=" + free +
", videoId=" + videoId +
", createTime=" + createTime +
'}';
}
}
表结构



Mybatis xxxMapper.xml 三表关联,配置文件的更多相关文章
- mybatis mapper.xml 写关联查询 运用 resultmap 结果集中 用 association 关联其他表 并且 用 association 的 select 查询值 报错 java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for mybatis.map
用mybaits 写一个关联查询 查询商品表关联商品规格表,并查询规格表中的数量.价格等,为了sql重用性,利用 association 节点 查询 结果并赋值报错 商品表的mapper文件为Gooo ...
- mybatis错误——java.io.IOException: Could not find resource com/xxx/xxxMapper.xml
在学习Mybatis的时候,参考网上的教程进行简单demo的搭建,配置的没有问题,然后出现了下面的错误! Exception in thread "main" java.lang. ...
- Mybatis之Configuration初始化(配置文件.xml的解析)
源码解读第一步我觉着应该从Mybatis如何解析配置文件开始. 1.先不看跟Spring集成如何解析,先看从SqlSessionFactoryBuilder如果解析的. String resouce ...
- IDEA中写MyBatis的xml配置文件编译报错的坑
IDEA中写MyBatis的xml配置文件编译报错的坑 说明:用IDEA编译工具在项目中使用Mybatis框架,编写mybatis-config.xml和Mapper.xml配置文件时,编译项目出现错 ...
- gradle + mybatis 复制xml等配置文件到输出目录
问题 部署项目并启动项目后,使用mybatis时候,报一个错误:org.apache.ibatis.binding.BindingException: Invalid bound statement ...
- mybatis mapper.xml 配置文件问题(有的错误xml是不报的) 导致服务无法启动 。
转载自 开源编程 一舟mybatsi xml编译报错,tomcat启动一直循环,导致内存溢出,启动失败 mapper.xml怎么知道有没有编译错误,哪个位置有错误 这应该是mybatis的一个bug, ...
- clipse中mybatis的xml配置文件代码提示
编写mybatis的xml文件时,没有代码提示会很麻烦,是有解决办法的: 按下图打开 点击右上角的Add按钮,添加配置,配置如下,添加后点击OK: Location:http://mybatis.or ...
- 【Mybatis】MyBatis之表的关联查询(五)
本章介绍Mybatis之表的关联查询 一对一关联 查询员工信息以及员工的部门信息 1.准备表employee员工表,department部门表 CREATE TABLE `employee` ( `i ...
- Java基础-SSM之mybatis一对一外键关联
Java基础-SSM之mybatis一对一外键关联 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备测试环境(创建数据库表) 1>.创建husbandsfk和wife ...
- Mybatis的XML映射文件(四)
MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% ...
随机推荐
- webapi中间件没有使用终结点中间件时的注意事项
最小webapi 最小webapi默认的中间件配置是这样的 app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers( ...
- linux源码编译安装软件原理
目录 一.关于软件包 二.软件编译过程 三.编译安装常用参数 四.源码编译出错的解决思路 五.各种软件安装方法的特点 一.关于软件包 在linux中安装软件是需要安装包的,软件的安装包有各种类型: ...
- Django与前端框架协作开发实战:高效构建现代Web应用
title: Django与前端框架协作开发实战:高效构建现代Web应用 date: 2024/5/22 20:07:47 updated: 2024/5/22 20:07:47 categories ...
- uniapp uni-number-box组件 步长为1,还能输入小数思路分享
正常情况,输入了步长为1,是无法在输入小数的.需求是要能输入一位小数,但如果直接步长设为0.1,又不能按1这样递增,输入数量上用起来肯定很麻烦. 于是我就想了一个折中方法,步长设为:1.01,然后值改 ...
- 【源码阅读】消息队列之DoNetMQ的初步了解
这个组件,是一个分布式的组件,好处就是,不怕消息太多了,都挤在一个服务器上,出现服务器内存不够的情况.服务器内存不够用的问题解决了,但是如果消费队列要进行数据库的操作,那么性能瓶颈将出现在数据库上,如 ...
- 智影AI故事转视频创作神器!快速开启AI绘画小说推文之旅
1.前言 1.1 生成内容形式 生成内容形式主要包含三种,PGC(Professionally Generated Content).UGC(User Generated Content).AIGC( ...
- 基于docker一键化部署LNMP环境
cd / && wget https://files.cnblogs.com/files/superlinux/install_lnmp.sh && bash inst ...
- VALL-EX下载介绍:只需3秒录音,即可克隆你的声音
VALL-EX是一个强大和创新的多语言文本转语音模型,支持对中文.英文和日语的语音进行合成和克隆,使用者只需上传一段3-10秒的录音,就可以生成高质量的目标音频,同时保留了说话人的声音.情感和声学环境 ...
- Nacos 源码环境搭建
最近在学习nacos,通过调式源码查看服务注册和发现流程和原理,本地部署naos源码需要一定的步骤,本文主要做nacos源码部署. nacos版本:2.1.1 下载源码 从github上下载源码到本地 ...
- JS注释 JS变量
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...