-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patharticle_model.go
193 lines (166 loc) · 4.78 KB
/
article_model.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
package models
import (
"log"
"myblog/utils"
"fmt"
"github.com/astaxie/beego"
"strconv"
)
type Article struct {
Id int
Title string
Tags string
Short string
Content string
Author string
Createtime int64
}
//---------数据处理-----------
func AddArticle(article Article) (int64, error) {
i, err := insertArticle(article)
SetArticleRowsNum()
return i, err
}
//-----------数据库操作---------------
//插入一篇文章
func insertArticle(article Article) (int64, error) {
return utils.ModifyDB("insert into article(title,tags,short,content,author,createtime) values(?,?,?,?,?,?)",
article.Title, article.Tags, article.Short, article.Content, article.Author, article.Createtime)
}
//-----------查询文章---------
//根据页码查询文章
func FindArticleWithPage(page int) ([]Article, error) {
//从配置文件中获取每页的文章数量
num, _ := beego.AppConfig.Int("articleListPageNum")
page--
// 2页面, 每页显示2条 {3,4}
// 3页面,每页显示5条 {11,12,13,14,15}
fmt.Println("---------->page", page)
return QueryArticleWithPage(page, num)
}
/**
分页查询数据库
limit分页查询语句,
语法:limit m,n
m代表从多少位开始获取,与id值无关
n代表获取多少条数据
注意limit前面没有where
*/
func QueryArticleWithPage(page, num int) ([]Article, error) {
sql := fmt.Sprintf("limit %d,%d", page*num, num)
return QueryArticlesWithCon(sql)
}
func QueryArticlesWithCon(sql string) ([]Article, error) {
sql = "select id,title,tags,short,content,author,createtime from article " + sql
rows, err := utils.QueryDB(sql)
if err != nil {
return nil, err
}
var artList []Article
for rows.Next() {
id := 0
title := ""
tags := ""
short := ""
content := ""
author := ""
var createtime int64
createtime = 0
rows.Scan(&id, &title, &tags, &short, &content, &author, &createtime)
art := Article{id, title, tags, short, content, author, createtime}
artList = append(artList, art)
}
return artList, nil
}
//------翻页------
//存储表的行数,只有自己可以更改,当文章新增或者删除时需要更新这个值
var artcileRowsNum = 0
//只有首次获取行数的时候采取统计表里的行数
func GetArticleRowsNum() int {
if artcileRowsNum == 0 {
artcileRowsNum = QueryArticleRowNum()
}
return artcileRowsNum
}
//查询文章的总条数
func QueryArticleRowNum() int {
row := utils.QueryRowDB("select count(id) from article")
num := 0
row.Scan(&num)
return num
}
//设置页数
func SetArticleRowsNum(){
artcileRowsNum = QueryArticleRowNum()
}
//--------------按照标签查询--------------
/*
通过标签查询首页的数据
有四种情况
1.左右两边有&符和其他符号
2.左边有&符号和其他符号,同时右边没有任何符号
3.右边有&符号和其他符号,同时左边没有任何符号
4.左右两边都没有符号
通过%去匹配任意多个字符,至少是一个
*/
func QueryArticlesWithTag(tag string) ([]Article, error) {
sql := " where tags like '%&" + tag + "&%'"
sql += " or tags like '%&" + tag + "'"
sql += " or tags like '" + tag + "&%'"
sql += " or tags like '" + tag + "'"
fmt.Println(sql)
//sql: like
// tags: http&web&socket&互联网&计算机
// http&web
// web&socket&互联网&计算机
// web
// http://localhost:8080?tag=web
// %&web&% %代表任何内容都可以匹配
// %&web
// web&%
// web
return QueryArticlesWithCon(sql)
}
//----------查询文章-------------
func QueryArticleWithId(id int) Article {
row := utils.QueryRowDB("select id,title,tags,short,content,author,createtime from article where id=" + strconv.Itoa(id))
title := ""
tags := ""
short := ""
content := ""
author := ""
var createtime int64
createtime = 0
row.Scan(&id, &title, &tags, &short, &content, &author, &createtime)
art := Article{id, title, tags, short, content, author, createtime}
return art
}
//----------修改数据----------
func UpdateArticle(article Article) (int64, error) {
//数据库操作
return utils.ModifyDB("update article set title=?,tags=?,short=?,content=? where id=?",
article.Title, article.Tags, article.Short, article.Content, article.Id)
}
//----------删除文章---------
func DeleteArticle(artID int) (int64, error) {
i, err := deleteArticleWithArtId(artID)
SetArticleRowsNum()
return i, err
}
func deleteArticleWithArtId(artID int) (int64, error) {
return utils.ModifyDB("delete from article where id=?", artID)
}
//查询标签,返回一个字段的列表
func QueryArticleWithParam(param string) []string {
rows, err := utils.QueryDB(fmt.Sprintf("select %s from article", param))
if err != nil {
log.Println(err)
}
var paramList []string
for rows.Next() {
arg := ""
rows.Scan(&arg)
paramList = append(paramList, arg)
}
return paramList
}