java/wangpan-common/target/classes/com/wangpan/common/dal/mapper/TmdbCacheMapper.xml
2026-06-15 10:25:06 +08:00

91 lines
4.0 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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 &lt; #{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 &lt; DATE_SUB(NOW(), INTERVAL 7 DAY) THEN 1 ELSE 0 END) AS expiredCount
FROM wp_tmdb_cache
WHERE user_id = #{userId}
</select>
</mapper>