Browse Source

FIN: Finish PassageMapper and it's classes;

Xing Cheng 3 years ago
parent
commit
e6aae4e306

BIN
lib/javax.ejb.jar


BIN
lib/javax.jms.jar


BIN
lib/javax.persistence.jar


BIN
lib/javax.resource.jar


BIN
lib/javax.servlet.jsp.jar


BIN
lib/javax.servlet.jsp.jstl.jar


BIN
lib/javax.transaction.jar


+ 12 - 0
src/main/java/org/forgetive/forumsystem/bean/ListPassageRequest.java

@@ -0,0 +1,12 @@
+package org.forgetive.forumsystem.bean;
+
+import lombok.*;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ListPassageRequest {
+    private String method;
+    private int begin;
+    private int length;
+}

+ 17 - 0
src/main/java/org/forgetive/forumsystem/controller/PassageController.java

@@ -0,0 +1,17 @@
+package org.forgetive.forumsystem.controller;
+
+import org.forgetive.forumsystem.bean.ListPassageRequest;
+import org.forgetive.forumsystem.pojo.passage.Passage;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/psg")
+public class PassageController {
+
+    public @ResponseBody List<Passage> listPassage(@RequestBody ListPassageRequest request) {
+
+    }
+
+}

+ 57 - 1
src/main/java/org/forgetive/forumsystem/dao/passage/PassageMapper.java

@@ -1,4 +1,60 @@
 package org.forgetive.forumsystem.dao.passage;
 package org.forgetive.forumsystem.dao.passage;
 
 
-public class PassageMapper {
+import org.forgetive.forumsystem.pojo.passage.Passage;
+
+import java.util.List;
+
+public interface PassageMapper {
+    List<Passage> selectPassageByUserId(int userId);
+
+    /**
+     * 获得按综合推荐程度排序的一些文章 (点赞 * 2 + 浏览 - 发布小时数)
+     * @param offset 从第 offset 个开始
+     * @param count 一共获取 count 个结果
+     * @return 结果集
+     */
+    List<Passage> selectRecommendPassage(int offset, int count);
+
+    /**
+     * 获得按最新发布优先排序的一些文章 (点赞 * 2 + 浏览 - 发布分钟数)
+     * @param offset 从第 offset 个开始
+     * @param count 一共获取 count 个结果
+     * @return 结果集
+     */
+    List<Passage> selectNewestPassage(int offset, int count);
+
+    /**
+     * 获得按最新发布优先排序的一些文章 (点赞 * 2 + 浏览 - 发布天数)
+     * @param offset 从第 offset 个开始
+     * @param count 一共获取 count 个结果
+     * @return 结果集
+     */
+    List<Passage> selectHighQualityPassage(int offset, int count);
+
+    int insert(int userId, String passageContent);
+
+    int changeWatchCnt(int passageId, int modifyCnt);
+    int changeGoodCnt(int passageId, int modifyCnt);
+
+    /**
+     * 用户是否点赞
+     * @param userId 用户ID
+     * @param passageId 文章ID
+     * @return 0 - 未点赞 1 - 点赞
+     */
+    int getUserGood(int userId, int passageId);
+
+    /**
+     * 设置用户已点赞
+     * @param userId 用户ID
+     * @param passageId 文章ID
+     */
+    int insertUserGood(int userId, int passageId);
+
+    /**
+     * 设置用户未点赞
+     * @param userId 用户ID
+     * @param passageId 文章ID
+     */
+    int deleteUserGood(int userId, int passageId);
 }
 }

+ 77 - 0
src/main/java/org/forgetive/forumsystem/dao/passage/PassageMapper.xml

@@ -0,0 +1,77 @@
+<?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">
+<mapper namespace="org.forgetive.forumsystem.dao.passage.PassageMapper">
+    <select id="selectPassageByUserId" resultType="org.forgetive.forumsystem.pojo.passage.Passage">
+        select passage.passage_id as passage_id,
+               passage.user_id as user_id,
+               passage.passage_content as passage_content,
+               passage.passage_time as passage_time,
+               passage_good_cnt.passage_good_cnt as passage_good_cnt,
+               passage_watch_cnt.passage_watch_cnt as passage_watch_cnt
+        from passage
+            left join passage_good_cnt on passage.passage_id = passage_good_cnt.passage_id
+            left join passage_watch_cnt on passage.passage_id = passage_watch_cnt.passage_id
+        where user_id = #{userId}
+    </select>
+    <select id="selectRecommendPassage" resultType="org.forgetive.forumsystem.pojo.passage.Passage">
+        select passage.passage_id as passage_id,
+               passage.user_id as user_id,
+               passage.passage_content as passage_content,
+               passage.passage_time as passage_time,
+               passage_good_cnt.passage_good_cnt as passage_good_cnt,
+               passage_watch_cnt.passage_watch_cnt as passage_watch_cnt,
+            (passage_good_cnt.passage_good_cnt * 2 + passage_watch_cnt.passage_watch_cnt - timestampdiff(hour, passage.passage_time, current_timestamp())) as passage_recommend
+        from passage
+            left join passage_good_cnt on passage.passage_id = passage_good_cnt.passage_id
+            left join passage_watch_cnt on passage.passage_id = passage_watch_cnt.passage_id
+        order by passage_recommend desc limit #{offset}, #{count}
+    </select>
+    <select id="selectNewestPassage" resultType="org.forgetive.forumsystem.pojo.passage.Passage">
+        select passage.passage_id as passage_id,
+               passage.user_id as user_id,
+               passage.passage_content as passage_content,
+               passage.passage_time as passage_time,
+               passage_good_cnt.passage_good_cnt as passage_good_cnt,
+               passage_watch_cnt.passage_watch_cnt as passage_watch_cnt,
+               (passage_good_cnt.passage_good_cnt * 2 + passage_watch_cnt.passage_watch_cnt - timestampdiff(minute, passage.passage_time, current_timestamp())) as passage_recommend
+        from passage
+                 left join passage_good_cnt on passage.passage_id = passage_good_cnt.passage_id
+                 left join passage_watch_cnt on passage.passage_id = passage_watch_cnt.passage_id
+        order by passage_recommend desc limit #{offset}, #{count}
+    </select>
+    <select id="selectHighQualityPassage" resultType="org.forgetive.forumsystem.pojo.passage.Passage">
+        select passage.passage_id as passage_id,
+               passage.user_id as user_id,
+               passage.passage_content as passage_content,
+               passage.passage_time as passage_time,
+               passage_good_cnt.passage_good_cnt as passage_good_cnt,
+               passage_watch_cnt.passage_watch_cnt as passage_watch_cnt,
+               (passage_good_cnt.passage_good_cnt * 2 + passage_watch_cnt.passage_watch_cnt - timestampdiff(day, passage.passage_time, current_timestamp())) as passage_recommend
+        from passage
+                 left join passage_good_cnt on passage.passage_id = passage_good_cnt.passage_id
+                 left join passage_watch_cnt on passage.passage_id = passage_watch_cnt.passage_id
+        order by passage_recommend desc limit #{offset}, #{count}
+    </select>
+    <insert id="insert">
+        insert into passage (user_id, passage_content) values (#{userId}, #{passageContent});
+        insert into passage_good_cnt (passage_id, passage_good_cnt) values (last_insert_id(), 0);
+        insert into passage_watch_cnt (passage_id, passage_watch_cnt) values (last_insert_id(), 0);
+    </insert>
+    <update id="changeWatchCnt">
+        update passage_watch_cnt set passage_watch_cnt = passage_watch_cnt + #{modifyCnt} where passage_id = #{passageId}
+    </update>
+    <update id="changeGoodCnt">
+        update passage_good_cnt set passage_good_cnt = passage_good_cnt + #{modifyCnt} where passage_id = #{passageId}
+    </update>
+    <select id="getUserGood">
+        select count(*) from passage_good where passage_id = #{passageId} and user_id = #{userId}
+    </select>
+    <insert id="insertUserGood">
+        insert into passage_good (passage_id, user_id) values (#{passageId}, #{userId})
+    </insert>
+    <delete id="deleteUserGood">
+        delete from passage_good where user_id = #{userId} and passage_id = #{passageId}
+    </delete>
+</mapper>

+ 19 - 0
src/main/java/org/forgetive/forumsystem/pojo/passage/Passage.java

@@ -0,0 +1,19 @@
+package org.forgetive.forumsystem.pojo.passage;
+
+import lombok.*;
+
+import java.util.Date;
+
+@NoArgsConstructor
+@AllArgsConstructor
+public class Passage implements PassageGoodCnt, PassageWatchCnt {
+    @Getter private int passage_id;
+    @Getter private int user_id;
+    @Getter @Setter private String passage_content;
+    @Getter private Date passage_time;
+
+    // 以下属性不是直接从表中取出的,可能为0(没有值)
+    @Getter private int passage_good_cnt;
+    @Getter private int passage_watch_cnt;
+    @Getter private int passage_recommend;
+}

+ 10 - 0
src/main/java/org/forgetive/forumsystem/pojo/passage/PassageGood.java

@@ -0,0 +1,10 @@
+package org.forgetive.forumsystem.pojo.passage;
+
+import lombok.*;
+
+@NoArgsConstructor
+@AllArgsConstructor
+public class PassageGood {
+    @Getter private int passage_id;
+    @Getter private int user_id;
+}

+ 3 - 0
src/main/java/org/forgetive/forumsystem/pojo/passage/PassageGoodCnt.java

@@ -0,0 +1,3 @@
+package org.forgetive.forumsystem.pojo.passage;
+
+public interface PassageGoodCnt { }

+ 3 - 0
src/main/java/org/forgetive/forumsystem/pojo/passage/PassageWatchCnt.java

@@ -0,0 +1,3 @@
+package org.forgetive.forumsystem.pojo.passage;
+
+public interface PassageWatchCnt { }

+ 1 - 1
src/main/resources/application.properties

@@ -1 +1 @@
-spring.datasource.url = jdbc:mysql://localhost:3306/forumsystemdb?useUnicode=true&amp;characterEncoding=utf8&amp;serverTimezone=GMT%2B8&amp;useSSL=false
+spring.datasource.url = jdbc:mysql://localhost:3306/forumsystemdb?useUnicode=true&amp;characterEncoding=utf8&amp;serverTimezone=GMT%2B8&amp;useSSL=false&amp;allowMultiQueries=true

+ 1 - 1
src/main/resources/mybatis-config.xml

@@ -8,7 +8,7 @@
             <transactionManager type="JDBC"/>
             <transactionManager type="JDBC"/>
             <dataSource type="POOLED">
             <dataSource type="POOLED">
                 <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                 <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
-                <property name="url" value="jdbc:mysql://localhost:3306/forumsystemdb?useUnicode=true&amp;characterEncoding=utf8&amp;serverTimezone=GMT%2B8&amp;useSSL=false"/>
+                <property name="url" value="jdbc:mysql://localhost:3306/forumsystemdb?useUnicode=true&amp;characterEncoding=utf8&amp;serverTimezone=GMT%2B8&amp;useSSL=false&amp;allowMultiQueries=true"/>
                 <property name="username" value="root"/>
                 <property name="username" value="root"/>
                 <property name="password" value="Xc20010525"/>
                 <property name="password" value="Xc20010525"/>
             </dataSource>
             </dataSource>