You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Data JPA查询转换为MyBatis注解实现的技术咨询

JPA Repository转MyBatis注解实现方案

以下是给出的VoteRepository完全转换为MyBatis注解实现的代码,默认数据库vote表的字段与JPA实体字段对应(如v.choice.id对应数据库字段choice_id,v.poll.id对应poll_id,v.user.id对应user_id):

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import com.example.polls.model.ChoiceVoteCount;
import com.example.polls.model.Vote;
import org.springframework.data.domain.Pageable;
import java.util.List;

@Mapper
public interface VoteMapper {

    // 对应JPA countByPollIdInGroupByChoiceId方法
    @Select("SELECT choice_id as choiceId, COUNT(id) as voteCount FROM vote WHERE poll_id IN (${pollIds}) GROUP BY choice_id")
    List<ChoiceVoteCount> countByPollIdInGroupByChoiceId(@Param("pollIds") List<Long> pollIds);

    // 对应JPA countByPollIdGroupByChoiceId方法
    @Select("SELECT choice_id as choiceId, COUNT(id) as voteCount FROM vote WHERE poll_id = #{pollId} GROUP BY choice_id")
    List<ChoiceVoteCount> countByPollIdGroupByChoiceId(@Param("pollId") Long pollId);

    // 对应JPA findByUserIdAndPollIdIn方法
    @Select("SELECT * FROM vote WHERE user_id = #{userId} AND poll_id IN (${pollIds})")
    List<Vote> findByUserIdAndPollIdIn(@Param("userId") Long userId, @Param("pollIds") List<Long> pollIds);

    // 对应JPA findByUserIdAndPollId方法
    @Select("SELECT * FROM vote WHERE user_id = #{userId} AND poll_id = #{pollId} LIMIT 1")
    Vote findByUserIdAndPollId(@Param("userId") Long userId, @Param("pollId") Long pollId);

    // 对应JPA countByUserId方法
    @Select("SELECT COUNT(id) FROM vote WHERE user_id = #{userId}")
    long countByUserId(@Param("userId") Long userId);

    // 对应JPA findVotedPollIdsByUserId方法,可搭配PageHelper插件实现分页
    @Select("SELECT poll_id FROM vote WHERE user_id = #{userId}")
    List<Long> findVotedPollIdsByUserId(@Param("userId") Long userId, Pageable pageable);
}

注意事项

  • 如果项目里的ChoiceVoteCount类的属性名和查询返回的别名不匹配,可以通过@Results注解手动配置结果映射,或者调整SQL里的别名和实体属性保持一致即可。
  • 分页查询方法如果要保留Spring Data的Page返回类型,建议引入MyBatis分页插件PageHelper,调用方法前设置分页参数即可自动封装为Page对象,无需修改SQL语句。
  • 如果数据库表名、字段名和上述SQL里的命名不一致,直接调整SQL里的表名、字段名匹配实际数据库结构即可。

内容的提问来源于stack exchange,提问作者ariht17

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 18:27:03