91 lines
4.0 KiB
XML
91 lines
4.0 KiB
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">
|
||
|
||
<!-- TMDB刮削缓存 Mapper XML:存放复杂SQL,简单CRUD由MyBatis-Plus BaseMapper自动提供 -->
|
||
<mapper namespace="com.wangpan.common.dal.mapper.TmdbCacheMapper">
|
||
|
||
<!-- 根据电影ID查询有效缓存 -->
|
||
<select id="findByMovieId" resultType="com.wangpan.common.dal.dataobject.TmdbCacheDO">
|
||
SELECT * FROM wp_tmdb_cache WHERE movie_id = #{movieId} AND status = 'active'
|
||
</select>
|
||
|
||
<!-- 根据TMDB ID查询有效缓存列表 -->
|
||
<select id="findByTmdbId" resultType="com.wangpan.common.dal.dataobject.TmdbCacheDO">
|
||
SELECT * FROM wp_tmdb_cache WHERE tmdb_id = #{tmdbId} AND status = 'active'
|
||
</select>
|
||
|
||
<!-- 分页查询用户缓存(含关联电影标题) -->
|
||
<select id="queryByUserId" resultType="java.util.Map">
|
||
SELECT c.*, m.title AS movie_title
|
||
FROM wp_tmdb_cache c
|
||
LEFT JOIN wp_movie m ON c.movie_id = m.id
|
||
WHERE c.user_id = #{userId} AND c.status = 'active'
|
||
ORDER BY c.cache_time DESC
|
||
LIMIT #{pageSize} OFFSET #{pageNo}
|
||
</select>
|
||
|
||
<!-- 查询所有过期的缓存ID列表 -->
|
||
<select id="findExpiredCaches" resultType="java.lang.Long">
|
||
SELECT id FROM wp_tmdb_cache WHERE cache_time < #{expireBefore} AND status = 'active'
|
||
</select>
|
||
|
||
<!-- 新增或更新缓存记录(UPSERT) -->
|
||
<insert id="saveOrUpdate" parameterType="map">
|
||
INSERT INTO wp_tmdb_cache (
|
||
movie_id, user_id, tmdb_id, title, original_title, overview,
|
||
release_date, poster_path, backdrop_path, local_poster_url,
|
||
tmdb_rating, vote_count, runtime, genres, directors, casts,
|
||
original_language, production_countries, status, cache_time
|
||
) VALUES (
|
||
#{data.movieId}, #{data.userId}, #{data.tmdbId}, #{data.title}, #{data.originalTitle}, #{data.overview},
|
||
#{data.releaseDate}, #{data.posterPath}, #{data.backdropPath}, #{data.localPosterUrl},
|
||
#{data.tmdbRating}, #{data.voteCount}, #{data.runtime}, #{data.genres}, #{data.directors}, #{data.casts},
|
||
#{data.originalLanguage}, #{data.productionCountries}, 'active', NOW()
|
||
)
|
||
ON DUPLICATE KEY UPDATE
|
||
tmdb_id = VALUES(tmdb_id),
|
||
title = VALUES(title),
|
||
original_title = VALUES(original_title),
|
||
overview = VALUES(overview),
|
||
release_date = VALUES(release_date),
|
||
poster_path = VALUES(poster_path),
|
||
backdrop_path = VALUES(backdrop_path),
|
||
local_poster_url = VALUES(local_poster_url),
|
||
tmdb_rating = VALUES(tmdb_rating),
|
||
vote_count = VALUES(vote_count),
|
||
runtime = VALUES(runtime),
|
||
genres = VALUES(genres),
|
||
directors = VALUES(directors),
|
||
casts = VALUES(casts),
|
||
original_language = VALUES(original_language),
|
||
production_countries = VALUES(production_countries),
|
||
status = 'active',
|
||
cache_time = NOW()
|
||
</insert>
|
||
|
||
<!-- 批量将缓存标记为过期 -->
|
||
<update id="markAsExpired">
|
||
UPDATE wp_tmdb_cache SET status = 'expired' WHERE id IN
|
||
<foreach collection="cacheIds" item="id" open="(" separator="," close=")">
|
||
#{id}
|
||
</foreach>
|
||
</update>
|
||
|
||
<!-- 删除指定电影的缓存 -->
|
||
<delete id="deleteByMovieId">
|
||
DELETE FROM wp_tmdb_cache WHERE movie_id = #{movieId}
|
||
</delete>
|
||
|
||
<!-- 获取用户的缓存统计信息 -->
|
||
<select id="getStatistics" resultType="java.util.Map">
|
||
SELECT
|
||
COUNT(*) AS totalCached,
|
||
SUM(CASE WHEN cache_time >= DATE_SUB(NOW(), INTERVAL 1 DAY) THEN 1 ELSE 0 END) AS todayCached,
|
||
SUM(CASE WHEN cache_time < DATE_SUB(NOW(), INTERVAL 7 DAY) THEN 1 ELSE 0 END) AS expiredCount
|
||
FROM wp_tmdb_cache
|
||
WHERE user_id = #{userId}
|
||
</select>
|
||
|
||
</mapper>
|