第一步:编写controller层:VideoController
@RestController
@RequestMapping("api/v1/pub/video")
public class VideoController {
@Autowired
private VideoService videoService;
/**
* 查询视频列表
* @return
*/
@RequestMapping("list")
public JsonData listVideo(){
List<Video> list=videoService.listVideo();
return JsonData.buildSuccess(list);
}
/**
* 查询轮播图
* @return
*/
@GetMapping("list_banner")
public JsonData listVideoBanner(){
List<VideoBanner> list=videoService.listVideoBanner();
return JsonData.buildSuccess(list);
}
/**
* 查询视频详情,包含章集信息
* @param videoId
* @return
*/
@GetMapping("find_detail_by_id")
/**
* 参数必须有值没有则抛出异常
*/
public JsonData findDetailById(@RequestParam(value = "video_id",required = true)int videoId){
Video video=videoService.findDetailById(videoId);
return JsonData.buildSuccess(video);
}
}
第二步:根据编写的查询方法名到service层(VideoService)创建对应的抽象方法
public interface VideoService {
//上一章创建的
List<Video> listVideo();
List<VideoBanner> listVideoBanner();
Video findDetailById(int videoId);
}
第三步:去实现类(VideoServiceImpl)重写对应的方法
@Service
public class VideoServiceImpl implements VideoService {
@Autowired
private VideoMapper videoMapper;
@Override
public List<Video> listVideo() {
return videoMapper.listVideo();
}
@Override
public List<VideoBanner> listVideoBanner() {
return videoMapper.listVideoBanner();
}
@Override
public Video findDetailById(int videoId) {
Video video=videoMapper.findDetailById(videoId);
return video;
}
}
第五步:去mapper层中(VideoMapper)接口创建对应的抽象方法
public interface VideoMapper {
/**
* 查询全部视频列表
* @return
*/
List<Video> listVideo();
/**
* 首页轮播图
* @return
*/
List<VideoBanner> listVideoBanner();
/**
* 查询视频详情
* @param videoId
* @return
*/
Video findDetailById(@Param("video_id") int videoId);
}
第六步:到resource包下的mapper包的VideoMapper.xml创建与接口对应的数据库操作
(前两行为固定写法可复制粘贴,namespace填写:mapper层对应的接口)
<?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="work.yspan.online.mapper.VideoMapper">
<select id="listVideo" resultType="Video">
select * from video
</select>
<select id="listVideoBanner" resultType="VideoBanner">
select * from video_banner order by weight asc
</select>
<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="create_time" jdbcType="TIMESTAMP" property="createTime"/>
<result column="point" jdbcType="DOUBLE" property="point"/>
<!--private List<Chapter> chapterList;-->
<collection property="chapterList" ofType="Chapter">
<id column="chapter_id" jdbcType="INTEGER" property="id"/>
<!--<result column="video_id" jdbcType="INTEGER" property="videoId"/>-->
<result column="chapter_title" jdbcType="VARCHAR" property="title"/>
<result column="chapter_ordered" jdbcType="INTEGER" property="ordered"/>
<result column="chapter_create_time" jdbcType="TIMESTAMP" property="createTime"/>
<!--private List<Episode> episodeList;-->
<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="play_url" jdbcType="VARCHAR" property="playUrl"/>
<!--<result column="chapter_id" jdbcType="INTEGER" property="chapterId"/>-->
<result column="free" jdbcType="INTEGER" property="free"/>
<!--<result column="video_id" jdbcType="INTEGER" property="videoId"/>-->
<result column="episode_create_time" jdbcType="TIMESTAMP" property="createTime"/>
</collection>
</collection>
</resultMap>
<!--Video findDetailById(@Param("video_id") int videoId);-->
<select id="findDetailById" resultMap="VideoDetailResultMap">
select v.id,v.title,v.summary,v.cover_img,v.price,v.create_time,v.point,
c.id as chapter_id,c.title as chapter_title,c.ordered as chapter_ordered,c.create_time as chapter_create_time,
e.id as episode_id,e.num,e.title as episode_title,e.ordered as episode_ordered,e.play_url,e.free,e.create_time as episode_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>
效果截图: