|
@@ -8,11 +8,14 @@ import com.sf.dto.resp.BookInfoRespDto;
|
|
|
import com.sf.dto.resp.BookRankRespDto;
|
|
|
import com.sf.dto.resp.PageRespDto;
|
|
|
import com.sf.entity.BookCategory;
|
|
|
+import com.sf.entity.BookChapter;
|
|
|
import com.sf.entity.BookInfo;
|
|
|
import com.sf.mapper.BookCategoryMapper;
|
|
|
+import com.sf.mapper.BookChapterMapper;
|
|
|
import com.sf.mapper.BookInfoMapper;
|
|
|
import com.sf.service.IBookInfoService;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
@@ -27,16 +30,18 @@ import java.util.List;
|
|
|
* @author baomidou
|
|
|
* @since 2024-05-25
|
|
|
*/
|
|
|
-// ServiceImpl 是mybatisplus提供的服务基础实现类
|
|
|
+// ServiceImpl 是mybatis plus提供的服务基础实现类
|
|
|
+// 如果要自动注入的对象较多 此时 @Autowired也会冗余
|
|
|
@Service
|
|
|
+@RequiredArgsConstructor
|
|
|
public class BookInfoServiceImpl extends ServiceImpl<BookInfoMapper, BookInfo>
|
|
|
implements IBookInfoService {
|
|
|
|
|
|
- @Autowired
|
|
|
- private BookInfoMapper bookInfoMapper;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private BookCategoryMapper bookCategoryMapper;
|
|
|
+ // 当类中声明了注解 @RequiredArgsConstructor时 可以简化自动注入的使用
|
|
|
+ // 在属性前 增加final修饰
|
|
|
+ private final BookInfoMapper bookInfoMapper;
|
|
|
+ private final BookCategoryMapper bookCategoryMapper;
|
|
|
+ private final BookChapterMapper bookChapterMapper;
|
|
|
|
|
|
// 分页的本质是limit select * from book_info
|
|
|
@Override
|
|
@@ -58,6 +63,9 @@ public class BookInfoServiceImpl extends ServiceImpl<BookInfoMapper, BookInfo>
|
|
|
// bookInfoMapper.selectPage(page,wrapper);
|
|
|
|
|
|
// 还可以使用mybatis自身的sql语句来实现
|
|
|
+ // select * from book_info limit 10,10
|
|
|
+ // select count(*) from book_info
|
|
|
+ // 第2页/每页10条 总页数 100(总记录数)/10(每页大小)=10页
|
|
|
List<BookInfo> bookInfos = bookInfoMapper.searchBooks(page, bookSearchReqDto);
|
|
|
List<BookInfoRespDto> bookInfoRespDtos = bookInfos.stream().map(bookInfo -> {
|
|
|
BookInfoRespDto bookInfoRespDto = new BookInfoRespDto();
|
|
@@ -82,6 +90,31 @@ public class BookInfoServiceImpl extends ServiceImpl<BookInfoMapper, BookInfo>
|
|
|
.build()).toList();
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public BookInfoRespDto getBookInfo(Long id) {
|
|
|
+ // select * from book_info where id = ''
|
|
|
+ BookInfo bookInfo = bookInfoMapper.selectById(id);
|
|
|
+ // 如果实体类的属性和dto的属性 名字相同
|
|
|
+ BookInfoRespDto bookInfoRespDto = BookInfoRespDto.builder().build();
|
|
|
+ // 拷贝属性 从bookInfo中拷贝同名属性 bookInfoRespDto
|
|
|
+ BeanUtils.copyProperties(bookInfo,bookInfoRespDto);
|
|
|
+
|
|
|
+ // 增加首章id
|
|
|
+ // select * from book_chapter where book_id='' and chapter_num=0
|
|
|
+ LambdaQueryWrapper<BookChapter> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ queryWrapper.eq(BookChapter::getBookId, id);
|
|
|
+ queryWrapper.eq(BookChapter::getChapterNum,0);
|
|
|
+ // selectList 返回多条数据 selectOne是返回一条数据
|
|
|
+ BookChapter bookChapter = bookChapterMapper.selectOne(queryWrapper);
|
|
|
+ // 因为首章也可能没有
|
|
|
+ if(bookChapter != null){
|
|
|
+ // ctrl + shift + ↑ / ↓
|
|
|
+ bookInfoRespDto.setFirstChapterId(bookChapter.getId());
|
|
|
+ }
|
|
|
+ return bookInfoRespDto;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public List<BookRankRespDto> listVisitRankBooks() {
|
|
|
LambdaQueryWrapper<BookInfo> bookInfoQueryWrapper = new LambdaQueryWrapper<>();
|