Gin-Go学习笔记三:Gin-Web框架 JS分页

JS 分页

1>     JS分页,业务逻辑

(1)     分页采用的是一个叫jquery.pagination.js的一个jquery插件

(2)     需要jquery的支持,此项目中使用到的是jquery-2.1.1.min.js

(3)     分页需要的参数有:记录总数,每页显示个数,页码

(4)     添加搜索的条件,作为查询使用

2>     编写新的model,命名为person.go.其代码如下:

   

package models

import (
	"log"
	"fmt"
 db "GinLearn/GinLearn/database"
)
//表结构
type Person struct {
   Id        int    `json:"id" form:"id"`
   FirstName string `json:"first_name" form:"first_name"`
   LastName  string `json:"last_name" form:"last_name"`
}

//新增记录
func (p *Person) AddPerson() bool {
   rs, err := db.SqlDB.Exec("INSERT INTO person(first_name, last_name) VALUES (?, ?)", p.FirstName, p.LastName)
   if err != nil {
     return false
   }
   id, err := rs.LastInsertId()
   fmt.Println(id)
   if err!=nil{
     return false
   }else{
     return true
   }
}

//修改记录
func (p *Person) EditPerson() bool {
  rs, err := db.SqlDB.Exec("UPDATE person set first_name=?,last_name=? where id=?", p.FirstName, p.LastName,p.Id)
  if err != nil {
    return false
  }
  id, err := rs.RowsAffected()
  fmt.Println(id)
  if err!=nil{
    return false
  }else{
    return true
  }
}

//删除记录
func DeletePerson(Id int) bool {
  rs, err := db.SqlDB.Exec("Delete From person where id=?", Id)
  if err != nil {
    return false
  }
  id, err := rs.RowsAffected()
  fmt.Println(id)
  if err!=nil{
    return false
  }else{
    return true
  }
}

//得到记录列表
func GetPersonList(pageno,pagesize int,search string) (persons []Person) {

    fmt.Println("搜索参数:"+search)
    persons = make([]Person, 0)
    //SQL查询分页语句
    if search!=""{
      rows, err := db.SqlDB.Query("SELECT id, first_name, last_name FROM person where 1=1 and last_name like '%"+search+"%' or first_name like '%"+search+"%' limit ?,?",(pageno-1)*pagesize,pagesize)
      if err != nil {
        return nil
       }
       defer rows.Close()
    
       //数据添加到数据集中
       for rows.Next() {
         var person Person
         rows.Scan(&person.Id, &person.FirstName, &person.LastName)
         persons = append(persons, person)
       }
       if err = rows.Err(); err != nil {
         return nil
       }
     
    }else{
      rows, err := db.SqlDB.Query("SELECT id, first_name, last_name FROM person where 1=1  limit ?,?",(pageno-1)*pagesize,pagesize)
      if err != nil {
        return nil
      }
      defer rows.Close()

    
     //数据添加到数据集中
     for rows.Next() {
       var person Person
       rows.Scan(&person.Id, &person.FirstName, &person.LastName)
       persons = append(persons, person)
      }
      if err = rows.Err(); err != nil {
       return nil
     }
  }
  return persons
}
//得到记录数
func GetRecordNum(search string) int {
   num:=0;

  //SQL查询分页语句
  if search!=""{
    rows, err := db.SqlDB.Query("SELECT id, first_name, last_name FROM person where 1=1 and first_name like '%?%' or last_name '%?%'",search,search)
    if err != nil {
      return 0
     }
     defer rows.Close()
  
     //数据添加到数据集中
     for rows.Next() {
       num++;
     }
   
  }else{
    rows, err := db.SqlDB.Query("SELECT id, first_name, last_name FROM person where 1=1")
    if err != nil {
      return 0
    }
    defer rows.Close()

  
   //数据添加到数据集中
  //数据添加到数据集中
  for rows.Next() {
    num++;
  }
  
}
return num
}
//得到用户数据
func  GetPersonById(Id int) (p *Person) {
 
  var person Person
  //根据ID查询得到对象
  err := db.SqlDB.QueryRow("SELECT id, first_name, last_name FROM person WHERE id=?", Id).Scan(
    &person.Id, &person.FirstName, &person.LastName,
   )
 
   //打印错误
   if err != nil {
    log.Println(err)
   }
   //返回对象
   return &person
}

  

3>     控制器person.go,其代码如下:

    

package apis

import (
	"fmt"
	"strconv"
  "net/http"
  "log"
  "github.com/gin-gonic/gin"
 . "GinLearn/GinLearn/models"
)
//初始页面
func IndexApi(c *gin.Context) {
  c.String(http.StatusOK, "Hello World!")
}
//渲染html页面
func ShowHtmlPage(c *gin.Context) {
  c.HTML(http.StatusOK, "index.html", gin.H{
      "title": "GIN: HTML页面",
  })
}


//列表页面
func ListHtml(c *gin.Context) {  
  c.HTML(http.StatusOK, "list.html", gin.H{
      "title": "GIN: 用户列表页面",
  })
}
//列表页面数据
func GetDataList(c *gin.Context) {  
  //得到请求的参数
  search:=c.PostForm("search")
  num:=c.PostForm("pageno")
  pageno,err:= strconv.Atoi(num) 
  if err!=nil{
    log.Fatalln(err)
  }
  //得到数据集
  datalist:=GetPersonList(pageno,3,search)

  //得到记录的总数
  count:=GetRecordNum(search)
 //返回结果
 c.JSON(http.StatusOK, gin.H{
  "datalist": datalist,
  "count":count,
  "pagesize":3,
  "pageno":pageno,
 })
}
//列表页面数据
func PageNextData(c *gin.Context) {  
  //得到请求的参数
  search:=c.PostForm("search")
  num:=c.PostForm("pageno")
  pageno,err:= strconv.Atoi(num) 
  if err!=nil{
    log.Fatalln(err)
  }
  //得到数据集
  datalist:=GetPersonList(pageno,3,search)

  //得到记录的总数
  count:=GetRecordNum(search)
 //返回结果
 c.JSON(http.StatusOK, gin.H{
  "datalist": datalist,
  "count":count,
  "pagesize":3,
  "pageno":pageno,
 })
}
//新增页面
func AddHtml(c *gin.Context){
  c.HTML(http.StatusOK, "add.html", gin.H{
    "title": "GIN: 新增用户页面",
  })
}
//新增记录
func AddPersonApi(c *gin.Context) {
 
   //得到请求的参数
   firstName := c.PostForm("first_name")
   lastName := c.PostForm("last_name")
   fmt.Println("执行到此处A")
   //赋值
   p := Person{FirstName: firstName, LastName: lastName}
   //调用模型中的新增的方法
   ra:= p.AddPerson()
   //返回结果
   c.JSON(http.StatusOK, gin.H{
    "success": ra,
  })
  c.Redirect(http.StatusOK,"/home/list")
}
//编辑页面
func EditHtml(c *gin.Context){
  //得到URL请求的参数
  num:=c.Query("id")

  id,err:= strconv.Atoi(num) 
 
  if err!=nil{
    log.Fatalln(err)
  }

  p:=GetPersonById(id)
   if p==nil{
    fmt.Println("得到数据错误")
   }else{
    fmt.Println(p)
    fmt.Println("得到数据正确")
   }

  c.HTML(http.StatusOK, "edit.html", gin.H{
    "title": "GIN: 编辑用户页面",
    "id":p.Id,
    "firstname":p.FirstName,
    "lastname":p.LastName,
  })
}
//编辑记录
func EditPersonApi(c *gin.Context) {
  fmt.Println("执行到此处")
  //得到请求的参数
  num:=c.PostForm("id")
  fmt.Println(num)
  id,err:= strconv.Atoi(num) 
  if err!=nil{
    log.Fatalln(err)
  }
  firstName := c.PostForm("first_name")
  lastName := c.PostForm("last_name")
  //赋值
  p := GetPersonById(id)
  p.FirstName=firstName
  p.LastName=lastName
  //调用模型中的编辑的方法
  ra:= p.EditPerson()
  //返回结果
  c.JSON(http.StatusOK, gin.H{
    "success": ra,
  })
  c.Redirect(http.StatusOK,"/home/list")
}

//删除记录
func DeletePersonApi(c *gin.Context) {
 
  //得到请求的参数
   num:=c.PostForm("id")
   fmt.Println(num)
   id,err:= strconv.Atoi(num) 
   if err!=nil{
    log.Fatalln(err)
  }
  //调用模型中的删除的方法
  ra:= DeletePerson(id)
  if ra == false {
   log.Fatalln("删除失败")
  }
  //返回结果
  c.JSON(http.StatusOK, gin.H{
    "success": ra,
  })
}

  

4>     路由配置如下:

   

package routers

import (
  "github.com/gin-gonic/gin"
  . "GinLearn/GinLearn/apis"
 )
 
func InitRouter() *gin.Engine{
  router := gin.Default()
  //Hello World
  router.GET("/", IndexApi)
  //渲染html页面
  router.LoadHTMLGlob("views/*")
  router.GET("/home/index", ShowHtmlPage)
  //列表页面
  router.GET("/home/list", ListHtml)
  router.POST("/home/PageData", GetDataList)
  router.POST("/home/PageNextData", PageNextData)

  //新增页面
  router.GET("/home/add", AddHtml)
  router.POST("/home/saveadd", AddPersonApi)
  
   //编辑页面
   router.GET("/home/edit", EditHtml)
   router.POST("/home/saveedit", EditPersonApi)

    //删除
    router.POST("/home/delete", DeletePersonApi)
  return router
 }
 

  

 

5>     新建list.html作为分页展示,新建add.html和edit.html页面,作为数据的新增和编辑,其具体代码如下:

1->list.html页面代码如下:

   


 

      
        首页 - 用户列表页面
         
         
        
      
       
    
     
        
ID 姓氏 名称 操作
         

  

 

2->add.html页面代码如下:

 


 

    
      首页 - 新增用户页面
        
      
       
          
    
       
    
      
>重置

  

  

 

3->edit.html页面代码如下:

 


 

    
      首页 - 新增用户页面
        
      
       
          
    
       
    
      

  

  

6>     Main.go的代码如下:

 

package main

import (
 db "GinLearn/GinLearn/database"
 router "GinLearn/GinLearn/routers"
)

func main() {
   //数据库
   defer db.SqlDB.Close()

   //路由部分
   router:=router.InitRouter()

   //静态资源
   router.Static("/static", "./static")

   //运行的端口
   router.Run(":8000")

}

  

7>     数据库配置文件mysql.go的代码如下:

 

 

package database

import (
 "database/sql"
 _ "github.com/go-sql-driver/mysql"
 "log"
)

var SqlDB *sql.DB

func init() {
 var err error
 SqlDB, err = sql.Open("mysql", "root:123456@tcp(192.168.1.87:3306)/test?parseTime=true")
 if err != nil {
  log.Fatal(err.Error())
 }
 err = SqlDB.Ping()
 if err != nil {
  log.Fatal(err.Error())
 }
}

  

8>     运行起来的效果如下:

 Gin-Go学习笔记三:Gin-Web框架 JS分页_第1张图片

 

 Gin-Go学习笔记三:Gin-Web框架 JS分页_第2张图片

 

 Gin-Go学习笔记三:Gin-Web框架 JS分页_第3张图片

Gin-Go学习笔记三:Gin-Web框架 JS分页_第4张图片

Gin-Go学习笔记三:Gin-Web框架 JS分页_第5张图片

Gin-Go学习笔记三:Gin-Web框架 JS分页_第6张图片

Gin-Go学习笔记三:Gin-Web框架 JS分页_第7张图片

 

9>     下一章节,讲bootstrap布局

 

转载于:https://www.cnblogs.com/tudaogaoyang/p/8072418.html

你可能感兴趣的:(Gin-Go学习笔记三:Gin-Web框架 JS分页)