趣味问答模块后端设计1:题库相关设计

趣味问答模块后端设计:题库相关设计

题库 Model 字段设计

在趣味问答模块的后端设计中,我们对题库的 Model 进行了精心设计,以满足系统的各项需求。以下是 QuestionBank 类的代码:

public class QuestionBank {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column
    private Integer classId;

    @Column(name = "question", columnDefinition = "TEXT")
    private String question;

    @Column(name = "correct_answer", length = 255)
    private String correctAnswer;

    @Column(name = "options", length = 255)
    private String options;

    @Column(name = "created_time")
    @Temporal(TemporalType.TIMESTAMP)
    private Date createdTime;

    @Column(name = "explanation", columnDefinition = "TEXT")
    private String explanation;
}

在这个设计中,classId 字段用于记录问题的类别,方便对问题进行分类管理。correctAnswer 字段存储问题的正确答案,而 options 字段则记录问题的选项,该字段为字符串类型,使用 \n 来区分不同的选项。

image-20250429200427968

DTO 设计

为了避免直接向用户暴露答案和解析信息,我们设计了 QuestionBankDTO 类,该类仅包含必要的属性:

public class QuestionBankDTO {
    private Integer id;
    private String question;
    private String options;
}
Repository 设计

Repository 中,我们新增了两个查询方法,以满足不同的业务需求:

@Query("SELECT NEW com.example.qihuangserver.dto.question.QuestionBankDTO(q.id, q.question, q.options) " +
        "FROM QuestionBank q " +
        "WHERE q.classId = :classId " +
        "ORDER BY RAND() " +
        "LIMIT :limit")
List<QuestionBankDTO> findRandomByClassId(Integer classId, Integer limit);

@Query("SELECT NEW com.example.qihuangserver.dto.question.QuestionBankDTO(q.id, q.question, q.options) " +
        "FROM QuestionBank q " +
        "WHERE q.id IN :ids")
List<QuestionBankDTO> findByIds(List<Integer> ids);

第一个方法 findRandomByClassId 用于随机选取指定 classId 类别的 limit 条记录。第二个方法 findByIds 则根据一系列 id 获取 QuestionBankDTO 的列表。这两个方法的设计为系统的灵活性和可扩展性提供了有力支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值