# 记单词api **Repository Path**: fanqiboy/memorizing-words-api ## Basic Information - **Project Name**: 记单词api - **Description**: springboot实现的在线英语学习网站(后端) - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2022-06-19 - **Last Updated**: 2025-04-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 数据表设计 - 单词数据表 ![image-20220618110710603](https://s2.loli.net/2022/06/18/ib4QVBjwRlJOvXt.png) 此外为了记忆用户该单词的状态,比如`0`表示生词,`1`表示熟词。单词表需要为每个用户添加一个字段,例如`USER1`来记录每一单词的记忆状态。每新增一个用户则添加一列字段。对于这些字段将其存在另一张表并通过与单词表相同的`id`进行关联。 ![image-20220618112249152](https://s2.loli.net/2022/06/18/P54JRgWYpIMzCh1.png) - 完形填空数据表 ![image-20220618111221909](https://s2.loli.net/2022/06/18/WSsYjQuV6gXLEZz.png) ## Mapper设计 mybatis变量映射有两种方式`#`和`$`,其中`#`将变量替换成sql语句中的字符串变量,而`$`则是将变量替换成sql语句。在进行字段修改时需要用到`$`。 1. 判断用户记忆状态字段是否存在 ```java @Select("SHOW columns FROM remember LIKE #{uid}") Map isExistRememberColumn(String uid); // 调用 System.out.println(serviceImpl.isExistRememberColumn("11")); ``` > 存在返回Map否则返回null,之后通过ServiceImpl判断。 2. 添加和删除用户记忆状态字段 ```java @Update("ALTER TABLE remember ADD USER${uid} INT DEFAULT 0") void addRememberColumn(String uid); @Delete("ALTER TABLE remember DROP USER${uid}") void deleteRememberColumn(String uid); serviceImpl.deleteRememberColumn("11"); ``` 3. 更新用户记忆状态 ```java @Update("update remember SET USER${uid}=#{remembered} WHERE id IN ${idxes}") void updateRemember(String uid, String idxes, boolean remembered); ArrayList list = new ArrayList(); list.add(7); list.add(9); serviceImpl.updateRemember("1", list, true); ``` 4. 分页并且根据用户记忆状态查询 ```java @Select("SELECT a.* FROM normWord a JOIN remember b ON a.id=b.id where b.USER${uid}=#{remembered}") IPage queryRememberByPage(Pagepage, String uid, boolean remember); ``` ## 考试系统设计 题型表:科目 - 选择题:题目(选择数目、多选、选择)、答案list - 填空题:题目(填空数目)、答案list - 论述题:题目、答案(回车mysql处理) 学科表:科目、答题块list(题目数、题目类型、答题块名) 0:单选,1:多选,2:填空,3:论述 ### 功能 专项训练:科目、题型 随机出题考试:科目 添加新题目:科目、题型 - 批量添加:html ## 在线同步编辑器 主要功能是实现文本在多台设备之间的同步,正常情况下为单向同步。同步方式为每1秒get一次数据。编辑文字0.5s后post一次数据,编辑时暂停get计时。文本差异直接覆盖。 ## 遇到的问题 Vue中使用axios的get方法时无法传递data参数。因此,springboot中需要传入RequestBody的Controller需要改为PostMapping。