携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第10天,点击查看活动详情
项目原视频地址:www.bilibili.com/video/BV1VS…
文章列表查询
因为会有很多的文章,所以需要做分页处理。
page:页码。pageSize:每页的数量。
DB.Query("select * from post limit ?,?", page, pageSize)
e-book-website/databases/post.go
func GetPostPage(page, pageSize int) []models.Post {
page = (page - 1) * pageSize
rows, err := DB.Query("select * from post limit ?,?", page, pageSize)
if err != nil {
return nil
}
var posts []models.Post
for rows.Next() {
var post models.Post
err := rows.Scan(
&post.Pid,
&post.Title,
&post.Content,
&post.Markdown,
&post.CategoryId,
&post.UserId,
&post.ViewCount,
&post.Type,
&post.Slug,
&post.CreateAt,
&post.UpdateAt,
)
if err != nil {
return nil
}
posts = append(posts, post)
}
return posts
}
service 层调用 databases.GetPostPage(page, pageSize),获取数据库中的信息。赋值给 PostMore。
PostMore 数据结构中有 CategoryName,UserName 是 GetPostPage 这个中不存在的。因此我们需要使用其他的 select 语句获取。
categoryName := databases.GetCategoryNameById(post.CategoryId)
e-book-website/databases/post.go
func GetCategoryNameById(cId int) string {
row := DB.QueryRow("select name from blog_category where cid=?", cId)
if row.Err() != nil {
log.Println(row.Err())
}
var categoryName string
_ = row.Scan(&categoryName)
return categoryName
}
e-book-website/databases/user.go
package databases
import (
"log"
)
func GetUserNameById(userId int) string {
row := DB.QueryRow("select user_name from user where uid=?", userId)
if row.Err() != nil {
log.Println(row.Err())
}
var userName string
_ = row.Scan(&userName)
return userName
}
e-book-website/service/index.go
package service
import (
"blog-go/config"
"blog-go/databases"
"blog-go/models"
"fmt"
"html/template"
)
func GetAllIndexInfo(page, pageSize int) (*models.HomeResponse, error) {
categorys, err := databases.GetAllCategory()
if err != nil {
return nil, err
}
posts := databases.GetPostPage(page, pageSize)
var postMores []models.PostMore
for _, post := range posts {
categoryName := databases.GetCategoryNameById(post.CategoryId)
userName := databases.GetUserNameById(post.UserId)
content := []rune(post.Content)
if len(content) > 100 {
content = content[0:100]
}
postMore := models.PostMore{
post.Pid,
post.Title,
post.Slug,
template.HTML(content),
post.CategoryId,
categoryName,
post.UserId,
userName,
post.ViewCount,
post.Type,
models.DateDay(post.CreateAt),
models.DateDay(post.UpdateAt),
}
postMores = append(postMores, postMore)
}
fmt.Print("postMores", postMores)
if err != nil {
return nil, err
}
var data = &models.HomeResponse{
config.Cfg.Viewer,
categorys,
postMores,
1,
1,
[]int{1},
true,
}
return data, nil
}
刷新页面,就可以看到数据中的数据了。
获取文章的总数,只有知道了文章的总数,才可以计算出分页的数量。
e-book-website/databases/post.go
func CountGetAllPost() (count int) {
rows := DB.QueryRow("select count(1) from post")
_ = rows.Scan(&count)
return
}
func GetAllIndexInfo(page, pageSize int) (*models.HomeResponse, error) {
// ...
total := databases.CountGetAllPost()
pagesCount := (total-1)/10 + 1
var pages []int
for i := 0; i < pagesCount; i++ {
pages = append(pages, i+1)
}
var data = &models.HomeResponse{
config.Cfg.Viewer,
categorys,
postMores,
total,
page,
pages,
page != pagesCount,
}
return data, nil
}
重启项目,即可看到页面的样式出现