Ver código fonte

0130 接口开发

Qing 1 ano atrás
pai
commit
2573c6010c
22 arquivos alterados com 408 adições e 254 exclusões
  1. 18 0
      novel-demo/src/main/java/com/sf/controller/BookChapterController.java
  2. 25 3
      novel-demo/src/main/java/com/sf/controller/BookInfoController.java
  3. 4 32
      novel-demo/src/main/java/com/sf/controller/HomeBookController.java
  4. 90 0
      novel-demo/src/main/java/com/sf/dto/BookInfoRespDto.java
  5. 19 0
      novel-demo/src/main/java/com/sf/dto/ChapterInfoRespDto.java
  6. 3 0
      novel-demo/src/main/java/com/sf/dto/HomeBookRespDto.java
  7. 13 0
      novel-demo/src/main/java/com/sf/dto/LastChapterRespDto.java
  8. 16 0
      novel-demo/src/main/java/com/sf/mapper/BookChapterMapper.java
  9. 56 0
      novel-demo/src/main/java/com/sf/po/BookChapter.java
  10. 3 186
      novel-demo/src/main/java/com/sf/po/BookInfo.java
  11. 2 0
      novel-demo/src/main/java/com/sf/resp/RestResp.java
  12. 16 0
      novel-demo/src/main/java/com/sf/service/IBookChapterService.java
  13. 4 0
      novel-demo/src/main/java/com/sf/service/IBookInfoService.java
  14. 5 0
      novel-demo/src/main/java/com/sf/service/IHomeBookService.java
  15. 20 0
      novel-demo/src/main/java/com/sf/service/impl/BookChapterServiceImpl.java
  16. 40 0
      novel-demo/src/main/java/com/sf/service/impl/BookInfoServiceImpl.java
  17. 32 0
      novel-demo/src/main/java/com/sf/service/impl/HomeBookServiceImpl.java
  18. 4 1
      novel-demo/src/main/java/com/sf/util/GeneUtils.java
  19. 5 0
      novel-demo/src/main/resources/mapper/BookChapterMapper.xml
  20. 7 7
      springboot-demo/src/main/resources/application.yml
  21. 26 12
      springmvc-demo/.idea/workspace.xml
  22. 0 13
      springmvc-demo/src/main/webapp/WEB-INF/web.xml

+ 18 - 0
novel-demo/src/main/java/com/sf/controller/BookChapterController.java

@@ -0,0 +1,18 @@
+package com.sf.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.stereotype.Controller;
+
+/**
+ * <p>
+ * 小说章节 前端控制器
+ * </p>
+ *
+ * @author Qing
+ * @since 2024-01-30
+ */
+@Controller
+@RequestMapping("/bookChapter")
+public class BookChapterController {
+
+}

+ 25 - 3
novel-demo/src/main/java/com/sf/controller/BookInfoController.java

@@ -1,6 +1,12 @@
 package com.sf.controller;
 
-import org.springframework.web.bind.annotation.RequestMapping;
+import com.sf.dto.BookInfoRespDto;
+import com.sf.po.BookInfo;
+import com.sf.resp.RestResp;
+import com.sf.service.IBookInfoService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.stereotype.Controller;
 
 /**
@@ -11,8 +17,24 @@ import org.springframework.stereotype.Controller;
  * @author Qing
  * @since 2024-01-29
  */
-@Controller
-@RequestMapping("/bookInfo")
+@CrossOrigin(originPatterns = "*", allowCredentials = "true")
+@RestController
+@RequestMapping("/api/front/book")
 public class BookInfoController {
 
+    @Autowired
+    private IBookInfoService bookInfoService;
+
+    // http://127.0.0.1:8888/api/front/book/{id}
+    // 根据请求路径和请求参数  确定方法的入参
+    // 根据响应结果 确定方法的返回类型 RestResp<T>
+    @GetMapping("/{id}")
+    public RestResp<BookInfoRespDto> info(@PathVariable("id") Long id) {
+        // 增加入参的打印
+        System.out.println(id);
+        // RestResp是controller进行最后组装的
+        // 它所需要的数据 是service来处理的
+        BookInfoRespDto bookInfoRespDto = bookInfoService.info(id);
+        return RestResp.ok(bookInfoRespDto);
+    }
 }

+ 4 - 32
novel-demo/src/main/java/com/sf/controller/HomeBookController.java

@@ -7,11 +7,8 @@ import com.sf.resp.RestResp;
 import com.sf.service.IBookInfoService;
 import com.sf.service.IHomeBookService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.CrossOrigin;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RestController;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -24,7 +21,7 @@ import java.util.List;
  * @author Qing
  * @since 2024-01-29
  */
-@CrossOrigin(originPatterns = "*",allowCredentials = "true")
+@CrossOrigin(originPatterns = "*", allowCredentials = "true")
 @RestController
 @RequestMapping("/api/front/home")
 public class HomeBookController {
@@ -32,39 +29,14 @@ public class HomeBookController {
     @Autowired
     private IHomeBookService homeBookService;
 
-    @Autowired
-    private IBookInfoService bookInfoService;
-
     // http://127.0.0.1:8888/api/front/home/books
     @GetMapping("/books")
+//    @ResponseBody
     public RestResp<List<HomeBookRespDto>> books() {
         // json结构
         // code  message  data  ok  -> RestResp
         //    [{type:"",bookId:"",...},{type:"",bookId:"",...}]
-        List<HomeBookRespDto> list = new ArrayList<>();
-//        HomeBookRespDto dto = HomeBookRespDto.builder()
-//                .bookId(1334318182169681920L).type(0).bookName("我给王爷寄刀片").authorName("汐娴阳光")
-//                .build();
-//        HomeBookRespDto dto1 = HomeBookRespDto.builder()
-//                .bookId(1334318182169681920L).type(0).bookName("我有家最强当铺").authorName("汐娴阳光")
-//                .build();
-//        list.add(dto);
-//        list.add(dto1);
-        List<HomeBook> homeBooks = homeBookService.list();
-        homeBooks.forEach(homeBook -> {
-            // INSERT INTO `home_book` (`id`, `type`, `sort`, `book_id`, `create_time`, `update_time`)
-            // VALUES (64, 0, 0, 1334318182169681920, '2020-12-03 11:43:23', '2020-12-03 11:43:23');
-            BookInfo bookInfo = bookInfoService.getById(homeBook.getBookId());
-            HomeBookRespDto dto = HomeBookRespDto.builder()
-                    .type(homeBook.getType().intValue())   // byte - int
-                    .bookId(homeBook.getBookId())
-                    .picUrl(bookInfo.getPicUrl())
-                    .bookName(bookInfo.getBookName())
-                    .authorName(bookInfo.getAuthorName())
-                    .bookDesc(bookInfo.getBookDesc())
-                    .build();
-            list.add(dto);
-        });
+        List<HomeBookRespDto> list = homeBookService.books();
         // 都取出来 批量查询
         return RestResp.ok(list);
     }

+ 90 - 0
novel-demo/src/main/java/com/sf/dto/BookInfoRespDto.java

@@ -0,0 +1,90 @@
+package com.sf.dto;
+
+import lombok.Builder;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@Builder
+public class BookInfoRespDto {
+
+    private Long id;
+
+    /**
+     * 类别ID
+     */
+    private Long categoryId;
+
+    /**
+     * 类别名
+     */
+    private String categoryName;
+
+    /**
+     * 小说封面地址
+     */
+    private String picUrl;
+
+    /**
+     * 小说名
+     */
+    private String bookName;
+
+    /**
+     * 作家id
+     */
+    private Long authorId;
+
+    /**
+     * 作家名
+     */
+    private String authorName;
+
+    /**
+     * 书籍描述
+     */
+    private String bookDesc;
+
+    /**
+     * 书籍状态;0-连载中 1-已完结
+     */
+    private Byte bookStatus;
+
+    /**
+     * 点击量
+     */
+    private Long visitCount;
+
+    /**
+     * 总字数
+     */
+    private Integer wordCount;
+
+    /**
+     * 评论数
+     */
+    private Integer commentCount;
+
+
+    /**
+     * 首章ID
+     */
+    private Long firstChapterId;
+
+    /**
+     * 最新章节ID
+     */
+    private Long lastChapterId;
+
+    /**
+     * 最新章节名
+     */
+    private String lastChapterName;
+
+    /**
+     * 最新章节更新时间
+     */
+    private LocalDateTime updateTime; //lastChapterUpdateTime
+
+}

+ 19 - 0
novel-demo/src/main/java/com/sf/dto/ChapterInfoRespDto.java

@@ -0,0 +1,19 @@
+package com.sf.dto;
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class ChapterInfoRespDto {
+    // 章节id
+    private Long id;
+    private Long bookId;
+    // 章节的顺序
+    private Integer chapterNum;
+    private String chapterName;
+    // 字数
+    private Integer chapterWordCount;
+    private LocalDateTime chapterUpdateTime;
+    private Boolean isVip;
+}

+ 3 - 0
novel-demo/src/main/java/com/sf/dto/HomeBookRespDto.java

@@ -2,9 +2,11 @@ package com.sf.dto;
 
 import lombok.Builder;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 // dto 数据传输对象
 // 在处理前端和后端进行请求和响应时的对象
+// @Builder 是一种创建对象的方式  建造者模式
 @Data
 @Builder
 public class HomeBookRespDto {
@@ -20,4 +22,5 @@ public class HomeBookRespDto {
     private String authorName;
 
     private String bookDesc;
+
 }

+ 13 - 0
novel-demo/src/main/java/com/sf/dto/LastChapterRespDto.java

@@ -0,0 +1,13 @@
+package com.sf.dto;
+
+import lombok.Data;
+
+@Data
+public class LastChapterRespDto {
+    // 最新章节对应的信息
+    private ChapterInfoRespDto chapterInfo;
+    // 章节总数
+    private Integer chapterTotal;
+    // 最新章节内容概要  最新章节的章节内容 截取前30个字符
+    private String contentSummary;
+}

+ 16 - 0
novel-demo/src/main/java/com/sf/mapper/BookChapterMapper.java

@@ -0,0 +1,16 @@
+package com.sf.mapper;
+
+import com.sf.po.BookChapter;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 小说章节 Mapper 接口
+ * </p>
+ *
+ * @author Qing
+ * @since 2024-01-30
+ */
+public interface BookChapterMapper extends BaseMapper<BookChapter> {
+
+}

+ 56 - 0
novel-demo/src/main/java/com/sf/po/BookChapter.java

@@ -0,0 +1,56 @@
+package com.sf.po;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 小说章节
+ * </p>
+ *
+ * @author Qing
+ * @since 2024-01-30
+ */
+@Data
+@TableName("book_chapter")
+public class BookChapter implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 小说ID
+     */
+    private Long bookId;
+
+    /**
+     * 章节号
+     */
+    private Integer chapterNum;
+
+    /**
+     * 章节名
+     */
+    private String chapterName;
+
+    /**
+     * 章节字数
+     */
+    private Integer wordCount;
+
+    /**
+     * 是否收费;1-收费 0-免费
+     */
+    private Integer isVip;
+
+    private LocalDateTime createTime;
+
+    private LocalDateTime updateTime;
+}

+ 3 - 186
novel-demo/src/main/java/com/sf/po/BookInfo.java

@@ -3,6 +3,8 @@ package com.sf.po;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
 import java.io.Serializable;
 import java.time.LocalDateTime;
 
@@ -15,6 +17,7 @@ import java.time.LocalDateTime;
  * @since 2024-01-29
  */
 @TableName("book_info")
+@Data
 public class BookInfo implements Serializable {
 
     private static final long serialVersionUID = 1L;
@@ -119,190 +122,4 @@ public class BookInfo implements Serializable {
      * 更新时间
      */
     private LocalDateTime updateTime;
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public Byte getWorkDirection() {
-        return workDirection;
-    }
-
-    public void setWorkDirection(Byte workDirection) {
-        this.workDirection = workDirection;
-    }
-
-    public Long getCategoryId() {
-        return categoryId;
-    }
-
-    public void setCategoryId(Long categoryId) {
-        this.categoryId = categoryId;
-    }
-
-    public String getCategoryName() {
-        return categoryName;
-    }
-
-    public void setCategoryName(String categoryName) {
-        this.categoryName = categoryName;
-    }
-
-    public String getPicUrl() {
-        return picUrl;
-    }
-
-    public void setPicUrl(String picUrl) {
-        this.picUrl = picUrl;
-    }
-
-    public String getBookName() {
-        return bookName;
-    }
-
-    public void setBookName(String bookName) {
-        this.bookName = bookName;
-    }
-
-    public Long getAuthorId() {
-        return authorId;
-    }
-
-    public void setAuthorId(Long authorId) {
-        this.authorId = authorId;
-    }
-
-    public String getAuthorName() {
-        return authorName;
-    }
-
-    public void setAuthorName(String authorName) {
-        this.authorName = authorName;
-    }
-
-    public String getBookDesc() {
-        return bookDesc;
-    }
-
-    public void setBookDesc(String bookDesc) {
-        this.bookDesc = bookDesc;
-    }
-
-    public Byte getScore() {
-        return score;
-    }
-
-    public void setScore(Byte score) {
-        this.score = score;
-    }
-
-    public Byte getBookStatus() {
-        return bookStatus;
-    }
-
-    public void setBookStatus(Byte bookStatus) {
-        this.bookStatus = bookStatus;
-    }
-
-    public Long getVisitCount() {
-        return visitCount;
-    }
-
-    public void setVisitCount(Long visitCount) {
-        this.visitCount = visitCount;
-    }
-
-    public Integer getWordCount() {
-        return wordCount;
-    }
-
-    public void setWordCount(Integer wordCount) {
-        this.wordCount = wordCount;
-    }
-
-    public Integer getCommentCount() {
-        return commentCount;
-    }
-
-    public void setCommentCount(Integer commentCount) {
-        this.commentCount = commentCount;
-    }
-
-    public Long getLastChapterId() {
-        return lastChapterId;
-    }
-
-    public void setLastChapterId(Long lastChapterId) {
-        this.lastChapterId = lastChapterId;
-    }
-
-    public String getLastChapterName() {
-        return lastChapterName;
-    }
-
-    public void setLastChapterName(String lastChapterName) {
-        this.lastChapterName = lastChapterName;
-    }
-
-    public LocalDateTime getLastChapterUpdateTime() {
-        return lastChapterUpdateTime;
-    }
-
-    public void setLastChapterUpdateTime(LocalDateTime lastChapterUpdateTime) {
-        this.lastChapterUpdateTime = lastChapterUpdateTime;
-    }
-
-    public Byte getIsVip() {
-        return isVip;
-    }
-
-    public void setIsVip(Byte isVip) {
-        this.isVip = isVip;
-    }
-
-    public LocalDateTime getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(LocalDateTime createTime) {
-        this.createTime = createTime;
-    }
-
-    public LocalDateTime getUpdateTime() {
-        return updateTime;
-    }
-
-    public void setUpdateTime(LocalDateTime updateTime) {
-        this.updateTime = updateTime;
-    }
-
-    @Override
-    public String toString() {
-        return "BookInfo{" +
-            "id = " + id +
-            ", workDirection = " + workDirection +
-            ", categoryId = " + categoryId +
-            ", categoryName = " + categoryName +
-            ", picUrl = " + picUrl +
-            ", bookName = " + bookName +
-            ", authorId = " + authorId +
-            ", authorName = " + authorName +
-            ", bookDesc = " + bookDesc +
-            ", score = " + score +
-            ", bookStatus = " + bookStatus +
-            ", visitCount = " + visitCount +
-            ", wordCount = " + wordCount +
-            ", commentCount = " + commentCount +
-            ", lastChapterId = " + lastChapterId +
-            ", lastChapterName = " + lastChapterName +
-            ", lastChapterUpdateTime = " + lastChapterUpdateTime +
-            ", isVip = " + isVip +
-            ", createTime = " + createTime +
-            ", updateTime = " + updateTime +
-        "}";
-    }
 }

+ 2 - 0
novel-demo/src/main/java/com/sf/resp/RestResp.java

@@ -21,6 +21,8 @@ public class RestResp<T> {
         this.data = data;
     }
 
+    // 泛型方法的声明
+    // RestResp<T> ok(T data)   当传进来一个类型的data数据时 我们要返回的RestResp的泛型也是data对应的类型
     public static <T> RestResp<T> ok(T data) {
         return new RestResp(data);
     }

+ 16 - 0
novel-demo/src/main/java/com/sf/service/IBookChapterService.java

@@ -0,0 +1,16 @@
+package com.sf.service;
+
+import com.sf.po.BookChapter;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 小说章节 服务类
+ * </p>
+ *
+ * @author Qing
+ * @since 2024-01-30
+ */
+public interface IBookChapterService extends IService<BookChapter> {
+
+}

+ 4 - 0
novel-demo/src/main/java/com/sf/service/IBookInfoService.java

@@ -1,7 +1,10 @@
 package com.sf.service;
 
+import com.sf.dto.BookInfoRespDto;
 import com.sf.po.BookInfo;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.sf.resp.RestResp;
+import org.springframework.web.bind.annotation.PathVariable;
 
 /**
  * <p>
@@ -13,4 +16,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IBookInfoService extends IService<BookInfo> {
 
+    BookInfoRespDto info(Long id);
 }

+ 5 - 0
novel-demo/src/main/java/com/sf/service/IHomeBookService.java

@@ -1,7 +1,11 @@
 package com.sf.service;
 
+import com.sf.dto.HomeBookRespDto;
 import com.sf.po.HomeBook;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.sf.resp.RestResp;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +17,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IHomeBookService extends IService<HomeBook> {
 
+    List<HomeBookRespDto> books();
 }

+ 20 - 0
novel-demo/src/main/java/com/sf/service/impl/BookChapterServiceImpl.java

@@ -0,0 +1,20 @@
+package com.sf.service.impl;
+
+import com.sf.po.BookChapter;
+import com.sf.mapper.BookChapterMapper;
+import com.sf.service.IBookChapterService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 小说章节 服务实现类
+ * </p>
+ *
+ * @author Qing
+ * @since 2024-01-30
+ */
+@Service
+public class BookChapterServiceImpl extends ServiceImpl<BookChapterMapper, BookChapter> implements IBookChapterService {
+
+}

+ 40 - 0
novel-demo/src/main/java/com/sf/service/impl/BookInfoServiceImpl.java

@@ -1,9 +1,16 @@
 package com.sf.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.sf.dto.BookInfoRespDto;
+import com.sf.mapper.BookChapterMapper;
+import com.sf.po.BookChapter;
 import com.sf.po.BookInfo;
 import com.sf.mapper.BookInfoMapper;
 import com.sf.service.IBookInfoService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 /**
@@ -17,4 +24,37 @@ import org.springframework.stereotype.Service;
 @Service
 public class BookInfoServiceImpl extends ServiceImpl<BookInfoMapper, BookInfo> implements IBookInfoService {
 
+    @Autowired
+    private BookInfoMapper bookInfoMapper;
+
+    @Autowired
+    private BookChapterMapper bookChapterMapper;
+
+    @Override
+    public BookInfoRespDto info(Long id) {
+        BookInfo bookInfo = bookInfoMapper.selectById(id);
+        BookInfoRespDto dto = BookInfoRespDto.builder().build();
+        BeanUtils.copyProperties(bookInfo, dto);
+        dto.setUpdateTime(bookInfo.getLastChapterUpdateTime());
+        // 首章id
+//        select * from book_chapter where book_id = '1334318497132552192' and chapter_num = '0';
+//        select * from book_chapter where book_id = '1334318497132552192' order by chapter_num limit 1;
+        QueryWrapper<BookChapter> queryWrapper = new QueryWrapper<>();
+//        queryWrapper.eq("book_id",id);
+//        queryWrapper.eq("chapter_num",0);
+        queryWrapper.eq("book_id", id).eq("chapter_num", 0);
+
+        LambdaQueryWrapper<BookChapter> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.eq(BookChapter::getBookId,id).eq(BookChapter::getChapterNum,0);
+//        BookChapter bookChapter = bookChapterMapper.selectOne(queryWrapper);
+//        BookChapter bookChapter = bookChapterMapper.selectOne(lambdaQueryWrapper);
+
+        LambdaQueryWrapper<BookChapter> lambdaQueryWrapper1 = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper1.eq(BookChapter::getBookId,id)
+                .orderByAsc(BookChapter::getChapterNum).last("limit 1");
+        BookChapter bookChapter = bookChapterMapper.selectOne(lambdaQueryWrapper1);
+
+        dto.setFirstChapterId(bookChapter.getId());
+        return dto;
+    }
 }

+ 32 - 0
novel-demo/src/main/java/com/sf/service/impl/HomeBookServiceImpl.java

@@ -1,11 +1,19 @@
 package com.sf.service.impl;
 
+import com.sf.dto.HomeBookRespDto;
+import com.sf.mapper.BookInfoMapper;
+import com.sf.po.BookInfo;
 import com.sf.po.HomeBook;
 import com.sf.mapper.HomeBookMapper;
+import com.sf.resp.RestResp;
 import com.sf.service.IHomeBookService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * <p>
  * 小说推荐 服务实现类
@@ -17,4 +25,28 @@ import org.springframework.stereotype.Service;
 @Service
 public class HomeBookServiceImpl extends ServiceImpl<HomeBookMapper, HomeBook> implements IHomeBookService {
 
+    @Autowired
+    private HomeBookMapper homeBookMapper;
+    @Autowired
+    private BookInfoMapper bookInfoMapper;
+
+    // 尽量不要在service里调用service
+    @Override
+    public List<HomeBookRespDto> books() {
+        List<HomeBookRespDto> list = new ArrayList<>();
+        List<HomeBook> homeBookList = homeBookMapper.selectList(null);
+        homeBookList.forEach(homeBook -> {
+            BookInfo bookInfo = bookInfoMapper.selectById(homeBook.getBookId());
+            HomeBookRespDto dto = HomeBookRespDto.builder()
+                    .type(homeBook.getType().intValue())   // byte - int
+                    .bookId(homeBook.getBookId())
+                    .picUrl(bookInfo.getPicUrl())
+                    .bookName(bookInfo.getBookName())
+                    .authorName(bookInfo.getAuthorName())
+                    .bookDesc(bookInfo.getBookDesc())
+                    .build();
+            list.add(dto);
+        });
+        return list;
+    }
 }

+ 4 - 1
novel-demo/src/main/java/com/sf/util/GeneUtils.java

@@ -32,6 +32,9 @@ public class GeneUtils {
                                 // byte      short      int    long
                                 return DbColumnType.INTEGER;
                             }
+                            if (typeCode == Types.TINYINT) {
+                                return DbColumnType.INTEGER;
+                            }
                             return typeRegistry.getColumnType(metaInfo);
 
                         }))
@@ -58,7 +61,7 @@ public class GeneUtils {
 //                    tableList.add("fiction_shelf");
 //                    builder.addInclude(tableList); // 设置需要生成的表名
 //                    builder.addInclude("chapter_content","fiction_shelf"); // 设置需要生成的表名
-                    builder.addInclude("home_book"); // 设置需要生成的表名
+                    builder.addInclude("book_chapter"); // 设置需要生成的表名
                     //                            .addTablePrefix("t_", "c_"); // 设置过滤表前缀
                 })
                 .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板

+ 5 - 0
novel-demo/src/main/resources/mapper/BookChapterMapper.xml

@@ -0,0 +1,5 @@
+<?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="com.sf.mapper.BookChapterMapper">
+
+</mapper>

+ 7 - 7
springboot-demo/src/main/resources/application.yml

@@ -1,8 +1,8 @@
 spring:
-    banner:
-        location: classpath:banner/FromWangHongMing.txt
-    data:
-        redis:
-            host: 127.0.0.1
-            port: 6379
-            password:
+  banner:
+    location: classpath:banner/FromLuBoZhi.txt
+  data:
+    redis:
+      host: 127.0.0.1
+      port: 6379
+      password:

+ 26 - 12
springmvc-demo/.idea/workspace.xml

@@ -13,26 +13,38 @@
     <list default="true" id="d55c211f-cca4-4230-b149-ae8c1dab3c43" name="Changes" comment="0123 add api">
       <change afterPath="$PROJECT_DIR$/../.idea/VIPJAVA.iml" afterDir="false" />
       <change afterPath="$PROJECT_DIR$/../gn_oa_vip27/.idea/google-java-format.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/../springboot-demo/.gitignore" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/../springboot-demo/.mvn/wrapper/maven-wrapper.jar" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/../springboot-demo/.mvn/wrapper/maven-wrapper.properties" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/../springboot-demo/mvnw" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/../springboot-demo/mvnw.cmd" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/../springboot-demo/pom.xml" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/../springboot-demo/src/main/java/com/hello/Hello.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/../springboot-demo/src/main/java/com/sf/DemoApplication.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/../springboot-demo/src/main/java/com/sf/controller/HelloController.java" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/../springboot-demo/src/main/resources/application.properties" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/../springboot-demo/src/main/resources/banner.txt" afterDir="false" />
-      <change afterPath="$PROJECT_DIR$/../springboot-demo/src/test/java/com/sf/SpringbootDemoApplicationTests.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/../springboot-demo/src/main/java/com/sf/bean/Computer.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/../springboot-demo/src/main/java/com/sf/bean/Phone.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/../springboot-demo/src/main/java/com/sf/config/BeanConfig.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/../springboot-demo/src/main/java/com/sf/config/MyAutoConfig.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/../springboot-demo/src/main/java/com/sf/config/other/OtherAutoConfig1.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/../springboot-demo/src/main/java/com/sf/config/other/OtherAutoConfig2.java" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/../springboot-demo/src/main/resources/META-INF/spring.factories" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/../springboot-demo/src/main/resources/config/application-dev.properties" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/../springboot-demo/src/main/resources/config/application-prod.properties" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/../springboot-demo/src/main/resources/config/application-test.properties" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/../springboot-demo/src/test/java/com/sf/BeanTests.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/../02_JavaWeb/day06_mybatis/src/main/java/com/lc/mapper/UserMapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/../02_JavaWeb/day06_mybatis/src/main/java/com/lc/mapper/UserMapper.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/../02_JavaWeb/day06_mybatis/src/main/resources/com/lc/mapper/UserMapper.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../02_JavaWeb/day06_mybatis/src/main/resources/com/lc/mapper/UserMapper.xml" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/../02_JavaWeb/day07_mybatis/src/main/resources/com/lc/mapper/UserMapper.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../02_JavaWeb/day07_mybatis/src/main/resources/com/lc/mapper/UserMapper.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../git-demo/com/sf/Test.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/../git-demo/com/sf/TestStudent.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/../git-demo/com/sf/TestTang.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/../git-demo/com/sf/TestWang.java" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/../git-demo/com/sf/TestZhang.java" beforeDir="false" />
       <change beforePath="$PROJECT_DIR$/../gn_oa_vip27/.idea/jarRepositories.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../gn_oa_vip27/.idea/jarRepositories.xml" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/../gn_oa_vip27/.idea/misc.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../gn_oa_vip27/.idea/misc.xml" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/../gn_oa_vip27/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../gn_oa_vip27/.idea/workspace.xml" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/../gn_oa_vip27/src/main/java/com/sf/utils/JdbcUtil.java" beforeDir="false" afterPath="$PROJECT_DIR$/../gn_oa_vip27/src/main/java/com/sf/utils/JdbcUtil.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../springboot-demo/src/main/java/com/sf/DemoApplication.java" beforeDir="false" afterPath="$PROJECT_DIR$/../springboot-demo/src/main/java/com/sf/DemoApplication.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../springboot-demo/src/main/java/com/sf/config/VegetablesConfig.java" beforeDir="false" afterPath="$PROJECT_DIR$/../springboot-demo/src/main/java/com/sf/config/VegetablesConfig.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../springboot-demo/src/main/resources/application-dev.properties" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/../springboot-demo/src/main/resources/application-prod.properties" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/../springboot-demo/src/main/resources/application-test.properties" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/../springboot-demo/src/main/resources/vegetables.properties" beforeDir="false" afterPath="$PROJECT_DIR$/../springboot-demo/src/main/resources/config/vegetables.properties" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/../springboot-demo/src/test/java/com/sf/DemoApplicationTests.java" beforeDir="false" afterPath="$PROJECT_DIR$/../springboot-demo/src/test/java/com/sf/ApplicationTests.java" afterDir="false" />
       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/webapp/WEB-INF/web.xml" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/webapp/WEB-INF/web.xml" afterDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -273,6 +285,8 @@
       <workItem from="1705972424180" duration="12204000" />
       <workItem from="1705995660651" duration="25000" />
       <workItem from="1705998836387" duration="40000" />
+      <workItem from="1706063161444" duration="1507000" />
+      <workItem from="1706155077661" duration="3119000" />
     </task>
     <task id="LOCAL-00001" summary="0117 springmvc">
       <option name="closed" value="true" />

+ 0 - 13
springmvc-demo/src/main/webapp/WEB-INF/web.xml

@@ -44,19 +44,6 @@
 <!--    </servlet-mapping>-->
 
 
-<!--&lt;!&ndash;    <filter>&ndash;&gt;-->
-<!--&lt;!&ndash;        <filter-name>CharacterEncoding</filter-name>&ndash;&gt;-->
-<!--&lt;!&ndash;        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>&ndash;&gt;-->
-<!--&lt;!&ndash;        <init-param>&ndash;&gt;-->
-<!--&lt;!&ndash;            <param-name>encoding</param-name>&ndash;&gt;-->
-<!--&lt;!&ndash;            <param-value>utf-8</param-value>&ndash;&gt;-->
-<!--&lt;!&ndash;        </init-param>&ndash;&gt;-->
-<!--&lt;!&ndash;    </filter>&ndash;&gt;-->
-<!--&lt;!&ndash;    <filter-mapping>&ndash;&gt;-->
-<!--&lt;!&ndash;        <filter-name>CharacterEncoding</filter-name>&ndash;&gt;-->
-<!--&lt;!&ndash;        <url-pattern>/*</url-pattern>&ndash;&gt;-->
-<!--&lt;!&ndash;    </filter-mapping>&ndash;&gt;-->
-
 <!--    &lt;!&ndash;    解决中文乱码的过滤器&ndash;&gt;-->
 <!--    <filter>-->
 <!--        <filter-name>characterEncodingFilter</filter-name>-->