Go語言gin框架,簡單實現書箱的增刪查功能

目錄結構html

 

 

 

準備工做python

建立一下數據庫,新增一個表,插入兩行數據mysql

CREATE DATABASE libary;
CREATE TABLE `book` (
  `id` int(50) NOT NULL AUTO_INCREMENT,
  `title` varchar(50) DEFAULT NULL,
  `price` int(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
MariaDB [(none)]> USE libary
MariaDB [libary]> insert into book(id,title,price) VALUES(1,'C',50); 
MariaDB [libary]> insert into book(id,title,price) VALUES(2,'go',100); 
MariaDB [libary]> insert into book(id,title,price) VALUES(3,'python',150);
​

 

  • model.gogit

package model
type Book struct {
    ID int64 `db:"id"`
    Title string `db:"title"`
    Price int64 `db:"price"`
​
}

 

  • db.gogithub

package db
import (
​
    "fmt"
    "github.com/jmoiron/sqlx"
    _ "github.com/go-sql-driver/mysql"  //init()
    "book/model"
​
​
)
//go鏈接mysql示例
var db *sqlx.DB   //是一個鏈接池對象
​
​
func InitDB()(err error){
    //數據庫信息
    dsn := "book:book@tcp(10.0.0.90:3306)/libary"
    //鏈接數據庫
    db,err = sqlx.Connect("mysql",dsn) //不會檢驗用戶名和密碼是否正確
if err != nil{
​
        return err
    }
    err = db.Ping() //嘗試鏈接數據庫
    if err != nil {
​
        return
    }
​
    db.SetMaxOpenConns(10) //設置數據庫鏈接池最大鏈接數
    db.SetMaxIdleConns(5)  //設置最大空閒鏈接數
    return
}
​
// 查詢全部記錄
func QueryAllBook()(booklist []*model.Book,err error){
​
    //1.寫查詢單條記錄的sql語句
    sqlStr :=`select id,title,price from book;`
    err =db.Select(&booklist,sqlStr)
    if err !=nil{
        fmt.Println("查詢失敗")
        return
    }
    return
}
func AddBook(title string,price string)(booklist []*model.Book,err error){
​
    //1.寫查詢單條記錄的sql語句
    sqlStr :=`insert into book (title,price)VALUE (?,?);`
    _,err = db.Exec(sqlStr, title, price)
    if err !=nil{
        fmt.Println("插入失敗")
        return
    }
    return
}
​
///book/delete
​
func DelBook(id string)(booklist []*model.Book,err error){
​
    //1.寫查詢單條記錄的sql語句
    sqlStr :=`delete from book where id=?;`
    _,err = db.Exec(sqlStr,id)
    if err !=nil{
        fmt.Println("刪除失敗")
        return
    }
    return
}
 

 

  • main.gosql

package main
​
import (
    "book/db"
    "fmt"
    _ "github.com/go-sql-driver/mysql"  //init()
    "github.com/gin-gonic/gin"
    "net/http"
)
​
​
func main(){
​
    err := db.InitDB()
    if err !=nil{
        fmt.Printf("init DB failed,err:%v\n",err)
    }
    fmt.Println("鏈接數據庫成功!")
​
    r := gin.Default()
    r.LoadHTMLGlob("../templates/*")
    r.GET("/book_list", func(c *gin.Context) {
        dataAll,err := db.QueryAllBook()
        if err !=nil{
            fmt.Printf("get data failed:err",err)
        }
            c.HTML(http.StatusOK,"book_list.html",gin.H{"data":dataAll})
    })
//添加新書
    r.GET("/book/new", func(c *gin.Context) {
        c.HTML(200,"new_book.html",nil)
    })
    r.POST("/book/new", func(c *gin.Context) {
        tile := c.PostForm("title")
        price := c.PostForm("price")
        db.AddBook(tile,price)
        //c.String(http.StatusOK,"add book successful!")
        c.Redirect(http.StatusMovedPermanently,"/book_list")
    })
​
    //刪除書箱
    r.GET("/book/delete", func(c *gin.Context) {
        id := c.Query("id")
        db.DelBook(id)
        c.String(http.StatusOK,"delete book successful!")
    })
​
​
    r.Run(":8999")
​
}

 


 

  • templates數據庫

    book_list.html瀏覽器

    {{define "book_list.html"}}
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>書籍列表</title>
    </head>
    
    <body>
        <div><a href="/book/new">添加新書</a></div>
        <table border="1">
    
            <thead>
            <tr>
                <th>Id</th>
                <th>title</th>
                <th>price</th>
                <th>操做</th>
            </tr>
            </thead>
            <tbody>
    
            {{range .data}}
                <tr>
                    <td>{{.id}}</td>
                    <td>{{.title}}</td>
                    <td>{{.price}}</td>
                    <td><a href="/book/delete?id={{.id}}">刪除</a></td>
                </tr>
                    {{end}}
            </tbody>
        </table>
    </body>
    </html>
    {{end}}

     

     

    new_book.htmltcp

    {{define "new_book.html"}}
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>添加圖書信息</title>
    </head>
    <body>
    <form action="/book/new" method="post">
        <div>
            <label for="">書名:
                <input type="text" name="title">
            </label>
        </div>
        <div>
            <label for="">價格:
                <input type="number" name="price">
            </label>
        </div>
        <div>
            <input type="submit" value="提交">
        </div>
    </form>
    </body>
    </html>
    {{end}}

     

  • 瀏覽器訪問

相關文章
相關標籤/搜索