├── .gitignore
├── .mvn
└── wrapper
│ ├── maven-wrapper.jar
│ └── maven-wrapper.properties
├── lightnovel.sql
├── mvnw
├── mvnw.cmd
├── pom.xml
└── src
├── main
├── java
│ └── com
│ │ └── example
│ │ └── lightnovelbackend
│ │ ├── LightNovelBackendApplication.java
│ │ ├── config
│ │ └── MyWebConfigurer.java
│ │ ├── controller
│ │ ├── BlogController.java
│ │ ├── BookController.java
│ │ ├── LoginController.java
│ │ └── TextController.java
│ │ ├── dao
│ │ ├── BlogMapper.java
│ │ ├── BookMapper.java
│ │ ├── CategoryMapper.java
│ │ ├── ChapterMapper.java
│ │ ├── ParagraphMapper.java
│ │ ├── UserMapper.java
│ │ └── VolumeMapper.java
│ │ ├── pojo
│ │ ├── Blog.java
│ │ ├── Book.java
│ │ ├── Category.java
│ │ ├── Chapter.java
│ │ ├── Paragraph.java
│ │ ├── User.java
│ │ └── Volume.java
│ │ └── service
│ │ ├── BlogService.java
│ │ ├── BookService.java
│ │ ├── CategoryService.java
│ │ ├── ChapterService.java
│ │ ├── ParagraphService.java
│ │ ├── UserService.java
│ │ └── VolumeService.java
└── resources
│ ├── application.properties
│ └── mapper
│ ├── BlogMapper.xml
│ ├── BookMapper.xml
│ ├── CategoryMapper.xml
│ ├── ChapterMapper.xml
│ ├── ParagraphMapper.xml
│ └── VolumeMapper.xml
└── test
└── java
└── com
├── example
└── lightnovelbackend
│ └── LightNovelBackendApplicationTests.java
└── sk
└── wjbackend
└── WjBackendApplicationTests.java
/.gitignore:
--------------------------------------------------------------------------------
1 | HELP.md
2 | target/
3 | !.mvn/wrapper/maven-wrapper.jar
4 | !**/src/main/**/target/
5 | !**/src/test/**/target/
6 |
7 | ### STS ###
8 | .apt_generated
9 | .classpath
10 | .factorypath
11 | .project
12 | .settings
13 | .springBeans
14 | .sts4-cache
15 |
16 | ### IntelliJ IDEA ###
17 | .idea
18 | *.iws
19 | *.iml
20 | *.ipr
21 |
22 | ### NetBeans ###
23 | /nbproject/private/
24 | /nbbuild/
25 | /dist/
26 | /nbdist/
27 | /.nb-gradle/
28 | build/
29 | !**/src/main/**/build/
30 | !**/src/test/**/build/
31 |
32 | ### VS Code ###
33 | .vscode/
34 |
--------------------------------------------------------------------------------
/.mvn/wrapper/maven-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/a1oyss/light_novel_backend/da88d371aad2ab44c9821cce3d6564829d32ce73/.mvn/wrapper/maven-wrapper.jar
--------------------------------------------------------------------------------
/.mvn/wrapper/maven-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.4/apache-maven-3.8.4-bin.zip
2 | wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar
3 |
--------------------------------------------------------------------------------
/lightnovel.sql:
--------------------------------------------------------------------------------
1 | /*
2 | Navicat Premium Data Transfer
3 |
4 | Source Server : localhost
5 | Source Server Type : MySQL
6 | Source Server Version : 80027
7 | Source Host : localhost:3306
8 | Source Schema : lightnovel
9 |
10 | Target Server Type : MySQL
11 | Target Server Version : 80027
12 | File Encoding : 65001
13 |
14 | Date: 30/03/2022 14:36:25
15 | */
16 |
17 | SET NAMES utf8mb4;
18 | SET FOREIGN_KEY_CHECKS = 0;
19 |
20 | -- ----------------------------
21 | -- Table structure for blog
22 | -- ----------------------------
23 | DROP TABLE IF EXISTS `blog`;
24 | CREATE TABLE `blog` (
25 | `id` int NOT NULL AUTO_INCREMENT,
26 | `date` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
27 | `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
28 | `content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
29 | PRIMARY KEY (`id`) USING BTREE
30 | ) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
31 |
32 | -- ----------------------------
33 | -- Records of blog
34 | -- ----------------------------
35 | INSERT INTO `blog` VALUES (1, '2022/01/27', '添加日志模块', '内容测试');
36 | INSERT INTO `blog` VALUES (2, '2022/01/28', '添加模块', '添加图书详情页面,点击图书后显示简介,目录等功能,新增book、volume、chapter、paragraph表');
37 | INSERT INTO `blog` VALUES (3, '2022/01/28', '添加模块', '章节查询,文章段落查询');
38 |
39 | -- ----------------------------
40 | -- Table structure for book
41 | -- ----------------------------
42 | DROP TABLE IF EXISTS `book`;
43 | CREATE TABLE `book` (
44 | `id` int NOT NULL AUTO_INCREMENT,
45 | `category_id` int NULL DEFAULT NULL,
46 | `cover` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
47 | `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
48 | `author` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
49 | `date` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
50 | `press` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
51 | `abs` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
52 | PRIMARY KEY (`id`) USING BTREE
53 | ) ENGINE = InnoDB AUTO_INCREMENT = 102 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
54 |
55 | -- ----------------------------
56 | -- Records of book
57 | -- ----------------------------
58 | INSERT INTO `book` VALUES (1, 1, 'https://img.wenku8.com/image/2/2580/2580s.jpg', '關于我在無意間被隔壁的天使變成廢柴這件事', '佐伯さん', '2022-01-24', 'GA文庫', '藤宮周所住公寓的隔壁,住著學校第一的美少女椎名真晝。自從周看到真晝在雨中淋得全身濕透而把傘借給她以後,原本並無交集的兩人便開始了奇妙的交流。\n真晝看不下去周自甘墮落的獨居生活,于是開始幫他做飯、打掃房間,在各方面照顧著周。\n真晝渴望家人間的聯系,逐漸敞開心房,開始懂得撒嬌;然而,周沒有自信能接受她的好意。盡管兩人不夠坦率,仍然漸漸縮短彼此間的距離……\n本作于「成為小說家吧」網站獲得讀者們大力支持,為主角與冷淡卻可愛的鄰居間甜蜜而令人焦急的戀愛故事。');
59 |
60 | -- ----------------------------
61 | -- Table structure for category
62 | -- ----------------------------
63 | DROP TABLE IF EXISTS `category`;
64 | CREATE TABLE `category` (
65 | `id` int NOT NULL AUTO_INCREMENT,
66 | `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
67 | PRIMARY KEY (`id`) USING BTREE
68 | ) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
69 |
70 | -- ----------------------------
71 | -- Records of category
72 | -- ----------------------------
73 | INSERT INTO `category` VALUES (1, '恋爱');
74 | INSERT INTO `category` VALUES (2, '战斗');
75 | INSERT INTO `category` VALUES (3, '幻想');
76 | INSERT INTO `category` VALUES (4, '校园');
77 | INSERT INTO `category` VALUES (5, '恐怖');
78 | INSERT INTO `category` VALUES (6, '游戏');
79 |
80 | -- ----------------------------
81 | -- Table structure for chapter
82 | -- ----------------------------
83 | DROP TABLE IF EXISTS `chapter`;
84 | CREATE TABLE `chapter` (
85 | `id` int NOT NULL AUTO_INCREMENT,
86 | `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
87 | `book_id` int NULL DEFAULT NULL,
88 | `volume_id` int NULL DEFAULT NULL,
89 | PRIMARY KEY (`id`) USING BTREE
90 | ) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
91 |
92 | -- ----------------------------
93 | -- Records of chapter
94 | -- ----------------------------
95 | INSERT INTO `chapter` VALUES (1, '與天使相遇', 1, 1);
96 | INSERT INTO `chapter` VALUES (2, '感冒與天使的照料', 1, 1);
97 | INSERT INTO `chapter` VALUES (3, '天使的分送', 1, 1);
98 | INSERT INTO `chapter` VALUES (4, '天使與掃除大作戰', 1, 1);
99 | INSERT INTO `chapter` VALUES (5, '友人來訪', 1, 1);
100 | INSERT INTO `chapter` VALUES (6, '天使受傷與謝禮', 1, 1);
101 | INSERT INTO `chapter` VALUES (7, '開始共進晚餐', 1, 1);
102 | INSERT INTO `chapter` VALUES (8, '天使生日', 1, 1);
103 | INSERT INTO `chapter` VALUES (9, '母親來襲', 1, 1);
104 | INSERT INTO `chapter` VALUES (10, '給天使的獎勵', 1, 1);
105 | INSERT INTO `chapter` VALUES (11, '天使指導的料理教室', 1, 1);
106 | INSERT INTO `chapter` VALUES (12, '大家一起過聖誕節', 1, 1);
107 | INSERT INTO `chapter` VALUES (13, '兩人共度聖誕節', 1, 1);
108 | INSERT INTO `chapter` VALUES (14, '後記', 1, 1);
109 |
110 | -- ----------------------------
111 | -- Table structure for paragraph
112 | -- ----------------------------
113 | DROP TABLE IF EXISTS `paragraph`;
114 | CREATE TABLE `paragraph` (
115 | `id` int NOT NULL AUTO_INCREMENT,
116 | `content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
117 | `book_id` int NULL DEFAULT NULL,
118 | `volume_id` int NULL DEFAULT NULL,
119 | `chapter_id` int NULL DEFAULT NULL,
120 | PRIMARY KEY (`id`) USING BTREE
121 | ) ENGINE = InnoDB AUTO_INCREMENT = 316 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
122 |
123 | -- ----------------------------
124 | -- Records of paragraph
125 | -- ----------------------------
126 | INSERT INTO `paragraph` VALUES (1, '台版 轉自 輕之國度', 1, 1, 1);
127 | INSERT INTO `paragraph` VALUES (2, '圖源︰輕之國度錄入組', 1, 1, 1);
128 | INSERT INTO `paragraph` VALUES (3, '掃圖︰擼管娘', 1, 1, 1);
129 | INSERT INTO `paragraph` VALUES (4, '錄入︰kid', 1, 1, 1);
130 | INSERT INTO `paragraph` VALUES (5, '修圖︰擼管娘', 1, 1, 1);
131 | INSERT INTO `paragraph` VALUES (6, '「你在干嘛?」', 1, 1, 1);
132 | INSERT INTO `paragraph` VALUES (7, '藤宮周和她──椎名真晝第一次說話,是在連綿細雨中看到她坐在公園秋千上的時候。', 1, 1, 1);
133 | INSERT INTO `paragraph` VALUES (8, '周今年升上高一後,便展開獨居生活,而在他住的公寓房間右鄰,住著一位天使。', 1, 1, 1);
134 | INSERT INTO `paragraph` VALUES (9, '所謂的天使當然只是一種比喻,但椎名真晝這名少女就是如此美麗可愛,使得這個比喻就像真的一樣。', 1, 1, 1);
135 | INSERT INTO `paragraph` VALUES (10, '她那保養得宜的亞麻色長直發總是柔順有光澤,透亮的乳白色肌膚保持著沒有一絲粗糙的光滑感。鼻梁挺直端正,一雙大眼邊緣瓖著縴長睫毛,還有著飽滿水亮、形狀優美的櫻色嘴唇,以上要素皆體現出人造物般的精致之美。', 1, 1, 1);
136 | INSERT INTO `paragraph` VALUES (11, '周和她就讀同一所高中,而且是同年級生,所以經常听到關于她的傳聞,其中多半形容她是「文武雙全的美少女」。', 1, 1, 1);
137 | INSERT INTO `paragraph` VALUES (12, '因為她在段考中始終維持第一名的成績,在體育課上也有一流的活躍表現。由于兩人不同班,周並不太清楚她的事情;但若是傳聞沒錯,那她就真的是個完美超人了。', 1, 1, 1);
138 | INSERT INTO `paragraph` VALUES (13, '看起來沒有什麼明顯的缺點,長得眉清目秀,成績優異卻不會因此驕矜自滿,性格相當謙虛沉穩。這樣的人會受歡迎也不奇怪。', 1, 1, 1);
139 | INSERT INTO `paragraph` VALUES (14, '和這樣厲害的美少女比鄰而居,想必有部分男生會相當羨慕,恨不得能置身同樣情境吧。', 1, 1, 1);
140 | INSERT INTO `paragraph` VALUES (15, '話雖如此,周並不打算跟她發生什麼,也不認為有那個機會。', 1, 1, 1);
141 | INSERT INTO `paragraph` VALUES (16, '在他眼中,椎名真晝這位少女當然很有魅力。', 1, 1, 1);
142 | INSERT INTO `paragraph` VALUES (17, '然而,兩人不過是鄰居的關系。周既沒有機會和她說話,也沒有打算和她扯上關系。', 1, 1, 1);
143 | INSERT INTO `paragraph` VALUES (18, '畢竟一扯上關系,自己恐怕會受到男生的嫉妒。再說,如果只是住在隔壁就能變得親近的話,那些迷戀她的男生們就不用那麼辛苦了。', 1, 1, 1);
144 | INSERT INTO `paragraph` VALUES (19, '順帶一提,感受到異性魅力未必等同于懷有戀愛感情。在周看來,真晝就是個最適合從遠處觀賞的美少女而已。', 1, 1, 1);
145 | INSERT INTO `paragraph` VALUES (20, '因此,周對于與她發展什麼酸甜浪漫的關系不抱任何期待,也就不會主動去親近對方。他只是住在真晝的隔壁,根本不曾與她接觸。', 1, 1, 1);
146 | INSERT INTO `paragraph` VALUES (21, '所以,當周偶然看到她不撐傘獨自待在雨中、顯得很迷惘的時候,心里只想著「這個人在干嘛?」,並且露出了看著可疑人物的眼神。', 1, 1, 1);
147 | INSERT INTO `paragraph` VALUES (22, '雨大到所有人都匆匆趕回自己家里,她卻在學校和公寓之間的一處公園里,一個人坐在秋千上。', 1, 1, 1);
148 | INSERT INTO `paragraph` VALUES (23, '(插圖007)', 1, 1, 1);
149 | INSERT INTO `paragraph` VALUES (24, '(干嘛待在那邊淋雨?)', 1, 1, 1);
150 | INSERT INTO `paragraph` VALUES (25, '天上覆蓋著暗灰色的烏雲,陽光照不下來,使得周遭景色一片昏暗。從早上下到現在的傾盆大雨,讓視野變得更加模糊。盡管如此,那顯眼的亞麻色頭發和制服,卻讓周一眼就能認出她是真晝。', 1, 1, 1);
151 | INSERT INTO `paragraph` VALUES (26, '周不懂她為什麼不撐傘,待在那里全身濕透地淋著雨。', 1, 1, 1);
152 | INSERT INTO `paragraph` VALUES (27, '她看起來不像是在等人,對于淋濕也沒有感到抗拒,只是茫然地朝著某個方向看。', 1, 1, 1);
153 | INSERT INTO `paragraph` VALUES (28, '略微仰起的臉龐本就格外白皙,如今更顯得氣色不佳,甚至看上去很蒼白。', 1, 1, 1);
154 | INSERT INTO `paragraph` VALUES (29, '即使身處那種運氣不好馬上就會感冒的狀態,真晝仍然靜靜坐在那里。', 1, 1, 1);
155 | INSERT INTO `paragraph` VALUES (30, '既然她看起來不打算回家,應該是自願在那邊淋雨吧。或許輪不到別人來開口介入。', 1, 1, 1);
156 | INSERT INTO `paragraph` VALUES (31, '想到這里,周準備穿過公園──此時,他卻看見真晝那垮下臉、幾乎要哭出來的表情,于是忍不住搔了搔頭。', 1, 1, 1);
157 | INSERT INTO `paragraph` VALUES (32, '他並沒有想要和她扯上關系之類的動機。', 1, 1, 1);
158 | INSERT INTO `paragraph` VALUES (33, '可是,把露出那種表情的人放著不管,總覺得良心過不去。只是這樣而已。', 1, 1, 1);
159 | INSERT INTO `paragraph` VALUES (34, '「……你在干嘛?」', 1, 1, 1);
160 | INSERT INTO `paragraph` VALUES (35, '為了表示自己沒有別的意思,周用盡可能冷淡的語氣向她搭話。接著,吸飽水分而變得沉重的一頭長發晃了一下,轉向周這里。', 1, 1, 1);
161 | INSERT INTO `paragraph` VALUES (36, '她的臉蛋還是一樣漂亮。', 1, 1, 1);
162 | INSERT INTO `paragraph` VALUES (37, '即使被雨淋濕,也沒有掩蓋住她的光芒,反而連雨都成為襯托她美麗臉龐的小道具。那大概就是所謂的嬌艷欲滴吧。', 1, 1, 1);
163 | INSERT INTO `paragraph` VALUES (38, '一對雙眼皮大眼水靈靈地看著這邊。', 1, 1, 1);
164 | INSERT INTO `paragraph` VALUES (39, '真晝姑且知道周是鄰居,畢竟兩人早上偶爾會擦身而過。', 1, 1, 1);
165 | INSERT INTO `paragraph` VALUES (40, '只是因為突然被搭話,再加上從不來往的人主動接觸自己,她那雙焦糖色的眼眸中反映出一絲警戒。', 1, 1, 1);
166 | INSERT INTO `paragraph` VALUES (41, '「藤宮同學,你找我有事?」', 1, 1, 1);
167 | INSERT INTO `paragraph` VALUES (42, '周心里莫名感慨地想著「原來她有記住我的姓氏啊」,同時察覺出她大概不會放松警惕。', 1, 1, 1);
168 | INSERT INTO `paragraph` VALUES (43, '雖說兩人並非素未謀面,但是被他這樣不熟的鄰居搭話,也難怪她會增強防備。', 1, 1, 1);
169 | INSERT INTO `paragraph` VALUES (44, '她可能不太想和異性有什麼牽扯。听說常常有各個年級的校內男生向她告白或試圖接近,她恐怕覺得自己也別有用心吧。', 1, 1, 1);
170 | INSERT INTO `paragraph` VALUES (45, '「沒什麼。只是看你一個人在大雨中坐在這里,誰都會在意吧。」', 1, 1, 1);
171 | INSERT INTO `paragraph` VALUES (46, '「這樣啊。謝謝你的關心,但我是自己想留在這里的,請不用在意。」', 1, 1, 1);
172 | INSERT INTO `paragraph` VALUES (47, '語氣中沒有尖銳露骨的警戒,她只是用溫和卻絲毫不容他人深究的淡然聲音說道。', 1, 1, 1);
173 | INSERT INTO `paragraph` VALUES (48, '(唉,就知道會這樣。)', 1, 1, 1);
174 | INSERT INTO `paragraph` VALUES (49, '她明顯有什麼隱情,但見她擺出「別管我」的拒絕態度,周便不打算追問下去了。', 1, 1, 1);
175 | INSERT INTO `paragraph` VALUES (50, '他原本就是一時興起才搭話,詢問原因也只是順便,其實並沒有多麼在意。', 1, 1, 1);
176 | INSERT INTO `paragraph` VALUES (51, '如果她想要留在這里的話,那也沒關系。', 1, 1, 1);
177 | INSERT INTO `paragraph` VALUES (52, '站在真晝的角度來看,周的行為反而會讓她產生「為什麼要跟我說話?」這種疑問吧。', 1, 1, 1);
178 | INSERT INTO `paragraph` VALUES (53, '真晝打量著周,那張柔弱的美麗臉蛋透露著猜疑的情緒,所以周只簡短回道︰「是喔。」', 1, 1, 1);
179 | INSERT INTO `paragraph` VALUES (54, '繼續纏著她說話肯定會被討厭,差不多該撤退了。', 1, 1, 1);
180 | INSERT INTO `paragraph` VALUES (55, '幸好,不管真晝對周的印象是好是壞,兩人都毫不相千,因此他可以乾脆地做出決斷,放著她不管自己回家。', 1, 1, 1);
181 | INSERT INTO `paragraph` VALUES (56, '不過,讓少女獨自一人在這里淋成落湯雞,周感覺心里有點過意不去。', 1, 1, 1);
182 | INSERT INTO `paragraph` VALUES (57, '「那樣會感冒的,你就撐傘回去吧。不用還沒關系。」', 1, 1, 1);
183 | INSERT INTO `paragraph` VALUES (58, '所以,周在最後多管了一點閑事。', 1, 1, 1);
184 | INSERT INTO `paragraph` VALUES (59, '要是她因此感冒,總覺得自己睡覺吃飯都不能安心。抱著這種想法,周把原本撐在頭上的傘遞給她。', 1, 1, 1);
185 | INSERT INTO `paragraph` VALUES (60, '讓她接過傘──正確地說是把傘硬塞給她之後,周就在她開口說話前轉身離去了。', 1, 1, 1);
186 | INSERT INTO `paragraph` VALUES (61, '他快步離開時,背後傳來真晝的聲音。', 1, 1, 1);
187 | INSERT INTO `paragraph` VALUES (62, '那聲音微弱到幾乎被雨聲掩蓋,周就這麼徑自迅速地穿過了公園。', 1, 1, 1);
188 | INSERT INTO `paragraph` VALUES (63, '他想著「別感冒就好」而把傘硬塞給真晝後,似乎多少減輕了起初想無視她直接走掉時所產生的罪惡感。', 1, 1, 1);
189 | INSERT INTO `paragraph` VALUES (64, '既然她拒絕交談,周也無意再和她有什麼來往。', 1, 1, 1);
190 | INSERT INTO `paragraph` VALUES (65, '反正兩人顯然沒緣分,不會有下次了。', 1, 1, 1);
191 | INSERT INTO `paragraph` VALUES (66, '至少在這個時候,再次踏上歸途的周是這麼想的。', 1, 1, 1);
192 | INSERT INTO `paragraph` VALUES (67, '「周,你鼻子好吵。」', 1, 1, 2);
193 | INSERT INTO `paragraph` VALUES (68, '「你才吵。」', 1, 1, 2);
194 | INSERT INTO `paragraph` VALUES (69, '結果第二天,感冒的人是周。', 1, 1, 2);
195 | INSERT INTO `paragraph` VALUES (70, '被赤澤樹這個同班同學──或者該說是損友指出事實,周試著用鼻子發出哼聲,可惜失敗了。', 1, 1, 2);
196 | INSERT INTO `paragraph` VALUES (71, '他的鼻子確實有發出聲音,不過那只是他一用鼻子呼吸就發出的嘶嘶水聲。', 1, 1, 2);
197 | INSERT INTO `paragraph` VALUES (72, '周感覺身體很不舒服。不知道是因為鼻塞還是感冒本身的影響,腦子里一直感到陣陣發疼。', 1, 1, 2);
198 | INSERT INTO `paragraph` VALUES (73, '盡管他吃了市售感冒藥,但癥狀並沒有完全壓下來,因而搞成這副狼狽的樣子。', 1, 1, 2);
199 | INSERT INTO `paragraph` VALUES (74, '見周因鼻塞發出呻吟、苦著臉和面紙打交道,樹的眼神與其說是擔心,更像是感到傻眼。', 1, 1, 2);
200 | INSERT INTO `paragraph` VALUES (75, '「昨天你還好好的吧?」', 1, 1, 2);
201 | INSERT INTO `paragraph` VALUES (76, '「淋到雨了。」', 1, 1, 2);
202 | INSERT INTO `paragraph` VALUES (77, '「保重啊。話說,你昨天沒帶傘嗎?」', 1, 1, 2);
203 | INSERT INTO `paragraph` VALUES (78, '「……給別人了。」', 1, 1, 2);
204 | INSERT INTO `paragraph` VALUES (79, '周當然不可能在學校說「給真晝了」,于是含糊其辭地回道。', 1, 1, 2);
205 | INSERT INTO `paragraph` VALUES (80, '順帶一提,周在學校瞧見真晝時瞄了一眼。她臉色不差,看起來精神也很好的樣子。結果,得到感冒的反而只有把傘拿給她的自己,這狀況只能說是可笑了。', 1, 1, 2);
206 | INSERT INTO `paragraph` VALUES (81, '雖然感冒的原因是他沒有好好泡個澡暖暖身子,算是自作自受吧。', 1, 1, 2);
207 | INSERT INTO `paragraph` VALUES (82, '「雨下那麼大還把傘借出去,你人也太好了吧?」', 1, 1, 2);
208 | INSERT INTO `paragraph` VALUES (83, '「我有什麼辦法,反正給都給了。」', 1, 1, 2);
209 | INSERT INTO `paragraph` VALUES (84, '「竟然不惜冒著生病的風險……你是給誰了啊?」', 1, 1, 2);
210 | INSERT INTO `paragraph` VALUES (85, '「……路過的走失兒童?」', 1, 1, 2);
211 | INSERT INTO `paragraph` VALUES (86, '雖然比起真正的小孩,對方已經成長得亭亭玉立了。不如說,根本就是同年的人。', 1, 1, 2);
212 | INSERT INTO `paragraph` VALUES (87, '(……對了,原來她那時候的表情就像走失的小孩啊。)', 1, 1, 2);
213 | INSERT INTO `paragraph` VALUES (88, '說出口後,周才終于領會過來。', 1, 1, 2);
214 | INSERT INTO `paragraph` VALUES (89, '原來真晝當時的表情,和走失的孩子在尋找父母時如出一轍。', 1, 1, 2);
215 | INSERT INTO `paragraph` VALUES (90, '「你可真好心。」', 1, 1, 2);
216 | INSERT INTO `paragraph` VALUES (91, '周回想著昨天遇見真晝的情景。對此,樹笑著調侃道。他對周的心情一無所知。', 1, 1, 2);
217 | INSERT INTO `paragraph` VALUES (92, '「不過啊,不管是借傘還是怎樣,你在那之後只是隨便擦擦身體就算了吧。感覺那才是你感冒的原因。」', 1, 1, 2);
218 | INSERT INTO `paragraph` VALUES (93, '「……你怎麼知道?」', 1, 1, 2);
219 | INSERT INTO `paragraph` VALUES (94, '「只要去你家看過,就知道你不會愛惜自己的身體了啦。」', 1, 1, 2);
220 | INSERT INTO `paragraph` VALUES (95, '樹這麼說後,接著若無其事地損了一句︰「所以才會感冒啊,笨──蛋。」周只能選擇閉上嘴巴。', 1, 1, 2);
221 | INSERT INTO `paragraph` VALUES (96, '樹說得沒錯,周基本上對自己的事情不太在乎。', 1, 1, 2);
222 | INSERT INTO `paragraph` VALUES (97, '進一步說,他不擅長收拾整理,所以房間老是亂七八糟。吃的也都是便利商店的便當或營養補助食品,不然就是外食。', 1, 1, 2);
223 | INSERT INTO `paragraph` VALUES (98, '連樹都受不了地說過「虧你敢說要獨居」。', 1, 1, 2);
224 | INSERT INTO `paragraph` VALUES (99, '從樹的角度來看,周的生活習慣實在過于邋遢隨便,也難怪他會感冒了。', 1, 1, 2);
225 | INSERT INTO `paragraph` VALUES (100, '「今天早點回家休息吧。明天剛好是周末,早點把感冒治好。」', 1, 1, 2);
226 | INSERT INTO `paragraph` VALUES (101, '「喔……」', 1, 1, 2);
227 | INSERT INTO `paragraph` VALUES (102, '「至少有個女朋友照顧你的話就好了呢。」', 1, 1, 2);
228 | INSERT INTO `paragraph` VALUES (103, '「吵死了。有女朋友的人給我閉嘴。」', 1, 1, 2);
229 | INSERT INTO `paragraph` VALUES (104, '看到樹有些自豪地揚起嘴角,周火大地用自己的面紙盒朝他的手背打下去。', 1, 1, 2);
230 | INSERT INTO `paragraph` VALUES (105, '隨著時間過去,周的身體狀況變得愈來愈差。', 1, 1, 2);
231 | INSERT INTO `paragraph` VALUES (106, '原本感冒的癥狀只有頭痛和流鼻水,現在還加上喉嚨痛和倦怠感前來助陣,一起支配著他的身體。盡管周在放學後心無旁鶩地急著趕回家,身體卻不敵感冒所帶來的影響,腳步變得沉重又緩慢。', 1, 1, 2);
232 | INSERT INTO `paragraph` VALUES (107, '即使如此,周仍是抵達了公寓的入口。他拖著沉重的腳步一走進電梯里,就把身體靠到牆上。', 1, 1, 2);
233 | INSERT INTO `paragraph` VALUES (108, '「呼──」地一聲吐出的氣息,比平常更加紊亂且灼熱。', 1, 1, 2);
234 | INSERT INTO `paragraph` VALUES (109, '在學校的時候還能忍受,但或許是因為快到家而放松下來的緣故,身體一下子變得難受起來。', 1, 1, 2);
235 | INSERT INTO `paragraph` VALUES (110, '連搭電梯時習以為常的那種獨特失重感,現在也只是帶來痛苦。', 1, 1, 2);
236 | INSERT INTO `paragraph` VALUES (111, '身體格外不舒服,但他就快到家了。', 1, 1, 2);
237 | INSERT INTO `paragraph` VALUES (112, '電梯一停在周住的樓層,他便慢慢走出來,朝自家走去──然後,他頓時愣住了。', 1, 1, 2);
238 | INSERT INTO `paragraph` VALUES (113, '周的視線前方是原以為不會再說上話、有著一頭亞麻色飄逸長發的少女。', 1, 1, 2);
239 | INSERT INTO `paragraph` VALUES (114, '那可愛動人的容貌看上去朝氣蓬勃,皮膚的氣色也很好。', 1, 1, 2);
240 | INSERT INTO `paragraph` VALUES (115, '怎麼想都是她更有可能感冒,結果卻是一副精神百倍的模樣。也許是她平時就有在照顧身體的關系,這時候就如實地呈現出兩人生活型態的差距。', 1, 1, 2);
241 | INSERT INTO `paragraph` VALUES (116, '真晝的手上握著昨天周硬塞給她的傘,折疊得相當整齊。', 1, 1, 2);
242 | INSERT INTO `paragraph` VALUES (117, '明明說過不用還,她還是拿來還了啊。', 1, 1, 2);
243 | INSERT INTO `paragraph` VALUES (118, '「……之前說了,不用還也沒關系的。」', 1, 1, 2);
244 | INSERT INTO `paragraph` VALUES (119, '「有借有還是理所當……?」', 1, 1, 2);
245 | INSERT INTO `paragraph` VALUES (120, '她話說到一半就停了下來──或者該說,她在看見周的臉後便說不出話來了。', 1, 1, 2);
246 | INSERT INTO `paragraph` VALUES (121, '「那個,你在發燒對吧……?」', 1, 1, 2);
247 | INSERT INTO `paragraph` VALUES (122, '「……不關你的事。」', 1, 1, 2);
248 | INSERT INTO `paragraph` VALUES (123, '周蹙眉心想,還真是在最糟糕的時機撞見了。', 1, 1, 2);
249 | INSERT INTO `paragraph` VALUES (124, '說得極端一點,傘還不還都無所謂。', 1, 1, 2);
250 | INSERT INTO `paragraph` VALUES (125, '不過,在這個時間點遇到就很不妙了。她那麼聰明,肯定很快就能聯想到周感冒的原因。', 1, 1, 2);
251 | INSERT INTO `paragraph` VALUES (126, '「可是,都是因為你把傘借我……」', 1, 1, 2);
252 | INSERT INTO `paragraph` VALUES (127, '「是我自己要借的,跟你沒關系吧。」', 1, 1, 2);
253 | INSERT INTO `paragraph` VALUES (128, '「有關系。因為我在那里,所以你才會感冒的。」', 1, 1, 2);
254 | INSERT INTO `paragraph` VALUES (129, '「這沒什麼啦,你不用放在心上。」', 1, 1, 2);
255 | INSERT INTO `paragraph` VALUES (130, '對周而言,那是他為了自我滿足而做的事情,所以不希望因此讓別人擔心。', 1, 1, 2);
256 | INSERT INTO `paragraph` VALUES (131, '然而,真晝似乎不打算三言兩語就放過周。她端正的美貌流露出焦急之色。', 1, 1, 2);
257 | INSERT INTO `paragraph` VALUES (132, '「……就這樣吧,再見。」', 1, 1, 2);
258 | INSERT INTO `paragraph` VALUES (133, '在這邊僵持不下讓周更加難受,于是他決定強行逃離真晝擔心的追問。', 1, 1, 2);
259 | INSERT INTO `paragraph` VALUES (134, '他腳步踉蹌、搖搖晃晃地隨手接過傘,然後從口袋里拿出鑰匙……到這里還沒有問題。', 1, 1, 2);
260 | INSERT INTO `paragraph` VALUES (135, '當他動作有些遲緩地打開自家房門的瞬間,身體突然變得虛脫無力。', 1, 1, 2);
261 | INSERT INTO `paragraph` VALUES (136, '也許是因為總算能走進家門而感到安心的緣故,周的身體搖晃著朝後方的護欄倒去。', 1, 1, 2);
262 | INSERT INTO `paragraph` VALUES (137, '盡管當下心里覺得不妙,不過那道護欄很結實,只是撞一下的話不用擔心撞壞,況且高度足夠,也不至于摔下去。直接撞上去多少會有點痛,但那也沒辦法……周已經做好了感到疼痛的心理準備。', 1, 1, 2);
263 | INSERT INTO `paragraph` VALUES (138, '但下一秒,他感到手臂被用力一拉,強行恢復了原本的姿勢。', 1, 1, 2);
264 | INSERT INTO `paragraph` VALUES (139, '「……實在沒辦法放著不管。」', 1, 1, 2);
265 | INSERT INTO `paragraph` VALUES (140, '微弱的聲音傳到周有些模糊的意識中。', 1, 1, 2);
266 | INSERT INTO `paragraph` VALUES (141, '「欠你的人情我會還的。」', 1, 1, 2);
267 | INSERT INTO `paragraph` VALUES (142, '大概是燒得更厲害了,周試著用意識逐漸渙散的腦袋去理解她所說的話,最後還是選擇放棄。', 1, 1, 2);
268 | INSERT INTO `paragraph` VALUES (143, '在他理解之前,真晝就撐著他幾近癱軟的身體,打開了他的家門。', 1, 1, 2);
269 | INSERT INTO `paragraph` VALUES (144, '「我進去了。這是不得已的,請原諒。」', 1, 1, 2);
270 | INSERT INTO `paragraph` VALUES (145, '平靜的嗓音透露著不容分說的強硬態度。', 1, 1, 2);
271 | INSERT INTO `paragraph` VALUES (146, '感冒的周也沒力氣抵抗,就這麼被拖著,第一次和同齡女性一起回到家中。', 1, 1, 2);
272 | INSERT INTO `paragraph` VALUES (147, '雖然他沒有在生病時幫忙照料的女朋友,不過似乎有位幫忙照料的天使降臨。', 1, 1, 2);
273 | INSERT INTO `paragraph` VALUES (148, '周燒得頭昏腦脹,遲了一步才想起自己家里的現狀──不如說是親眼看到實際情況之後,他才後悔讓真晝進來。', 1, 1, 2);
274 | INSERT INTO `paragraph` VALUES (149, '周住的公寓是一房一廳,另外還有廚房和儲藏室。', 1, 1, 2);
275 | INSERT INTO `paragraph` VALUES (150, '客廳與寢室都相當寬敞,還附設了儲藏室,對于獨居的人而言已經頗為奢侈。周的家庭還算富裕,父母考慮到安全性和交通便利等因素後,最後選擇了這里。', 1, 1, 2);
276 | INSERT INTO `paragraph` VALUES (151, '由于是雙親做下決定,並表示「想要一個人住的話,就得住這里」,因此周並不打算對此提出異議,但他內心其實認為不用花那麼多錢也可以。他一個人實在不知道該怎麼處置這麼大的房子。', 1, 1, 2);
277 | INSERT INTO `paragraph` VALUES (152, '先不說這些。周獨自在這里生活,而且他是個不擅長收拾整理的男生。', 1, 1, 2);
278 | INSERT INTO `paragraph` VALUES (153, '所以別說客廳了,連寢室里都堆著滿地的雜物。', 1, 1, 2);
279 | INSERT INTO `paragraph` VALUES (154, '「真是看不下去。」', 1, 1, 2);
280 | INSERT INTO `paragraph` VALUES (155, '天使──更正,是救世主大人對周送上這麼一句與她可愛外表不符的直白感想。', 1, 1, 2);
281 | INSERT INTO `paragraph` VALUES (156, '事實上就是那麼慘不忍睹,因此周也無從反駁。早知道別人要進來家里,他就多少挪開一點雜物了。不過,事到如今說這些也沒用。', 1, 1, 2);
282 | INSERT INTO `paragraph` VALUES (157, '真晝光潤的嘴唇中吐出嘆息。即使如此,她也沒有回去,而是把周帶到了寢室。', 1, 1, 2);
283 | INSERT INTO `paragraph` VALUES (158, '中途兩人還差點摔倒,這讓把屋子弄得這麼亂的本人也深切體認到,自己再不認真收拾房間就不妙了。', 1, 1, 2);
284 | INSERT INTO `paragraph` VALUES (159, '「我先出去一下,你就在我回來之前換好衣服。沒問題吧?」', 1, 1, 2);
285 | INSERT INTO `paragraph` VALUES (160, '「……你還要回來啊。」', 1, 1, 2);
286 | INSERT INTO `paragraph` VALUES (161, '「放著臥床不起的人不管,我會睡不好覺的。」', 1, 1, 2);
287 | INSERT INTO `paragraph` VALUES (162, '真晝冷淡地回答,似乎和周上次看到她淋濕那時有著一樣的想法,所以他也無法再多說什麼。', 1, 1, 2);
288 | INSERT INTO `paragraph` VALUES (163, '等到她離開房間之後,周就老實地照她所說,換上家居服。', 1, 1, 2);
289 | INSERT INTO `paragraph` VALUES (164, '「真是亂七八糟,根本沒有走路的地方……為什麼這樣還能生活呢……」', 1, 1, 2);
290 | INSERT INTO `paragraph` VALUES (165, '周在換衣服的期間,隱約听見了真晝疑惑的低語聲,這令他感到萬分抱歉。', 1, 1, 2);
291 | INSERT INTO `paragraph` VALUES (166, '周換好衣服躺下之後,似乎在不知不覺間睡著了。當他使勁地撐起沉重的眼皮時,首先映入眼簾的是亞麻色的發絲。', 1, 1, 2);
292 | INSERT INTO `paragraph` VALUES (167, '視線沿著發絲往上看去,只見真晝安靜地站在床邊盯著他。看來,剛才那些並不是一場夢。', 1, 1, 2);
293 | INSERT INTO `paragraph` VALUES (168, '「……現在幾點了?」', 1, 1, 2);
294 | INSERT INTO `paragraph` VALUES (169, '「晚上七點。你睡了幾個小時。」', 1, 1, 2);
295 | INSERT INTO `paragraph` VALUES (170, '真晝淡然地回答,並配合周坐起身體的動作,將倒入杯中的運動飲料遞給他。', 1, 1, 2);
296 | INSERT INTO `paragraph` VALUES (171, '周心懷感激地接過杯子後喝了幾口,才總算有余力留意周圍情況。', 1, 1, 2);
297 | INSERT INTO `paragraph` VALUES (172, '可能是因為睡了一覺的緣故,感覺身體稍微好點了。', 1, 1, 2);
298 | INSERT INTO `paragraph` VALUES (173, '他接著注意到頭上有股涼涼的感覺,于是伸手按向額頭,指尖上隨即傳來像是布一樣有點硬的觸感。', 1, 1, 2);
299 | INSERT INTO `paragraph` VALUES (174, '周一意識到額頭上貼著家里不可能有的退熱貼後,便抬頭看向真晝。只見她直言不諱地回道︰「我從家里拿來的。」', 1, 1, 2);
300 | INSERT INTO `paragraph` VALUES (175, '這個家里既沒有退熱貼,也沒有運動飲料。想必運動飲料也是她拿過來的吧。', 1, 1, 2);
301 | INSERT INTO `paragraph` VALUES (176, '「……謝謝你特地帶來。」', 1, 1, 2);
302 | INSERT INTO `paragraph` VALUES (177, '「不會。」', 1, 1, 2);
303 | INSERT INTO `paragraph` VALUES (178, '冷淡的回應令周只能露出苦笑。', 1, 1, 2);
304 | INSERT INTO `paragraph` VALUES (179, '她只是出于罪惡感才提議照料自己,並不是想和他聊天吧。再說,在不熟的男人家里兩人獨處,這種狀態也不可能親近地說話。', 1, 1, 2);
305 | INSERT INTO `paragraph` VALUES (180, '「我把桌上的藥拿過來了。最好吃點東西後再吃藥,不過你現在有食欲嗎?」', 1, 1, 2);
306 | INSERT INTO `paragraph` VALUES (181, '「嗯,算有吧。」', 1, 1, 2);
307 | INSERT INTO `paragraph` VALUES (182, '「是嗎?那我煮了稀飯,你吃一點吧。」', 1, 1, 2);
308 | INSERT INTO `paragraph` VALUES (183, '「……咦?你親手煮的?」', 1, 1, 2);
309 | INSERT INTO `paragraph` VALUES (184, '「除了我還有誰?不想要的話,我就自己吃了。」', 1, 1, 2);
310 | INSERT INTO `paragraph` VALUES (185, '「不不,我吃,請讓我吃吧。」', 1, 1, 2);
311 | INSERT INTO `paragraph` VALUES (186, '周想都沒想過真晝除了照料自己以外,還會為他下廚煮稀飯,一時間有點驚慌失措。', 1, 1, 2);
312 | INSERT INTO `paragraph` VALUES (187, '老實說,雖然真晝的廚藝是個未知數,但他沒听說過對方在家政課上失敗之類的傳聞,應該不會太糟吧。', 1, 1, 2);
313 | INSERT INTO `paragraph` VALUES (188, '見周立刻低下頭回答要吃,真晝有些傻眼,不過她還是點了點頭,然後把放在邊桌上的體溫計遞給他。', 1, 1, 2);
314 | INSERT INTO `paragraph` VALUES (189, '「我去把稀飯端來,你先量一下體溫。」', 1, 1, 2);
315 | INSERT INTO `paragraph` VALUES (190, '「嗯。」', 1, 1, 2);
316 | INSERT INTO `paragraph` VALUES (191, '周依言照辦。當他解開襯衫前襟並拿出體溫計的時候,真晝忽地別開臉。', 1, 1, 2);
317 | INSERT INTO `paragraph` VALUES (192, '「請等我離開房間以後再量!」', 1, 1, 2);
318 | INSERT INTO `paragraph` VALUES (193, '周朝語氣略微慌張的真晝看去,只見她的臉上泛起淡淡的紅暈。', 1, 1, 2);
319 | INSERT INTO `paragraph` VALUES (194, '他詫異地心想,男人的胸膛又不像女孩子一樣需要遮起來。話雖如此,她可能不習慣瞧見他人裸露的肌膚,周只是敞開前襟,她就明顯地慌了手腳。', 1, 1, 2);
320 | INSERT INTO `paragraph` VALUES (195, '真晝白皙的臉頰染上了淡淡的薔薇色,臉依舊撇向一旁,身體微微發抖。不知道是不是錯覺,她的耳朵似乎也染上了顏色,可見她有多麼害羞。', 1, 1, 2);
321 | INSERT INTO `paragraph` VALUES (196, '(……啊,好像有點懂周圍的男生為什麼一直說她可愛了。)', 1, 1, 2);
322 | INSERT INTO `paragraph` VALUES (197, '周也認同真晝確實是個美少女,但並沒有更進一步的感想。對方是很美麗、可愛沒錯,但也僅止于此。', 1, 1, 2);
323 | INSERT INTO `paragraph` VALUES (198, '那或許該說是人造物之美──給人一種近似藝術品的印象。', 1, 1, 2);
324 | INSERT INTO `paragraph` VALUES (199, '然而,她像現在這樣有點害羞又驚慌、增添一絲生氣的模樣,反而看起來特別可愛。', 1, 1, 2);
325 | INSERT INTO `paragraph` VALUES (200, '「……那你快去拿稀飯過來不就好了?」', 1, 1, 2);
326 | INSERT INTO `paragraph` VALUES (201, '「不、不用你說我也會去。」', 1, 1, 2);
327 | INSERT INTO `paragraph` VALUES (202, '(插圖008)', 1, 1, 2);
328 | INSERT INTO `paragraph` VALUES (203, '不過,兩人的關系並沒有親密到周能坦率地夸她可愛的程度。況且要是說出口,肯定會被她以異樣的眼光看待,于是他將這番感想吞了回去。', 1, 1, 2);
329 | INSERT INTO `paragraph` VALUES (204, '周一副不怎麼感興趣地那麼一說後,真晝就踩著啪嗒啪嗒的腳步聲快步走出了房間。', 1, 1, 2);
330 | INSERT INTO `paragraph` VALUES (205, '她的動作有些遲緩,大概是因為感到動搖,或是房間太亂的緣故吧。八成是後者。', 1, 1, 2);
331 | INSERT INTO `paragraph` VALUES (206, '周精神恍惚地目送她離開之後,呼出一口算不上嘆息的長氣,心里想著︰事情怎麼會變成這樣?', 1, 1, 2);
332 | INSERT INTO `paragraph` VALUES (207, '(……唉,大概是因為責任感和罪惡感吧。)', 1, 1, 2);
333 | INSERT INTO `paragraph` VALUES (208, '一般而言,女孩子應該不會跑進不太熟的男性家里照料病人。畢竟要是被欺負還是怎樣的話,事情就嚴重了。', 1, 1, 2);
334 | INSERT INTO `paragraph` VALUES (209, '真晝甘冒風險做出照料病人的選擇,看得出她對此非常介意。加上周的態度明顯對她沒有興趣,說不定這才是讓她安心的主要原因。', 1, 1, 2);
335 | INSERT INTO `paragraph` VALUES (210, '不管怎樣,真晝是不得已才來照顧他的,這一點應該可以肯定。', 1, 1, 2);
336 | INSERT INTO `paragraph` VALUES (211, '「……我拿來了。」', 1, 1, 2);
337 | INSERT INTO `paragraph` VALUES (212, '周以微微發熱的腦子想著這些事的時候,真晝有些拘謹地敲了敲門。', 1, 1, 2);
338 | INSERT INTO `paragraph` VALUES (213, '她似乎擔心周還沒穿好衣服,所以沒有馬上進入房間。這時,周才想起自己把衣服解開是為了量體溫。', 1, 1, 2);
339 | INSERT INTO `paragraph` VALUES (214, '「我還沒量體溫。」', 1, 1, 2);
340 | INSERT INTO `paragraph` VALUES (215, '「不是跟你說了,在我離開的時候量好嗎……」', 1, 1, 2);
341 | INSERT INTO `paragraph` VALUES (216, '「抱歉,我剛剛在發呆。」', 1, 1, 2);
342 | INSERT INTO `paragraph` VALUES (217, '周老實地道歉後,將體溫計夾到腋下。沒多久,便傳來有些模糊的電子聲。', 1, 1, 2);
343 | INSERT INTO `paragraph` VALUES (218, '他拿起體溫計,只見顯示螢幕上出現三十八度三的數字。雖然不需要去醫院,但這樣的體溫還是偏高。', 1, 1, 2);
344 | INSERT INTO `paragraph` VALUES (219, '接著他穿好衣服,向遲遲不打算進來的真晝喊道「好了」之後,真晝這才端著盛放一口陶鍋的托盤,忐忑不安地走進來。', 1, 1, 2);
345 | INSERT INTO `paragraph` VALUES (220, '似乎是看到周把衣服整理好的關系,她明顯松了口氣。', 1, 1, 2);
346 | INSERT INTO `paragraph` VALUES (221, '「幾度?」', 1, 1, 2);
347 | INSERT INTO `paragraph` VALUES (222, '「三八點三。吃藥後睡一覺就會好了。」', 1, 1, 2);
348 | INSERT INTO `paragraph` VALUES (223, '「……市售的成藥都只是針對癥狀,無法消滅病毒本身。你還是必須讓身體好好休息,使免疫系統發揮作用。」', 1, 1, 2);
349 | INSERT INTO `paragraph` VALUES (224, '盡管被念了幾句,可是周知道真晝是在擔心自己,所以總覺得挺不好意思的。', 1, 1, 2);
350 | INSERT INTO `paragraph` VALUES (225, '真晝嘆了口氣說「真拿你沒辦法」,同時將托盤連同上面的陶鍋一起放在邊桌上,然後掀起鍋蓋。', 1, 1, 2);
351 | INSERT INTO `paragraph` VALUES (226, '鍋子里是放了梅干的稀飯。可能是考慮到對胃的負擔,所以並不是全粥,而是加了更多水的稀飯,大概算是七分粥。', 1, 1, 2);
352 | INSERT INTO `paragraph` VALUES (227, '里面放入梅干,應該不是為了增添味道,而是听說它可以治感冒的關系。', 1, 1, 2);
353 | INSERT INTO `paragraph` VALUES (228, '鍋子沒有冒出熱氣,卻傳來一點余溫。看樣子,這鍋稀飯不是剛做好的,而是做好之後刻意放涼過。', 1, 1, 2);
354 | INSERT INTO `paragraph` VALUES (229, '真晝不顧直盯著稀飯看的周,動作俐落地把稀飯盛到碗里。梅干細細地散在稀飯里面,籽也細心地挑掉了。紅色的梅干肉混入白色米湯中,顯得相當清爽。', 1, 1, 2);
355 | INSERT INTO `paragraph` VALUES (230, '「請用。應該不會燙了。」', 1, 1, 2);
356 | INSERT INTO `paragraph` VALUES (231, '「嗯,謝啦。」', 1, 1, 2);
357 | INSERT INTO `paragraph` VALUES (232, '周接過碗,卻只是拿著湯匙,直盯著稀飯看。見狀,真晝納悶地問︰', 1, 1, 2);
358 | INSERT INTO `paragraph` VALUES (233, '「……怎麼了?想讓我喂你嗎?我可不提供那種服務。」', 1, 1, 2);
359 | INSERT INTO `paragraph` VALUES (234, '「誰說要你喂了……只是很驚訝你還會做飯。」', 1, 1, 2);
360 | INSERT INTO `paragraph` VALUES (235, '「一個人住的話,當然會做啊。」', 1, 1, 2);
361 | INSERT INTO `paragraph` VALUES (236, '對于生活無法自理的周來說,這話听起來相當刺耳。', 1, 1, 2);
362 | INSERT INTO `paragraph` VALUES (237, '「……藤宮同學你在考慮做飯之前,最好先把房間整理一下比較好。」', 1, 1, 2);
363 | INSERT INTO `paragraph` VALUES (238, '「您說得對。」', 1, 1, 2);
364 | INSERT INTO `paragraph` VALUES (239, '真晝似乎大概猜到了周在想什麼,連忙開口叮囑。周低聲答應著,一邊用湯匙舀起一口稀飯送進嘴里,試圖藉此敷衍過去。', 1, 1, 2);
365 | INSERT INTO `paragraph` VALUES (240, '稀飯濃稠的味道在舌頭上擴散開來,鹽放得不多,十足襯托出了米的原味。', 1, 1, 2);
366 | INSERT INTO `paragraph` VALUES (241, '拌開的梅干肉帶來溫和的酸味與咸味,增添了粥的風味並形成絕妙的平衡。', 1, 1, 2);
367 | INSERT INTO `paragraph` VALUES (242, '周不太喜歡吃很咸的梅干,更偏好這種微甜的溫和酸味。要是沒感冒的話,他想直接把梅干放到白飯上配著吃或是做成茶泡飯。', 1, 1, 2);
368 | INSERT INTO `paragraph` VALUES (243, '「好吃。」', 1, 1, 2);
369 | INSERT INTO `paragraph` VALUES (244, '「謝謝夸獎。雖說只是煮稀飯的話,誰來煮都差不多呢。」', 1, 1, 2);
370 | INSERT INTO `paragraph` VALUES (245, '真晝裝作一本正經的樣子回答,臉上卻隱隱浮現一抹微笑。', 1, 1, 2);
371 | INSERT INTO `paragraph` VALUES (246, '那笑容含有幾分安心的氣息,和在學校偶爾能見到的客套笑容不同,令周不禁凝視著她的臉龐。', 1, 1, 2);
372 | INSERT INTO `paragraph` VALUES (247, '「……藤宮同學?」', 1, 1, 2);
373 | INSERT INTO `paragraph` VALUES (248, '「啊,沒事。」', 1, 1, 2);
374 | INSERT INTO `paragraph` VALUES (249, '柔和的笑容只出現一瞬間就很快地消失了,總覺得很可惜。', 1, 1, 2);
375 | INSERT INTO `paragraph` VALUES (250, '周心里這麼想著,但並沒有說出口。他只是再次一小口一小口地吃著稀飯,打算掩飾過去。', 1, 1, 2);
376 | INSERT INTO `paragraph` VALUES (251, '「……總之,你今天就靜養吧,記得多補充水分。還有,要擦汗的話就用這個,臉盆里面有裝水,毛巾沾濕以後要擰乾再擦喔。」', 1, 1, 2);
377 | INSERT INTO `paragraph` VALUES (252, '等周吃完飯後,真晝勤快地準備好未開封的運動飲料、裝水的臉盆和毛巾,還有備用的退熱貼,並將東西一一放在邊桌上。', 1, 1, 2);
378 | INSERT INTO `paragraph` VALUES (253, '再怎麼說,都不可能在不熟識的異性家里留宿,況且那樣周也會覺得不自在,所以他很感謝真晝這番行動。', 1, 1, 2);
379 | INSERT INTO `paragraph` VALUES (254, '在周的注視下,真晝檢查著還有沒有缺什麼東西。', 1, 1, 2);
380 | INSERT INTO `paragraph` VALUES (255, '(……沒想到她會出于責任感,照顧得這麼無微不至。)', 1, 1, 2);
381 | INSERT INTO `paragraph` VALUES (256, '雖然講話毫不留情又很冷淡,但她做起事來卻相當認真勤快。周不禁苦笑,看來他也逐漸習慣了這樣的真晝。', 1, 1, 2);
382 | INSERT INTO `paragraph` VALUES (257, '(她對往後就沒有交集的人還真客氣。)', 1, 1, 2);
383 | INSERT INTO `paragraph` VALUES (258, '之後八成不會再和她有什麼關聯了吧。畢竟她只是在機緣巧合下,照顧自己一次罷了。', 1, 1, 2);
384 | INSERT INTO `paragraph` VALUES (259, '沒錯,既然以後不會接觸,就問問那件他很在意的事吧。', 1, 1, 2);
385 | INSERT INTO `paragraph` VALUES (260, '也許是藥效發作的關系,盡管倦怠感依舊沒有減輕,但燒似乎退了一些,周感覺思緒比睡前清晰不少。', 1, 1, 2);
386 | INSERT INTO `paragraph` VALUES (261, '「呃,可以問你一件事嗎?」', 1, 1, 2);
387 | INSERT INTO `paragraph` VALUES (262, '「什麼事?」', 1, 1, 2);
388 | INSERT INTO `paragraph` VALUES (263, '真晝擺放好必要的物品之後,轉向周問道。', 1, 1, 2);
389 | INSERT INTO `paragraph` VALUES (264, '「那時候你為什麼要在雨中坐在秋千上?跟男朋友吵架了嗎?」', 1, 1, 2);
390 | INSERT INTO `paragraph` VALUES (265, '周一直很在意導致他生病受人照料的那個契機──也就是昨天所發生的事情。', 1, 1, 2);
391 | INSERT INTO `paragraph` VALUES (266, '那個雨天,真晝坐在秋千上擺蕩著。她為什麼會在那里呢?', 1, 1, 2);
392 | INSERT INTO `paragraph` VALUES (267, '正是因為很在意她那如同迷路孩子般的眼神,周才會硬把傘借給她。', 1, 1, 2);
393 | INSERT INTO `paragraph` VALUES (268, '可是,他並不知道真晝為什麼會露出那樣的表情。', 1, 1, 2);
394 | INSERT INTO `paragraph` VALUES (269, '那看起來像是在等待某人的樣子,因此周胡亂猜測,她是不是跟交往中的男朋友吵架之類的。真晝聞言,一臉受不了地看著他說︰', 1, 1, 2);
395 | INSERT INTO `paragraph` VALUES (270, '「很抱歉,我才沒有男朋友,也沒有打算交男朋友。」', 1, 1, 2);
396 | INSERT INTO `paragraph` VALUES (271, '「啊?為什麼?」', 1, 1, 2);
397 | INSERT INTO `paragraph` VALUES (272, '「我倒要問你,為什麼會以我有男朋友為前提呢?」', 1, 1, 2);
398 | INSERT INTO `paragraph` VALUES (273, '「看你那麼受歡迎的樣子,我還以為會有一、兩個。」', 1, 1, 2);
399 | INSERT INTO `paragraph` VALUES (274, '對正在和真晝交談的周來說,她是個意外地充滿人情味、個性有些強勢的普通少女。然而,她在旁人眼中並非如此。', 1, 1, 2);
400 | INSERT INTO `paragraph` VALUES (275, '她是個清純可愛、乖巧謙虛的美少女,擁有引人注目的端正美貌,甚至足以被稱作天使。盡管個子嬌小,身材卻凹凸有致。柔弱且能激發他人保護欲的氣質,與那身材曲線相輔相成,簡直完美體現了所有男生的理想。', 1, 1, 2);
401 | INSERT INTO `paragraph` VALUES (276, '再加上總是保持學年第一的成績,體育全能,還有今天周才見識到、可能還不錯的廚藝。可想而知,她在男性之間一定很受歡迎。', 1, 1, 2);
402 | INSERT INTO `paragraph` VALUES (277, '周曾經見過別人向她搭訕攀談,也知道班上有不少同學都對她抱持好感。', 1, 1, 2);
403 | INSERT INTO `paragraph` VALUES (278, '所以才沒想到,她居然會在那種任君挑選的狀況下,不曾跟任何一個人交往。', 1, 1, 2);
404 | INSERT INTO `paragraph` VALUES (279, '周這麼想,因此用了「一、兩個」的說法。然而,一听到他這麼說,真晝就板起臉來,然後露出扭曲的表情。', 1, 1, 2);
405 | INSERT INTO `paragraph` VALUES (280, '「我沒有,我也不記得自己是那種跟好幾個人交往、沒節操的人。絕對不可能。」', 1, 1, 2);
406 | INSERT INTO `paragraph` VALUES (281, '見真晝的眼神一下子冷淡得可怕,而且冷漠地予以否定,周立刻明白自己踩到了地雷。', 1, 1, 2);
407 | INSERT INTO `paragraph` VALUES (282, '也許是感冒的緣故,周突然感到一陣惡寒,總覺得連房間都變得冷颼颼的。', 1, 1, 2);
408 | INSERT INTO `paragraph` VALUES (283, '「抱歉,我沒那個意思。是我說錯話了。」', 1, 1, 2);
409 | INSERT INTO `paragraph` VALUES (284, '「……不會,我也一時頭腦發熱,有點情緒化。對不起。」', 1, 1, 2);
410 | INSERT INTO `paragraph` VALUES (285, '不過,在周低頭道歉之後,冰冷的氛圍便很快消散了。', 1, 1, 2);
411 | INSERT INTO `paragraph` VALUES (286, '與其說是頭腦發熱,周更覺得剛才那氣氛像是刮起了暴風雪,只是他不敢把這話說出口。', 1, 1, 2);
412 | INSERT INTO `paragraph` VALUES (287, '「總之,我並不是因為那方面的原因才待在雨中,只是想讓腦袋冷靜一下而已……害你因為擔心我而感冒,倒是讓我覺得很抱歉。」', 1, 1, 2);
413 | INSERT INTO `paragraph` VALUES (288, '「沒什麼啦,反正是我自己硬要借傘給你。況且,正因為是我擅自這麼做的,所以不希望你因此懷有罪惡感。畢竟,這大概是我最後一次和椎名你有交集吧。」', 1, 1, 2);
414 | INSERT INTO `paragraph` VALUES (289, '果不其然,真晝是因感到內疚才會照顧他的。她听完周後半部分的話後眨了眨眼,有些驚訝地看著他。', 1, 1, 2);
415 | INSERT INTO `paragraph` VALUES (290, '她應該是對「最後一次有交集」這個說法有點在意。', 1, 1, 2);
416 | INSERT INTO `paragraph` VALUES (291, '「我們也沒什麼接觸的機會,當然不會再有交集吧。就算大家都說你是年級第一的美少女、才女,還是天使什麼的,我也沒打算跟你發展什麼關系。你以為我是想讓你欠人情,然後趁機得手嗎?」', 1, 1, 2);
417 | INSERT INTO `paragraph` VALUES (292, '看到真晝尷尬地撇開視線,周苦笑著心想︰果然如此。', 1, 1, 2);
418 | INSERT INTO `paragraph` VALUES (293, '這應該不是她本人自作多情,而是確實曾經發生過那樣的事。', 1, 1, 2);
419 | INSERT INTO `paragraph` VALUES (294, '賣美少女人情以藉機拉進關系,這樣的方法的確行得通。', 1, 1, 2);
420 | INSERT INTO `paragraph` VALUES (295, '真晝似乎有過好幾次這種經驗,也難怪那個雨天她會表現得如此警惕。既然是為了自衛,那就不能怪她了。', 1, 1, 2);
421 | INSERT INTO `paragraph` VALUES (296, '「被不喜歡的男生糾纏,你也覺得很麻煩吧。」', 1, 1, 2);
422 | INSERT INTO `paragraph` VALUES (297, '「是沒錯。」', 1, 1, 2);
423 | INSERT INTO `paragraph` VALUES (298, '「我就知道。」', 1, 1, 2);
424 | INSERT INTO `paragraph` VALUES (299, '听到她本人予以肯定,周反而感到有趣。', 1, 1, 2);
425 | INSERT INTO `paragraph` VALUES (300, '就算大家把她捧上天,說她是乖巧的模範生和可愛的天使,但她也有喜歡、討厭和感到厭煩的事情。這讓周多少產生了一點親近感。', 1, 1, 2);
426 | INSERT INTO `paragraph` VALUES (301, '真晝似乎覺得自己不小心說溜嘴,用隱含怨氣的目光盯著誘使她失言的周。', 1, 1, 2);
427 | INSERT INTO `paragraph` VALUES (302, '她也是個有感情的人,這就是最好的證明。', 1, 1, 2);
428 | INSERT INTO `paragraph` VALUES (303, '「有什麼關系?那樣我反而安心了。原來天使也和平常人一樣有這種困擾。」', 1, 1, 2);
429 | INSERT INTO `paragraph` VALUES (304, '「……請別那樣叫我。」', 1, 1, 2);
430 | INSERT INTO `paragraph` VALUES (305, '看來天使這個綽號讓她感到很難為情,真晝繼續對周投以不滿的眼神。', 1, 1, 2);
431 | INSERT INTO `paragraph` VALUES (306, '這個反應也讓周覺得有趣,于是他又笑了。', 1, 1, 2);
432 | INSERT INTO `paragraph` VALUES (307, '「總之,沒什麼事情的話,不會特地去麻煩你啦。」', 1, 1, 2);
433 | INSERT INTO `paragraph` VALUES (308, '周如此斷言。真晝聞言,有點驚訝地睜大眼楮,然後微微露出苦笑。', 1, 1, 2);
434 | INSERT INTO `paragraph` VALUES (309, '周躺在床上呆呆地望著天花板,回想起真晝點了點頭之後回去的身影。', 1, 1, 2);
435 | INSERT INTO `paragraph` VALUES (310, '盡管藥效已發揮作用,身體還是很疲憊。一旦放松下來,他很快就會陷入夢鄉吧。', 1, 1, 2);
436 | INSERT INTO `paragraph` VALUES (311, '周閉上眼楮,回想今天發生的事情。', 1, 1, 2);
437 | INSERT INTO `paragraph` VALUES (312, '有天使(毒舌系)在病床邊照料自己,這種事不管說給誰听都不可能相信,而且這也不是能到處說的事情。', 1, 1, 2);
438 | INSERT INTO `paragraph` VALUES (313, '今天發生的事,是周與真晝兩人之間的秘密。', 1, 1, 2);
439 | INSERT INTO `paragraph` VALUES (314, '秘密──這樣的形容莫名令人感到別扭。明明只是因為怕麻煩,他才決定最好不要跟別人說的。', 1, 1, 2);
440 | INSERT INTO `paragraph` VALUES (315, '從明天開始,他們就只是交情不深的外人了。', 1, 1, 2);
441 | INSERT INTO `paragraph` VALUES (316, '周這麼告訴自己,然後慢慢沉入夢鄉。', 1, 1, 2);
442 |
443 | -- ----------------------------
444 | -- Table structure for user
445 | -- ----------------------------
446 | DROP TABLE IF EXISTS `user`;
447 | CREATE TABLE `user` (
448 | `id` int NOT NULL AUTO_INCREMENT,
449 | `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
450 | `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
451 | `salt` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
452 | PRIMARY KEY (`id`) USING BTREE
453 | ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
454 |
455 | -- ----------------------------
456 | -- Records of user
457 | -- ----------------------------
458 | INSERT INTO `user` VALUES (1, 'admin', 'admin', NULL);
459 |
460 | -- ----------------------------
461 | -- Table structure for volume
462 | -- ----------------------------
463 | DROP TABLE IF EXISTS `volume`;
464 | CREATE TABLE `volume` (
465 | `id` int NOT NULL AUTO_INCREMENT,
466 | `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
467 | `book_id` int NULL DEFAULT NULL,
468 | PRIMARY KEY (`id`) USING BTREE
469 | ) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
470 |
471 | -- ----------------------------
472 | -- Records of volume
473 | -- ----------------------------
474 | INSERT INTO `volume` VALUES (1, '第一卷', 1);
475 | INSERT INTO `volume` VALUES (2, '第二卷', 1);
476 | INSERT INTO `volume` VALUES (3, '第三卷', 1);
477 | INSERT INTO `volume` VALUES (4, '第四卷', 1);
478 | INSERT INTO `volume` VALUES (5, '第五卷', 1);
479 |
480 | SET FOREIGN_KEY_CHECKS = 1;
481 |
--------------------------------------------------------------------------------
/mvnw:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | # ----------------------------------------------------------------------------
3 | # Licensed to the Apache Software Foundation (ASF) under one
4 | # or more contributor license agreements. See the NOTICE file
5 | # distributed with this work for additional information
6 | # regarding copyright ownership. The ASF licenses this file
7 | # to you under the Apache License, Version 2.0 (the
8 | # "License"); you may not use this file except in compliance
9 | # with the License. You may obtain a copy of the License at
10 | #
11 | # https://www.apache.org/licenses/LICENSE-2.0
12 | #
13 | # Unless required by applicable law or agreed to in writing,
14 | # software distributed under the License is distributed on an
15 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 | # KIND, either express or implied. See the License for the
17 | # specific language governing permissions and limitations
18 | # under the License.
19 | # ----------------------------------------------------------------------------
20 |
21 | # ----------------------------------------------------------------------------
22 | # Maven Start Up Batch script
23 | #
24 | # Required ENV vars:
25 | # ------------------
26 | # JAVA_HOME - location of a JDK home dir
27 | #
28 | # Optional ENV vars
29 | # -----------------
30 | # M2_HOME - location of maven2's installed home dir
31 | # MAVEN_OPTS - parameters passed to the Java VM when running Maven
32 | # e.g. to debug Maven itself, use
33 | # set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
34 | # MAVEN_SKIP_RC - flag to disable loading of mavenrc files
35 | # ----------------------------------------------------------------------------
36 |
37 | if [ -z "$MAVEN_SKIP_RC" ] ; then
38 |
39 | if [ -f /usr/local/etc/mavenrc ] ; then
40 | . /usr/local/etc/mavenrc
41 | fi
42 |
43 | if [ -f /etc/mavenrc ] ; then
44 | . /etc/mavenrc
45 | fi
46 |
47 | if [ -f "$HOME/.mavenrc" ] ; then
48 | . "$HOME/.mavenrc"
49 | fi
50 |
51 | fi
52 |
53 | # OS specific support. $var _must_ be set to either true or false.
54 | cygwin=false;
55 | darwin=false;
56 | mingw=false
57 | case "`uname`" in
58 | CYGWIN*) cygwin=true ;;
59 | MINGW*) mingw=true;;
60 | Darwin*) darwin=true
61 | # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
62 | # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
63 | if [ -z "$JAVA_HOME" ]; then
64 | if [ -x "/usr/libexec/java_home" ]; then
65 | export JAVA_HOME="`/usr/libexec/java_home`"
66 | else
67 | export JAVA_HOME="/Library/Java/Home"
68 | fi
69 | fi
70 | ;;
71 | esac
72 |
73 | if [ -z "$JAVA_HOME" ] ; then
74 | if [ -r /etc/gentoo-release ] ; then
75 | JAVA_HOME=`java-config --jre-home`
76 | fi
77 | fi
78 |
79 | if [ -z "$M2_HOME" ] ; then
80 | ## resolve links - $0 may be a link to maven's home
81 | PRG="$0"
82 |
83 | # need this for relative symlinks
84 | while [ -h "$PRG" ] ; do
85 | ls=`ls -ld "$PRG"`
86 | link=`expr "$ls" : '.*-> \(.*\)$'`
87 | if expr "$link" : '/.*' > /dev/null; then
88 | PRG="$link"
89 | else
90 | PRG="`dirname "$PRG"`/$link"
91 | fi
92 | done
93 |
94 | saveddir=`pwd`
95 |
96 | M2_HOME=`dirname "$PRG"`/..
97 |
98 | # make it fully qualified
99 | M2_HOME=`cd "$M2_HOME" && pwd`
100 |
101 | cd "$saveddir"
102 | # echo Using m2 at $M2_HOME
103 | fi
104 |
105 | # For Cygwin, ensure paths are in UNIX format before anything is touched
106 | if $cygwin ; then
107 | [ -n "$M2_HOME" ] &&
108 | M2_HOME=`cygpath --unix "$M2_HOME"`
109 | [ -n "$JAVA_HOME" ] &&
110 | JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
111 | [ -n "$CLASSPATH" ] &&
112 | CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
113 | fi
114 |
115 | # For Mingw, ensure paths are in UNIX format before anything is touched
116 | if $mingw ; then
117 | [ -n "$M2_HOME" ] &&
118 | M2_HOME="`(cd "$M2_HOME"; pwd)`"
119 | [ -n "$JAVA_HOME" ] &&
120 | JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
121 | fi
122 |
123 | if [ -z "$JAVA_HOME" ]; then
124 | javaExecutable="`which javac`"
125 | if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
126 | # readlink(1) is not available as standard on Solaris 10.
127 | readLink=`which readlink`
128 | if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
129 | if $darwin ; then
130 | javaHome="`dirname \"$javaExecutable\"`"
131 | javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
132 | else
133 | javaExecutable="`readlink -f \"$javaExecutable\"`"
134 | fi
135 | javaHome="`dirname \"$javaExecutable\"`"
136 | javaHome=`expr "$javaHome" : '\(.*\)/bin'`
137 | JAVA_HOME="$javaHome"
138 | export JAVA_HOME
139 | fi
140 | fi
141 | fi
142 |
143 | if [ -z "$JAVACMD" ] ; then
144 | if [ -n "$JAVA_HOME" ] ; then
145 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
146 | # IBM's JDK on AIX uses strange locations for the executables
147 | JAVACMD="$JAVA_HOME/jre/sh/java"
148 | else
149 | JAVACMD="$JAVA_HOME/bin/java"
150 | fi
151 | else
152 | JAVACMD="`\\unset -f command; \\command -v java`"
153 | fi
154 | fi
155 |
156 | if [ ! -x "$JAVACMD" ] ; then
157 | echo "Error: JAVA_HOME is not defined correctly." >&2
158 | echo " We cannot execute $JAVACMD" >&2
159 | exit 1
160 | fi
161 |
162 | if [ -z "$JAVA_HOME" ] ; then
163 | echo "Warning: JAVA_HOME environment variable is not set."
164 | fi
165 |
166 | CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
167 |
168 | # traverses directory structure from process work directory to filesystem root
169 | # first directory with .mvn subdirectory is considered project base directory
170 | find_maven_basedir() {
171 |
172 | if [ -z "$1" ]
173 | then
174 | echo "Path not specified to find_maven_basedir"
175 | return 1
176 | fi
177 |
178 | basedir="$1"
179 | wdir="$1"
180 | while [ "$wdir" != '/' ] ; do
181 | if [ -d "$wdir"/.mvn ] ; then
182 | basedir=$wdir
183 | break
184 | fi
185 | # workaround for JBEAP-8937 (on Solaris 10/Sparc)
186 | if [ -d "${wdir}" ]; then
187 | wdir=`cd "$wdir/.."; pwd`
188 | fi
189 | # end of workaround
190 | done
191 | echo "${basedir}"
192 | }
193 |
194 | # concatenates all lines of a file
195 | concat_lines() {
196 | if [ -f "$1" ]; then
197 | echo "$(tr -s '\n' ' ' < "$1")"
198 | fi
199 | }
200 |
201 | BASE_DIR=`find_maven_basedir "$(pwd)"`
202 | if [ -z "$BASE_DIR" ]; then
203 | exit 1;
204 | fi
205 |
206 | ##########################################################################################
207 | # Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
208 | # This allows using the maven wrapper in projects that prohibit checking in binary data.
209 | ##########################################################################################
210 | if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
211 | if [ "$MVNW_VERBOSE" = true ]; then
212 | echo "Found .mvn/wrapper/maven-wrapper.jar"
213 | fi
214 | else
215 | if [ "$MVNW_VERBOSE" = true ]; then
216 | echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
217 | fi
218 | if [ -n "$MVNW_REPOURL" ]; then
219 | jarUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
220 | else
221 | jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
222 | fi
223 | while IFS="=" read key value; do
224 | case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
225 | esac
226 | done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
227 | if [ "$MVNW_VERBOSE" = true ]; then
228 | echo "Downloading from: $jarUrl"
229 | fi
230 | wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
231 | if $cygwin; then
232 | wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
233 | fi
234 |
235 | if command -v wget > /dev/null; then
236 | if [ "$MVNW_VERBOSE" = true ]; then
237 | echo "Found wget ... using wget"
238 | fi
239 | if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
240 | wget "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
241 | else
242 | wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
243 | fi
244 | elif command -v curl > /dev/null; then
245 | if [ "$MVNW_VERBOSE" = true ]; then
246 | echo "Found curl ... using curl"
247 | fi
248 | if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
249 | curl -o "$wrapperJarPath" "$jarUrl" -f
250 | else
251 | curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
252 | fi
253 |
254 | else
255 | if [ "$MVNW_VERBOSE" = true ]; then
256 | echo "Falling back to using Java to download"
257 | fi
258 | javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
259 | # For Cygwin, switch paths to Windows format before running javac
260 | if $cygwin; then
261 | javaClass=`cygpath --path --windows "$javaClass"`
262 | fi
263 | if [ -e "$javaClass" ]; then
264 | if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
265 | if [ "$MVNW_VERBOSE" = true ]; then
266 | echo " - Compiling MavenWrapperDownloader.java ..."
267 | fi
268 | # Compiling the Java class
269 | ("$JAVA_HOME/bin/javac" "$javaClass")
270 | fi
271 | if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
272 | # Running the downloader
273 | if [ "$MVNW_VERBOSE" = true ]; then
274 | echo " - Running MavenWrapperDownloader.java ..."
275 | fi
276 | ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
277 | fi
278 | fi
279 | fi
280 | fi
281 | ##########################################################################################
282 | # End of extension
283 | ##########################################################################################
284 |
285 | export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
286 | if [ "$MVNW_VERBOSE" = true ]; then
287 | echo $MAVEN_PROJECTBASEDIR
288 | fi
289 | MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
290 |
291 | # For Cygwin, switch paths to Windows format before running java
292 | if $cygwin; then
293 | [ -n "$M2_HOME" ] &&
294 | M2_HOME=`cygpath --path --windows "$M2_HOME"`
295 | [ -n "$JAVA_HOME" ] &&
296 | JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
297 | [ -n "$CLASSPATH" ] &&
298 | CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
299 | [ -n "$MAVEN_PROJECTBASEDIR" ] &&
300 | MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
301 | fi
302 |
303 | # Provide a "standardized" way to retrieve the CLI args that will
304 | # work with both Windows and non-Windows executions.
305 | MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
306 | export MAVEN_CMD_LINE_ARGS
307 |
308 | WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
309 |
310 | exec "$JAVACMD" \
311 | $MAVEN_OPTS \
312 | $MAVEN_DEBUG_OPTS \
313 | -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
314 | "-Dmaven.home=${M2_HOME}" \
315 | "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
316 | ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
317 |
--------------------------------------------------------------------------------
/mvnw.cmd:
--------------------------------------------------------------------------------
1 | @REM ----------------------------------------------------------------------------
2 | @REM Licensed to the Apache Software Foundation (ASF) under one
3 | @REM or more contributor license agreements. See the NOTICE file
4 | @REM distributed with this work for additional information
5 | @REM regarding copyright ownership. The ASF licenses this file
6 | @REM to you under the Apache License, Version 2.0 (the
7 | @REM "License"); you may not use this file except in compliance
8 | @REM with the License. You may obtain a copy of the License at
9 | @REM
10 | @REM https://www.apache.org/licenses/LICENSE-2.0
11 | @REM
12 | @REM Unless required by applicable law or agreed to in writing,
13 | @REM software distributed under the License is distributed on an
14 | @REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 | @REM KIND, either express or implied. See the License for the
16 | @REM specific language governing permissions and limitations
17 | @REM under the License.
18 | @REM ----------------------------------------------------------------------------
19 |
20 | @REM ----------------------------------------------------------------------------
21 | @REM Maven Start Up Batch script
22 | @REM
23 | @REM Required ENV vars:
24 | @REM JAVA_HOME - location of a JDK home dir
25 | @REM
26 | @REM Optional ENV vars
27 | @REM M2_HOME - location of maven2's installed home dir
28 | @REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
29 | @REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
30 | @REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
31 | @REM e.g. to debug Maven itself, use
32 | @REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
33 | @REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
34 | @REM ----------------------------------------------------------------------------
35 |
36 | @REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
37 | @echo off
38 | @REM set title of command window
39 | title %0
40 | @REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
41 | @if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
42 |
43 | @REM set %HOME% to equivalent of $HOME
44 | if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
45 |
46 | @REM Execute a user defined script before this one
47 | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
48 | @REM check for pre script, once with legacy .bat ending and once with .cmd ending
49 | if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %*
50 | if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %*
51 | :skipRcPre
52 |
53 | @setlocal
54 |
55 | set ERROR_CODE=0
56 |
57 | @REM To isolate internal variables from possible post scripts, we use another setlocal
58 | @setlocal
59 |
60 | @REM ==== START VALIDATION ====
61 | if not "%JAVA_HOME%" == "" goto OkJHome
62 |
63 | echo.
64 | echo Error: JAVA_HOME not found in your environment. >&2
65 | echo Please set the JAVA_HOME variable in your environment to match the >&2
66 | echo location of your Java installation. >&2
67 | echo.
68 | goto error
69 |
70 | :OkJHome
71 | if exist "%JAVA_HOME%\bin\java.exe" goto init
72 |
73 | echo.
74 | echo Error: JAVA_HOME is set to an invalid directory. >&2
75 | echo JAVA_HOME = "%JAVA_HOME%" >&2
76 | echo Please set the JAVA_HOME variable in your environment to match the >&2
77 | echo location of your Java installation. >&2
78 | echo.
79 | goto error
80 |
81 | @REM ==== END VALIDATION ====
82 |
83 | :init
84 |
85 | @REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
86 | @REM Fallback to current working directory if not found.
87 |
88 | set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
89 | IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
90 |
91 | set EXEC_DIR=%CD%
92 | set WDIR=%EXEC_DIR%
93 | :findBaseDir
94 | IF EXIST "%WDIR%"\.mvn goto baseDirFound
95 | cd ..
96 | IF "%WDIR%"=="%CD%" goto baseDirNotFound
97 | set WDIR=%CD%
98 | goto findBaseDir
99 |
100 | :baseDirFound
101 | set MAVEN_PROJECTBASEDIR=%WDIR%
102 | cd "%EXEC_DIR%"
103 | goto endDetectBaseDir
104 |
105 | :baseDirNotFound
106 | set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
107 | cd "%EXEC_DIR%"
108 |
109 | :endDetectBaseDir
110 |
111 | IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
112 |
113 | @setlocal EnableExtensions EnableDelayedExpansion
114 | for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
115 | @endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
116 |
117 | :endReadAdditionalConfig
118 |
119 | SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
120 | set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
121 | set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
122 |
123 | set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
124 |
125 | FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
126 | IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
127 | )
128 |
129 | @REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
130 | @REM This allows using the maven wrapper in projects that prohibit checking in binary data.
131 | if exist %WRAPPER_JAR% (
132 | if "%MVNW_VERBOSE%" == "true" (
133 | echo Found %WRAPPER_JAR%
134 | )
135 | ) else (
136 | if not "%MVNW_REPOURL%" == "" (
137 | SET DOWNLOAD_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
138 | )
139 | if "%MVNW_VERBOSE%" == "true" (
140 | echo Couldn't find %WRAPPER_JAR%, downloading it ...
141 | echo Downloading from: %DOWNLOAD_URL%
142 | )
143 |
144 | powershell -Command "&{"^
145 | "$webclient = new-object System.Net.WebClient;"^
146 | "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
147 | "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
148 | "}"^
149 | "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
150 | "}"
151 | if "%MVNW_VERBOSE%" == "true" (
152 | echo Finished downloading %WRAPPER_JAR%
153 | )
154 | )
155 | @REM End of extension
156 |
157 | @REM Provide a "standardized" way to retrieve the CLI args that will
158 | @REM work with both Windows and non-Windows executions.
159 | set MAVEN_CMD_LINE_ARGS=%*
160 |
161 | %MAVEN_JAVA_EXE% ^
162 | %JVM_CONFIG_MAVEN_PROPS% ^
163 | %MAVEN_OPTS% ^
164 | %MAVEN_DEBUG_OPTS% ^
165 | -classpath %WRAPPER_JAR% ^
166 | "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^
167 | %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
168 | if ERRORLEVEL 1 goto error
169 | goto end
170 |
171 | :error
172 | set ERROR_CODE=1
173 |
174 | :end
175 | @endlocal & set ERROR_CODE=%ERROR_CODE%
176 |
177 | if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost
178 | @REM check for post script, once with legacy .bat ending and once with .cmd ending
179 | if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat"
180 | if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd"
181 | :skipRcPost
182 |
183 | @REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
184 | if "%MAVEN_BATCH_PAUSE%"=="on" pause
185 |
186 | if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE%
187 |
188 | cmd /C exit /B %ERROR_CODE%
189 |
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 |
6 | org.springframework.boot
7 | spring-boot-starter-parent
8 | 2.5.5
9 |
10 |
11 | com.sk
12 | wj-backend
13 | 0.0.1-SNAPSHOT
14 | wj-backend
15 | wj-backend
16 |
17 | 11
18 |
19 |
20 |
21 | org.apache.shiro
22 | shiro-spring
23 | 1.4.1
24 |
25 |
26 | org.springframework.boot
27 | spring-boot-starter-data-redis
28 |
29 |
30 | org.springframework.boot
31 | spring-boot-starter-thymeleaf
32 |
33 |
34 | org.springframework.boot
35 | spring-boot-starter-web
36 |
37 |
38 | org.mybatis.spring.boot
39 | mybatis-spring-boot-starter
40 | 2.2.0
41 |
42 |
43 |
44 | org.springframework.boot
45 | spring-boot-devtools
46 | runtime
47 | true
48 |
49 |
50 | mysql
51 | mysql-connector-java
52 | runtime
53 |
54 |
55 | org.springframework.boot
56 | spring-boot-starter-test
57 | test
58 |
59 |
60 | org.apache.commons
61 | commons-lang3
62 | 3.9
63 |
64 |
65 | org.projectlombok
66 | lombok
67 | 1.18.22
68 | provided
69 |
70 |
71 |
72 |
73 |
74 |
75 | org.springframework.boot
76 | spring-boot-maven-plugin
77 |
78 |
79 | true
80 |
81 |
82 |
83 |
84 |
85 | src/main/resources
86 |
87 | **/*.properties
88 | **/*.yml
89 | **/*.xml
90 |
91 | true
92 |
93 |
94 |
95 |
96 |
97 |
--------------------------------------------------------------------------------
/src/main/java/com/example/lightnovelbackend/LightNovelBackendApplication.java:
--------------------------------------------------------------------------------
1 | package com.example.lightnovelbackend;
2 |
3 | import org.mybatis.spring.annotation.MapperScan;
4 | import org.springframework.boot.SpringApplication;
5 | import org.springframework.boot.autoconfigure.SpringBootApplication;
6 |
7 | @SpringBootApplication
8 | @MapperScan("com.example.lightnovelbackend.dao")
9 | public class LightNovelBackendApplication {
10 |
11 | public static void main(String[] args) {
12 | SpringApplication.run(LightNovelBackendApplication.class, args);
13 | }
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/example/lightnovelbackend/config/MyWebConfigurer.java:
--------------------------------------------------------------------------------
1 | package com.example.lightnovelbackend.config;
2 |
3 | import org.springframework.boot.SpringBootConfiguration;
4 | import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
5 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
6 |
7 | @SpringBootConfiguration
8 | public class MyWebConfigurer implements WebMvcConfigurer {
9 | @Override
10 | public void addResourceHandlers(ResourceHandlerRegistry registry) {
11 | registry.addResourceHandler("/api/file/**").addResourceLocations("file:" + "D:/light-novel/img/");
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/com/example/lightnovelbackend/controller/BlogController.java:
--------------------------------------------------------------------------------
1 | package com.example.lightnovelbackend.controller;
2 |
3 | import com.example.lightnovelbackend.pojo.Blog;
4 | import com.example.lightnovelbackend.service.BlogService;
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.web.bind.annotation.CrossOrigin;
7 | import org.springframework.web.bind.annotation.GetMapping;
8 | import org.springframework.web.bind.annotation.RestController;
9 |
10 | import java.util.List;
11 |
12 | @RestController
13 | @CrossOrigin(origins = "*")
14 | public class BlogController {
15 | @Autowired
16 | BlogService blogService;
17 |
18 | @GetMapping("/api/blogs")
19 | public List getAllBlogs(){
20 | return blogService.getAllBlogs();
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/com/example/lightnovelbackend/controller/BookController.java:
--------------------------------------------------------------------------------
1 | package com.example.lightnovelbackend.controller;
2 |
3 | import com.example.lightnovelbackend.pojo.Book;
4 | import com.example.lightnovelbackend.service.BookService;
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.web.bind.annotation.*;
7 | import org.springframework.web.multipart.MultipartFile;
8 |
9 | import java.io.File;
10 | import java.io.IOException;
11 | import java.util.List;
12 | import java.util.UUID;
13 |
14 | @RestController
15 | @CrossOrigin(origins = "*")
16 | public class BookController {
17 | @Autowired
18 | BookService bookService;
19 |
20 | @GetMapping("/api/book")
21 | public Book getBook(Integer id){
22 | return bookService.getBook(id);
23 | }
24 | @GetMapping("/api/books")
25 | public List selectAll() throws Exception {
26 | return bookService.getAllBooks();
27 | }
28 |
29 | @PostMapping("/api/books_insert")
30 | public Book addBook(@RequestBody Book book) throws Exception {
31 | bookService.addBook(book);
32 | return book;
33 | }
34 |
35 | @PostMapping("/api/books_update")
36 | public Book updateBook(@RequestBody Book book) throws Exception {
37 | bookService.updateBook(book);
38 | return book;
39 | }
40 |
41 | @PostMapping("/api/delete")
42 | public void deleteBook(@RequestBody Integer id) throws Exception {
43 | bookService.deleteBook(id);
44 | }
45 |
46 |
47 | @GetMapping("/api/categories/{cid}/books")
48 | public List getBookByCategory(@PathVariable("cid") Integer cid) throws Exception {
49 | if (0 != cid) {
50 | return bookService.getBookByCategory(cid);
51 | } else {
52 | return selectAll();
53 | }
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/src/main/java/com/example/lightnovelbackend/controller/LoginController.java:
--------------------------------------------------------------------------------
1 | package com.example.lightnovelbackend.controller;
2 |
3 | import com.example.lightnovelbackend.pojo.User;
4 | import com.example.lightnovelbackend.service.UserService;
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.stereotype.Controller;
7 | import org.springframework.web.bind.annotation.CrossOrigin;
8 | import org.springframework.web.bind.annotation.PostMapping;
9 | import org.springframework.web.bind.annotation.RequestBody;
10 | import org.springframework.web.bind.annotation.ResponseBody;
11 | import org.springframework.web.util.HtmlUtils;
12 |
13 | import javax.servlet.http.HttpSession;
14 |
15 | @Controller
16 | @CrossOrigin(origins = "*")
17 | public class LoginController {
18 | @Autowired
19 | UserService userService;
20 |
21 | @PostMapping(value = "/api/login")
22 | @ResponseBody
23 | public Integer login(@RequestBody User requestUser, HttpSession session){
24 | String username=requestUser.getUsername();
25 | String password=requestUser.getPassword();
26 | username= HtmlUtils.htmlEscape(username);
27 | User user = userService.login(username, password);
28 | if (user==null){
29 | return -1;
30 | }else {
31 | session.setAttribute("user",user);
32 | return 1;
33 | }
34 | }
35 |
36 | @PostMapping("/api/register")
37 | @ResponseBody
38 | public Integer register(@RequestBody User user) {
39 | return userService.register(user);
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/src/main/java/com/example/lightnovelbackend/controller/TextController.java:
--------------------------------------------------------------------------------
1 | package com.example.lightnovelbackend.controller;
2 |
3 | import com.example.lightnovelbackend.pojo.Chapter;
4 | import com.example.lightnovelbackend.pojo.Paragraph;
5 | import com.example.lightnovelbackend.pojo.Volume;
6 | import com.example.lightnovelbackend.service.ChapterService;
7 | import com.example.lightnovelbackend.service.ParagraphService;
8 | import com.example.lightnovelbackend.service.VolumeService;
9 | import org.springframework.beans.factory.annotation.Autowired;
10 | import org.springframework.web.bind.annotation.CrossOrigin;
11 | import org.springframework.web.bind.annotation.GetMapping;
12 | import org.springframework.web.bind.annotation.RestController;
13 |
14 | import java.util.List;
15 |
16 | @RestController
17 | @CrossOrigin(origins = "*")
18 | public class TextController {
19 | @Autowired
20 | private VolumeService volumeService;
21 | @Autowired
22 | private ChapterService chapterService;
23 | @Autowired
24 | private ParagraphService paragraphService;
25 |
26 | @GetMapping("/api/volume")
27 | public List getVolumes(Integer book_id){
28 | return volumeService.getVolumes(book_id);
29 | }
30 |
31 | @GetMapping("/api/chapter")
32 | public List getChapters(Integer book_id, Integer volume_id){
33 | return chapterService.getChapters(book_id,volume_id);
34 | }
35 |
36 | @GetMapping("/api/paragraph")
37 | public List getParagraphs(Integer book_id,Integer volume_id,Integer chapter_id){
38 | return paragraphService.getParagraphs(book_id,volume_id,chapter_id);
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/src/main/java/com/example/lightnovelbackend/dao/BlogMapper.java:
--------------------------------------------------------------------------------
1 | package com.example.lightnovelbackend.dao;
2 |
3 | import com.example.lightnovelbackend.pojo.Blog;
4 | import org.springframework.stereotype.Repository;
5 |
6 | import java.util.List;
7 |
8 | @Repository
9 | public interface BlogMapper {
10 | public abstract List getAllBlogs();
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/example/lightnovelbackend/dao/BookMapper.java:
--------------------------------------------------------------------------------
1 | package com.example.lightnovelbackend.dao;
2 |
3 | import com.example.lightnovelbackend.pojo.Book;
4 | import com.example.lightnovelbackend.pojo.Category;
5 | import org.apache.ibatis.annotations.Param;
6 | import org.springframework.stereotype.Repository;
7 |
8 | import java.util.List;
9 |
10 | @Repository
11 | public interface BookMapper {
12 | public abstract void addBook(Book book);
13 | public abstract void updateBook(Book book);
14 | public abstract void deleteBook(@Param("id") Integer id);
15 | public abstract Book getBook(Integer id);
16 | public abstract List getAllBooks();
17 | public abstract List getBookByCategory(Integer id);
18 | public abstract List getBookByNameOrAuthor(@Param("key1") String key1, @Param("key2") String key2);
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/example/lightnovelbackend/dao/CategoryMapper.java:
--------------------------------------------------------------------------------
1 | package com.example.lightnovelbackend.dao;
2 |
3 | import com.example.lightnovelbackend.pojo.Category;
4 | import org.springframework.stereotype.Repository;
5 |
6 | import java.util.List;
7 |
8 | @Repository
9 | public interface CategoryMapper {
10 | public abstract List getAllCategories();
11 | public abstract Category getCategory(Integer id);
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/example/lightnovelbackend/dao/ChapterMapper.java:
--------------------------------------------------------------------------------
1 | package com.example.lightnovelbackend.dao;
2 |
3 | import com.example.lightnovelbackend.pojo.Chapter;
4 | import org.springframework.stereotype.Repository;
5 |
6 | import java.util.List;
7 |
8 | @Repository
9 | public interface ChapterMapper {
10 | public abstract List getChapters(Integer book_id, Integer volume_id);
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/example/lightnovelbackend/dao/ParagraphMapper.java:
--------------------------------------------------------------------------------
1 | package com.example.lightnovelbackend.dao;
2 |
3 | import com.example.lightnovelbackend.pojo.Paragraph;
4 | import org.springframework.stereotype.Repository;
5 |
6 | import java.util.List;
7 |
8 | @Repository
9 | public interface ParagraphMapper {
10 | public abstract List getParagraphs(Integer book_id, Integer volume_id, Integer chapter_id);
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/example/lightnovelbackend/dao/UserMapper.java:
--------------------------------------------------------------------------------
1 | package com.example.lightnovelbackend.dao;
2 |
3 | import com.example.lightnovelbackend.pojo.User;
4 | import org.apache.ibatis.annotations.Insert;
5 | import org.apache.ibatis.annotations.Select;
6 | import org.springframework.stereotype.Repository;
7 |
8 | @Repository
9 | public interface UserMapper {
10 | @Select("select * from user where username=#{username}")
11 | public abstract User findByUsername(String username);
12 |
13 | @Select("select * from user where username=#{username} and password=#{password}")
14 | public abstract User getByUsernameAndPassword(String username, String password);
15 |
16 | @Insert("insert into user value(#{username},#{password},#{salt})")
17 | public abstract void register(User user);
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/example/lightnovelbackend/dao/VolumeMapper.java:
--------------------------------------------------------------------------------
1 | package com.example.lightnovelbackend.dao;
2 |
3 | import com.example.lightnovelbackend.pojo.Volume;
4 | import org.springframework.stereotype.Repository;
5 |
6 | import java.util.List;
7 |
8 | @Repository
9 | public interface VolumeMapper {
10 | public abstract List getVolumes(Integer book_id);
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/example/lightnovelbackend/pojo/Blog.java:
--------------------------------------------------------------------------------
1 | package com.example.lightnovelbackend.pojo;
2 |
3 | import lombok.Data;
4 |
5 | @Data
6 | public class Blog {
7 | private Integer id;
8 | private String date;
9 | private String title;
10 | private String content;
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/example/lightnovelbackend/pojo/Book.java:
--------------------------------------------------------------------------------
1 | package com.example.lightnovelbackend.pojo;
2 |
3 | import lombok.Data;
4 |
5 | @Data
6 | public class Book {
7 | private Integer id;
8 | private String cover;
9 | private String title;
10 | private String author;
11 | private String date;
12 | private String press;
13 | private String abs;
14 | private Integer category_id;
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/example/lightnovelbackend/pojo/Category.java:
--------------------------------------------------------------------------------
1 | package com.example.lightnovelbackend.pojo;
2 |
3 | import lombok.Data;
4 |
5 | @Data
6 | public class Category {
7 | private Integer id;
8 | private String name;
9 | }
10 |
--------------------------------------------------------------------------------
/src/main/java/com/example/lightnovelbackend/pojo/Chapter.java:
--------------------------------------------------------------------------------
1 | package com.example.lightnovelbackend.pojo;
2 |
3 | import lombok.Data;
4 |
5 | @Data
6 | public class Chapter {
7 | private Integer id;
8 | private String title;
9 | private Integer book_id;
10 | private Integer volume_id;
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/example/lightnovelbackend/pojo/Paragraph.java:
--------------------------------------------------------------------------------
1 | package com.example.lightnovelbackend.pojo;
2 |
3 | import lombok.Data;
4 |
5 | @Data
6 | public class Paragraph {
7 | private Integer id;
8 | private String content;
9 | private Integer book_id;
10 | private Integer chapter_id;
11 | private Integer volume_id;
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/com/example/lightnovelbackend/pojo/User.java:
--------------------------------------------------------------------------------
1 | package com.example.lightnovelbackend.pojo;
2 |
3 | import lombok.Data;
4 |
5 | @Data
6 | public class User {
7 | private Integer id;
8 | private String username;
9 | private String password;
10 | private String salt;
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/example/lightnovelbackend/pojo/Volume.java:
--------------------------------------------------------------------------------
1 | package com.example.lightnovelbackend.pojo;
2 |
3 | import lombok.Data;
4 |
5 | @Data
6 | public class Volume {
7 | private Integer id;
8 | private String title;
9 | private Integer book_id;
10 | }
11 |
--------------------------------------------------------------------------------
/src/main/java/com/example/lightnovelbackend/service/BlogService.java:
--------------------------------------------------------------------------------
1 | package com.example.lightnovelbackend.service;
2 |
3 | import com.example.lightnovelbackend.dao.BlogMapper;
4 | import com.example.lightnovelbackend.pojo.Blog;
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.stereotype.Service;
7 |
8 | import java.util.List;
9 |
10 | @Service
11 | public class BlogService {
12 | @Autowired
13 | BlogMapper blogMapper;
14 |
15 | public List getAllBlogs(){
16 | return blogMapper.getAllBlogs();
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/com/example/lightnovelbackend/service/BookService.java:
--------------------------------------------------------------------------------
1 | package com.example.lightnovelbackend.service;
2 |
3 | import com.example.lightnovelbackend.dao.BookMapper;
4 | import com.example.lightnovelbackend.pojo.Book;
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.stereotype.Service;
7 |
8 | import java.util.List;
9 |
10 | @Service
11 | public class BookService {
12 | @Autowired
13 | BookMapper bookMapper;
14 |
15 | @Autowired
16 | CategoryService categoryService;
17 |
18 | public List getAllBooks() {
19 | return bookMapper.getAllBooks();
20 | }
21 |
22 | public Book getBook(Integer id){
23 | return bookMapper.getBook(id);
24 | }
25 |
26 | public void addBook(Book book) {
27 | bookMapper.addBook(book);
28 | }
29 |
30 | public void updateBook(Book book){
31 | bookMapper.updateBook(book);
32 | }
33 |
34 | public void deleteBook(int id) {
35 | bookMapper.deleteBook(id);
36 | }
37 |
38 | public List getBookByCategory(int cid) {
39 | return bookMapper.getBookByCategory(cid);
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/src/main/java/com/example/lightnovelbackend/service/CategoryService.java:
--------------------------------------------------------------------------------
1 | package com.example.lightnovelbackend.service;
2 |
3 | import com.example.lightnovelbackend.dao.CategoryMapper;
4 | import com.example.lightnovelbackend.pojo.Category;
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.stereotype.Service;
7 |
8 | import java.util.List;
9 |
10 | @Service
11 | public class CategoryService {
12 | @Autowired
13 | CategoryMapper categoryMapper;
14 |
15 | public List getAllCategories() {
16 | return categoryMapper.getAllCategories();
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/com/example/lightnovelbackend/service/ChapterService.java:
--------------------------------------------------------------------------------
1 | package com.example.lightnovelbackend.service;
2 |
3 | import com.example.lightnovelbackend.dao.ChapterMapper;
4 | import com.example.lightnovelbackend.pojo.Chapter;
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.stereotype.Service;
7 |
8 | import java.util.List;
9 |
10 | @Service
11 | public class ChapterService {
12 | @Autowired
13 | private ChapterMapper chapterMapper;
14 | public List getChapters(Integer book_id, Integer volume_id){
15 | return chapterMapper.getChapters(book_id,volume_id);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/java/com/example/lightnovelbackend/service/ParagraphService.java:
--------------------------------------------------------------------------------
1 | package com.example.lightnovelbackend.service;
2 |
3 | import com.example.lightnovelbackend.dao.ParagraphMapper;
4 | import com.example.lightnovelbackend.pojo.Paragraph;
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.stereotype.Service;
7 |
8 | import java.util.List;
9 |
10 | @Service
11 | public class ParagraphService {
12 | @Autowired
13 | private ParagraphMapper paragraphMapper;
14 | public List getParagraphs(Integer book_id,Integer volume_id,Integer chapter_id){
15 | return paragraphMapper.getParagraphs(book_id,volume_id,chapter_id);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/java/com/example/lightnovelbackend/service/UserService.java:
--------------------------------------------------------------------------------
1 | package com.example.lightnovelbackend.service;
2 |
3 | import com.example.lightnovelbackend.dao.UserMapper;
4 | import com.example.lightnovelbackend.pojo.User;
5 | import com.example.lightnovelbackend.result.ResultFactory;
6 | import org.apache.shiro.crypto.SecureRandomNumberGenerator;
7 | import org.apache.shiro.crypto.hash.SimpleHash;
8 | import org.springframework.beans.factory.annotation.Autowired;
9 | import org.springframework.stereotype.Service;
10 | import org.springframework.web.util.HtmlUtils;
11 |
12 | @Service
13 | public class UserService {
14 | @Autowired
15 | private UserMapper userMapper;
16 |
17 | public boolean isExist(String username){
18 | User user=getByName(username);
19 | return null!=user;
20 | }
21 |
22 | public User getByName(String username){
23 | return userMapper.findByUsername(username);
24 | }
25 | public User login(String username, String password){
26 | return userMapper.getByUsernameAndPassword(username, password);
27 | }
28 |
29 | public Integer register(User user){
30 | String username = user.getUsername();
31 | String password = user.getPassword();
32 | username = HtmlUtils.htmlEscape(username);
33 | user.setUsername(username);
34 | boolean exist = isExist(username);
35 | if (exist) {
36 | return -1;
37 | }
38 | // 生成盐,默认长度 16 位
39 | String salt = new SecureRandomNumberGenerator().nextBytes().toString();
40 | // 设置 hash 算法迭代次数
41 | int times = 2;
42 | // 得到 hash 后的密码
43 | String encodedPassword = new SimpleHash("md5", password, salt, times).toString();
44 | // 存储用户信息,包括 salt 与 hash 后的密码
45 | user.setSalt(salt);
46 | user.setPassword(encodedPassword);
47 | userMapper.register(user);
48 | return 1;
49 | }
50 |
51 |
52 | }
53 |
--------------------------------------------------------------------------------
/src/main/java/com/example/lightnovelbackend/service/VolumeService.java:
--------------------------------------------------------------------------------
1 | package com.example.lightnovelbackend.service;
2 |
3 | import com.example.lightnovelbackend.dao.VolumeMapper;
4 | import com.example.lightnovelbackend.pojo.Volume;
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.stereotype.Service;
7 |
8 | import java.util.List;
9 |
10 | @Service
11 | public class VolumeService {
12 | @Autowired
13 | private VolumeMapper volumeMapper;
14 | public List getVolumes(Integer book_id){
15 | return volumeMapper.getVolumes(book_id);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 | server.port=8443
2 | mybatis.type-aliases-package=com.example.lightnovelbackend.pojo
3 | mybatis.mapper-locations=classpath:mapper/*Mapper.xml
4 |
5 | spring.datasource.url=jdbc:mysql://localhost:3306/lightnovel?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
6 | spring.datasource.username=root
7 | spring.datasource.password=root
8 | spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
--------------------------------------------------------------------------------
/src/main/resources/mapper/BlogMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
--------------------------------------------------------------------------------
/src/main/resources/mapper/BookMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | insert into
6 | book
7 | values
8 | (null,#{cover},#{title},#{author},#{date},#{press},#{abs},#{category.id})
9 |
10 |
11 | update
12 | book
13 | set
14 | cover=#{cover},title=#{title},author=#{author},date=#{date},press=#{press},abs=#{abs},cid=#{category.id}
15 | where
16 | id=#{id}
17 |
18 |
19 | delete from book where id=#{id}
20 |
21 |
29 |
35 |
43 |
53 |
--------------------------------------------------------------------------------
/src/main/resources/mapper/CategoryMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
18 |
--------------------------------------------------------------------------------
/src/main/resources/mapper/ChapterMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
--------------------------------------------------------------------------------
/src/main/resources/mapper/ParagraphMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
--------------------------------------------------------------------------------
/src/main/resources/mapper/VolumeMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
--------------------------------------------------------------------------------
/src/test/java/com/example/lightnovelbackend/LightNovelBackendApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.example.lightnovelbackend;
2 |
3 | import org.junit.jupiter.api.Test;
4 | import org.springframework.boot.test.context.SpringBootTest;
5 |
6 | @SpringBootTest
7 | class LightNovelBackendApplicationTests {
8 |
9 | @Test
10 | void contextLoads() {
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/src/test/java/com/sk/wjbackend/WjBackendApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.sk.wjbackend;
2 |
3 | import org.junit.jupiter.api.Test;
4 | import org.springframework.boot.test.context.SpringBootTest;
5 |
6 | @SpringBootTest
7 | class WjBackendApplicationTests {
8 |
9 | @Test
10 | void contextLoads() {
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------