package models import ( "database/sql" "errors" "fmt" "log" "strconv" "strings" "time" _ "github.com/go-sql-driver/mysql" "github.com/jmoiron/sqlx" ) var connection *sqlx.DB var connectionx *sql.DB func init() { var err error user := Viper.Get("mysql.user").(string) password := Viper.Get("mysql.password").(string) host := Viper.Get("mysql.host").(string) port := Viper.Get("mysql.port").(int) database := Viper.Get("mysql.database").(string) connection, err = sqlx.Connect("mysql", fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local", user, password, host, port, database)) if err != nil { log.Fatalln("连接数据库失败", err) } } type MysqlConnection struct { Database *sql.DB } // 初始化数据库连接 func (m *MysqlConnection) Init() (err error) { user := Viper.Get("mysql.user").(string) password := Viper.Get("mysql.password").(string) host := Viper.Get("mysql.host").(string) port := Viper.Get("mysql.port").(int) database := Viper.Get("mysql.database").(string) sqlconf := user + ":" + password + "@tcp(" + host + ":" + strconv.Itoa(port) + ")/" + database + "?charset=utf8mb4&parseTime=True&loc=Local" m.Database, err = sql.Open("mysql", sqlconf) // 连接数据库 if err != nil { log.Println("连接数据库失败", err) return } connectionx = m.Database return } // 根据图片 id 获取图片的 content func (m *MysqlConnection) GetImageContent(group string, id string) (content string, err error) { switch group { case "video": err = m.Database.QueryRow("SELECT image FROM web_sort_video WHERE id=" + id).Scan(&content) case "article": err = m.Database.QueryRow("SELECT image FROM web_article WHERE id=" + id).Scan(&content) case "article_attribute": err = m.Database.QueryRow("SELECT image FROM web_article_attribute WHERE id=" + id).Scan(&content) case "ad": err = m.Database.QueryRow("SELECT image FROM web_ad WHERE id=" + id).Scan(&content) case "avatar": err = m.Database.QueryRow("SELECT avatar FROM web_member WHERE id=" + id).Scan(&content) case "image": err = m.Database.QueryRow("SELECT content FROM web_images WHERE id=" + id).Scan(&content) default: err = errors.New("group 参数错误") } return content, err } // 获取图片列表 func (m *MysqlConnection) GetImages(page int, size int) (images []byte, err error) { rows, err := m.Database.Query("SELECT id, group, content FROM web_images LIMIT ?, ?", (page-1)*size, size) if err != nil { log.Println("获取图片列表失败", err) return } defer rows.Close() images = []byte("[") for rows.Next() { var id int var group string var content string err = rows.Scan(&id, &group, &content) if err != nil { log.Println("获取图片列表失败", err) return } images = append(images, []byte("{\"id\":"+strconv.Itoa(id)+",\"group\":\""+group+"\",\"content\":\""+content+"\"},")...) } images = images[:len(images)-1] images = append(images, []byte("]")...) return } type User struct { ID int `json:"id" db:"id"` UserName string `json:"user_name" db:"user_name"` Avatar string `json:"avatar" db:"avatar"` Rank string `json:"rank" db:"rank"` CreateTime time.Time `json:"create_time" db:"create_time"` UpdateTime time.Time `json:"update_time" db:"update_time"` } // 获取一组用户信息 func QueryUserList(id_list []int) (users []User) { count := len(id_list) if count == 0 { return } idstr := strings.Trim(strings.Replace(fmt.Sprint(id_list), " ", ",", -1), "[]") rows, err := connectionx.Query("SELECT id, user_name, avatar, update_time, create_time FROM web_member WHERE id IN (" + idstr + ") LIMIT " + strconv.Itoa(count)) if err != nil { log.Println("获取用户列表失败", err) return } defer rows.Close() for rows.Next() { var u User rows.Scan(&u.ID, &u.UserName, &u.Avatar, &u.UpdateTime, &u.CreateTime) u.UpdateTime = u.UpdateTime.UTC() u.CreateTime = u.CreateTime.UTC() users = append(users, u) } return } type Article struct { Id int `json:"id"` Title string `json:"title"` Tags string `json:"tags"` CreateTime time.Time `json:"create_time"` UpdateTime time.Time `json:"update_time"` } // 获取一组文章信息 func QueryArticleList(id_list []int) (articles []Article) { count := len(id_list) if count == 0 { return } idstr := strings.Trim(strings.Replace(fmt.Sprint(id_list), " ", ",", -1), "[]") rows, err := connectionx.Query("SELECT id, title, tags, update_time, create_time FROM web_article WHERE id IN (" + idstr + ") LIMIT " + strconv.Itoa(count)) if err != nil { log.Println("获取文章列表失败", err) return } defer rows.Close() for rows.Next() { var a Article rows.Scan(&a.Id, &a.Title, &a.Tags, &a.UpdateTime, &a.CreateTime) a.UpdateTime = a.UpdateTime.UTC() a.CreateTime = a.CreateTime.UTC() articles = append(articles, a) } return }